aboutsummaryrefslogtreecommitdiff
path: root/Src/replicant/component/ComponentManagerBase.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/replicant/component/ComponentManagerBase.h')
-rw-r--r--Src/replicant/component/ComponentManagerBase.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/Src/replicant/component/ComponentManagerBase.h b/Src/replicant/component/ComponentManagerBase.h
new file mode 100644
index 00000000..9559a3dd
--- /dev/null
+++ b/Src/replicant/component/ComponentManagerBase.h
@@ -0,0 +1,43 @@
+#pragma once
+#include "nx/nxuri.h"
+#include "service/api_service.h"
+#include "component/ifc_component.h"
+#include <deque>
+#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<ifc_component*> 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;
+};