#ifndef IAPPSYSTEM_H #define IAPPSYSTEM_H #ifdef COMPILER_MSVC #pragma once #endif #include "interface.h" struct AppSystemInfo_t { const char* m_pModuleName; const char* m_pInterfaceName; }; enum InitReturnVal_t { INIT_FAILED = 0, INIT_OK, INIT_LAST_VAL, }; enum AppSystemTier_t { APP_SYSTEM_TIER0 = 0, APP_SYSTEM_TIER1, APP_SYSTEM_TIER2, APP_SYSTEM_TIER3, APP_SYSTEM_TIER_OTHER, }; abstract_class IAppSystem { public: virtual bool Connect(CreateInterfaceFn factory) = 0; virtual void Disconnect() = 0; virtual void* QueryInterface(const char* pInterfaceName) = 0; virtual InitReturnVal_t Init() = 0; virtual void Shutdown() = 0; virtual const AppSystemInfo_t* GetDependencies() { return NULL; } virtual AppSystemTier_t GetTier() { return APP_SYSTEM_TIER_OTHER; } virtual void Reconnect(CreateInterfaceFn factory, const char* pInterfaceName) {} virtual bool IsSingleton() { return true; } }; template< class IInterface > class CBaseAppSystem : public IInterface { public: virtual bool Connect(CreateInterfaceFn factory) { return true; } virtual void Disconnect() {} virtual void* QueryInterface(const char* pInterfaceName) { return NULL; } virtual InitReturnVal_t Init() { return INIT_OK; } virtual void Shutdown() {} virtual const AppSystemInfo_t* GetDependencies() { return NULL; } virtual AppSystemTier_t GetTier() { return APP_SYSTEM_TIER_OTHER; } virtual void Reconnect(CreateInterfaceFn factory, const char* pInterfaceName); }; template< class IInterface > class CTier0AppSystem : public CBaseAppSystem< IInterface > { }; #endif