Graphisoft®

API Development KitVersion: 18

API_HotlinkCacheGenerator

핫링크 캐시의 업데이트된 내용을 생성하기 위한 베이스 클래스입니다.

    class API_HotlinkCacheGenerator {
        public:
             virtual             ~API_HotlinkCacheGenerator () {};
             virtual GSErrCode   GenerateCacheContentForHotlinkNode (const API_Guid &hotlinkNodeGuid) = 0;       
    };

 

설명

애드온에 의해 핫링크 노트가 생성될 때, 핫링크 캐시의 내용 역시 생성되어야 합니다. 캐시 데이터베이스에 적절한 요소들과 속성들을 생성하기 위해, API_HotlinkCacheGenerator 객체를 APIDb_UpdateHotlinkCacheID 함수에 전달해야 합니다. 객체의 GenerateCacheContentForHotlinkNode 메서드가 핫링크 업데이트 함수로부터 콜백되었을 때, (ACAPI_Element_CreateACAPI_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

 

참고사항

APIDb_GetHotlinkNodeID
APIDb_UpdateHotlinkCacheID