API_HotlinkCacheGenerator
핫링크 캐시의 업데이트된 내용을 생성하기 위한 베이스 클래스입니다.
class API_HotlinkCacheGenerator { public: virtual ~API_HotlinkCacheGenerator () {}; virtual GSErrCode GenerateCacheContentForHotlinkNode (const API_Guid &hotlinkNodeGuid) = 0; };
설명
애드온에 의해 핫링크 노트가 생성될 때, 핫링크 캐시의 내용 역시 생성되어야 합니다.
캐시 데이터베이스에 적절한 요소들과 속성들을 생성하기 위해, API_HotlinkCacheGenerator
객체를 APIDb_UpdateHotlinkCacheID 함수에 전달해야 합니다.
객체의 GenerateCacheContentForHotlinkNode
메서드가 핫링크 업데이트 함수로부터 콜백되었을 때,
(ACAPI_Element_Create와 ACAPI_Attribute_Create 같은)
표준 요소 및 속성 생성자 함수들은 프로젝트 데이터베이스가 아닌 핫링크 캐시 데이터베이스에 요소들과 속성들을 생성하기 위해 리디렉션됩니다.
만약 GenerateCacheContentForHotlinkNode
함수가 오류를 리턴하면, 업데이트 프로세스는 취소됩니다.
예제
class HotlinkCacheGenerator: public API_HotlinkCacheGenerator { public: virtual GSErrCode GenerateCacheContentForHotlinkNode (const API_Guid& hotlinkNodeGuid) { API_HotlinkNode hotlinkNode; BNZeroMemory (&hotlinkNode, sizeof (API_HotlinkNode)); hotlinkNode.guid = hotlinkNodeGuid; GSErrCode err = ACAPI_Database (APIDb_GetHotlinkNodeID, &hotlinkNode); if (err == NoError && hotlinkNode.sourceLocation != NULL) { IO::File sourceFile (*hotlinkNode.sourceLocation); err = sourceFile.GetStatus (); if (err == NoError) { // 파일을 읽고 캐시 데이터베이스에 요소들과 속성들을 작성합니다. } } if (hotlinkNode.sourceLocation != NULL) delete hotlinkNode.sourceLocation; if (hotlinkNode.userData.data != NULL) BMKillPtr (&hotlinkNode.userData.data); return err; } } hotlinkCacheGenerator; GS::HashSet<API_Guid> alreadyUpdatedNodes; GS::Array<API_Guid> elemList; ACAPI_Element_GetElemList (API_HotlinkID, &elemList); for (GS::Array<API_Guid>::ConstIterator it = elemList.Enumerate (); it != NULL; ++it) { API_Element hotlinkElem; BNZeroMemory (&hotlinkElem, sizeof (API_Element)); hotlinkElem.header.guid = *it; if (ACAPI_Element_Get (&hotlinkElem) == NoError) { if (!alreadyUpdatedNodes.Contains (hotlinkElem.hotlink.hotlinkNodeGuid)) { ACAPI_Database (APIDb_UpdateHotlinkCacheID, &hotlinkElem.hotlink.hotlinkNodeGuid, &hotlinkCacheGenerator); alreadyUpdatedNodes.Add (hotlinkElem.hotlink.hotlinkNodeGuid); } } }
요구사항
- 버전: API 12 또는 이후
- 헤더: APIdefs_Database.h