#pragma once class AppSystemInfo_t; enum InitReturnVal_t; enum AppSystemTier_t { APP_SYSTEM_TIER0 = 0, APP_SYSTEM_TIER1, APP_SYSTEM_TIER2, APP_SYSTEM_TIER3, APP_SYSTEM_TIER_OTHER, }; using CreateInterfaceFn = void*( *)( const char*, int* ); class IAppSystem { public: // Here's where the app systems get to learn about each other virtual bool Connect( CreateInterfaceFn factory ) = 0; virtual void Disconnect( ) = 0; // Here's where systems can access other interfaces implemented by this object // Returns NULL if it doesn't implement the requested interface virtual void *QueryInterface( const char *pInterfaceName ) = 0; // Init, shutdown virtual InitReturnVal_t Init( ) = 0; virtual void Shutdown( ) = 0; };