summaryrefslogtreecommitdiff
path: root/engine/server.h
diff options
context:
space:
mode:
Diffstat (limited to 'engine/server.h')
-rw-r--r--engine/server.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/engine/server.h b/engine/server.h
new file mode 100644
index 0000000..54983d3
--- /dev/null
+++ b/engine/server.h
@@ -0,0 +1,200 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $Workfile: $
+// $NoKeywords: $
+//=============================================================================//
+#if !defined( SERVER_H )
+#define SERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "basetypes.h"
+#include "filesystem.h"
+#include "packed_entity.h"
+#include "bitbuf.h"
+#include "netadr.h"
+#include "checksum_crc.h"
+#include "quakedef.h"
+#include "engine/IEngineSound.h"
+#include "precache.h"
+#include "sv_client.h"
+#include "baseserver.h"
+#include <ihltvdirector.h>
+
+
+class CGameTrace;
+class ITraceFilter;
+class CEventInfo;
+typedef CGameTrace trace_t;
+typedef int TABLEID;
+class IChangeInfoAccessor;
+class CPureServerWhitelist;
+
+
+// find a server class
+ServerClass* SV_FindServerClass( const char *pName );
+ServerClass* SV_FindServerClass( int index );
+
+
+//=============================================================================
+
+// Max # of master servers this server can be associated with
+
+class CGameServer : public CBaseServer
+{
+
+public:
+ CGameServer();
+ virtual ~CGameServer();
+
+
+public: // IServer implementation
+
+ bool IsPausable( void ) const;
+ void Init( bool isDedicated );
+ void Clear( void );
+ void Shutdown( void );
+ void SetMaxClients(int number);
+
+public:
+ void InitMaxClients( void );
+ bool SpawnServer( const char *szMapName, const char *szMapFile, const char *startspot );
+ void SetQueryPortFromSteamServer();
+ void CopyPureServerWhitelistToStringTable();
+ void RemoveClientFromGame( CBaseClient *client );
+ void SendClientMessages ( bool bSendSnapshots );
+ void FinishRestore();
+ void BroadcastSound( SoundInfo_t &sound, IRecipientFilter &filter );
+ bool IsLevelMainMenuBackground( void ) { return m_bIsLevelMainMenuBackground; }
+
+ // This is true when we start a level and sv_pure is set to 1.
+ bool IsInPureServerMode() const;
+ CPureServerWhitelist * GetPureServerWhitelist() const;
+
+ inline CGameClient *Client( int i ) { return static_cast<CGameClient*>(m_Clients[i]); };
+
+protected :
+
+ // Reload the whitelist files for pure server mode.
+ void ReloadWhitelist( const char *pMapName );
+
+ CBaseClient *CreateNewClient( int slot );
+ bool FinishCertificateCheck( netadr_t &adr, int nAuthProtocol, const char *szRawCertificate, int clientChallenge );
+ void SendClientDatagrams ( int clientCount, CGameClient** clients, CFrameSnapshot* pSnapshot );
+ void CopyTempEntities( CFrameSnapshot* pSnapshot );
+ void AssignClassIds();
+
+ virtual void UpdateMasterServerPlayers();
+
+ // Data
+public:
+
+ bool m_bLoadgame; // handle connections specially
+
+ char m_szStartspot[64];
+
+ int num_edicts;
+ int max_edicts;
+ int free_edicts; // how many edicts in num_edicts are free, in use is num_edicts - free_edicts
+ edict_t *edicts; // Can array index now, edict_t is fixed
+ IChangeInfoAccessor *edictchangeinfo; // HACK to allow backward compat since we can't change edict_t layout
+
+ int m_nMaxClientsLimit; // Max allowed on server.
+
+ bool allowsignonwrites;
+ bool dll_initialized; // Have we loaded the game dll.
+
+ bool m_bIsLevelMainMenuBackground; // true if the level running only as the background to the main menu
+
+ CUtlVector<CEventInfo*> m_TempEntities; // temp entities
+
+ bf_write m_FullSendTables;
+ CUtlMemory<byte> m_FullSendTablesBuffer;
+
+ bool m_bLoadedPlugins;
+
+public:
+
+ // New style precache lists are done this way
+ void CreateEngineStringTables( void );
+
+ INetworkStringTable *GetModelPrecacheTable( void ) const;
+ INetworkStringTable *GetGenericPrecacheTable( void ) const;
+ INetworkStringTable *GetSoundPrecacheTable( void ) const;
+ INetworkStringTable *GetDecalPrecacheTable( void ) const;
+
+ INetworkStringTable *GetDynamicModelsTable( void ) const { return m_pDynamicModelsTable; }
+
+
+ // Accessors to model precaching stuff
+ int PrecacheModel( char const *name, int flags, model_t *model = NULL );
+ model_t *GetModel( int index );
+ int LookupModelIndex( char const *name );
+
+ // Accessors to model precaching stuff
+ int PrecacheSound( char const *name, int flags );
+ char const *GetSound( int index );
+ int LookupSoundIndex( char const *name );
+
+ int PrecacheGeneric( char const *name, int flags );
+ char const *GetGeneric( int index );
+ int LookupGenericIndex( char const *name );
+
+ int PrecacheDecal( char const *name, int flags );
+ int LookupDecalIndex( char const *name );
+
+ void DumpPrecacheStats( INetworkStringTable *table );
+
+ bool IsHibernating() const;
+ void UpdateHibernationState();
+
+private:
+ void SetHibernating( bool bHibernating );
+
+ CPrecacheItem model_precache[ MAX_MODELS ];
+ CPrecacheItem generic_precache[ MAX_GENERIC ];
+ CPrecacheItem sound_precache[ MAX_SOUNDS ];
+ CPrecacheItem decal_precache[ MAX_BASE_DECALS ];
+
+ INetworkStringTable *m_pModelPrecacheTable;
+ INetworkStringTable *m_pSoundPrecacheTable;
+ INetworkStringTable *m_pGenericPrecacheTable;
+ INetworkStringTable *m_pDecalPrecacheTable;
+
+ INetworkStringTable *m_pDynamicModelsTable;
+
+ CPureServerWhitelist *m_pPureServerWhitelist;
+ bool m_bHibernating; // Are we hibernating. Hibernation makes server process consume approx 0 CPU when no clients are connected
+};
+
+//============================================================================
+
+class IServerGameDLL;
+class IServerGameEnts;
+class IServerGameClients;
+class IServerGameTags;
+extern IServerGameDLL *serverGameDLL;
+extern int g_iServerGameDLLVersion;
+extern IServerGameEnts *serverGameEnts;
+
+extern IServerGameClients *serverGameClients;
+extern int g_iServerGameClientsVersion; // This matches the number at the end of the interface name (so for "ServerGameClients004", this would be 4).
+
+extern IHLTVDirector *serverGameDirector;
+
+extern IServerGameTags *serverGameTags;
+
+// Master server address struct for use in building heartbeats
+extern ConVar skill;
+extern ConVar deathmatch;
+extern ConVar coop;
+
+extern CGameServer sv; // local server
+extern CGameClient *host_client; // current processing client
+
+
+#endif // SERVER_H