You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.7 KiB
122 lines
3.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: An application framework |
|
// |
|
// $Revision: $ |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef IAPPSYSTEM_H |
|
#define IAPPSYSTEM_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "tier1/interface.h" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Client systems are singleton objects in the client codebase responsible for |
|
// various tasks |
|
// The order in which the client systems appear in this list are the |
|
// order in which they are initialized and updated. They are shut down in |
|
// reverse order from which they are initialized. |
|
//----------------------------------------------------------------------------- |
|
|
|
enum InitReturnVal_t |
|
{ |
|
INIT_FAILED = 0, |
|
INIT_OK, |
|
|
|
INIT_LAST_VAL, |
|
}; |
|
|
|
|
|
abstract_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; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Helper empty implementation of an IAppSystem |
|
//----------------------------------------------------------------------------- |
|
template< class IInterface > |
|
class CBaseAppSystem : public IInterface |
|
{ |
|
public: |
|
// Here's where the app systems get to learn about each other |
|
virtual bool Connect( CreateInterfaceFn factory ) { return true; } |
|
virtual void Disconnect() {} |
|
|
|
// 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 ) { return NULL; } |
|
|
|
// Init, shutdown |
|
virtual InitReturnVal_t Init() { return INIT_OK; } |
|
virtual void Shutdown() {} |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Helper implementation of an IAppSystem for tier0 |
|
//----------------------------------------------------------------------------- |
|
template< class IInterface > |
|
class CTier0AppSystem : public CBaseAppSystem< IInterface > |
|
{ |
|
public: |
|
CTier0AppSystem( bool bIsPrimaryAppSystem = true ) |
|
{ |
|
m_bIsPrimaryAppSystem = bIsPrimaryAppSystem; |
|
} |
|
|
|
protected: |
|
// NOTE: a single DLL may have multiple AppSystems it's trying to |
|
// expose. If this is true, you must return true from only |
|
// one of those AppSystems; not doing so will cause all static |
|
// libraries connected to it to connect/disconnect multiple times |
|
|
|
// NOTE: We don't do this as a virtual function to avoid |
|
// having to up the version on all interfaces |
|
bool IsPrimaryAppSystem() { return m_bIsPrimaryAppSystem; } |
|
|
|
private: |
|
bool m_bIsPrimaryAppSystem; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// This is the version of IAppSystem shipped 10/15/04 |
|
// NOTE: Never change this!!! |
|
//----------------------------------------------------------------------------- |
|
abstract_class IAppSystemV0 |
|
{ |
|
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; |
|
}; |
|
|
|
#endif // IAPPSYSTEM_H |
|
|
|
|