winamp/Src/replicant/component/ComponentManagerBase.h
2024-09-24 14:54:57 +02:00

43 lines
1.2 KiB
C++

#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;
};