#pragma once #include "nx/nxuri.h" #include "service/api_service.h" #include "component/ifc_component.h" #include #include "component/ifc_component_sync.h" class ComponentManagerBase { public: void SetServiceAPI(api_service *service_api); int Load(); void SetFrameworkGUID(GUID guid); GUID GetFrameworkGUID(); void SetApplicationGUID(GUID guid); GUID GetApplicationGUID(); virtual int AddComponent(ifc_component *component); protected: ComponentManagerBase(); int LateLoad(ifc_component *mod); enum Phase { PHASE_INITIALIZE=0, /* components are still being added */ PHASE_REGISTERED=1, /* RegisterServices() has been called on all components */ PHASE_LOADING=2, /* OnLoading() has been called on all components */ PHASE_LOADED=3, /* OnLoaded() has been called on all components */ }; Phase phase; typedef std::deque ComponentList; ComponentList components; api_service *service_api; ifc_component_sync *component_sync; GUID framework_guid; GUID application_guid; private: /* your implementation needs to override this. You should call FreeLibrary(component->component_info.hModule); or dlclose(component->component_info.dl_handle); or similar */ virtual void CloseComponent(ifc_component *component)=0; };