/* =========================================================================== Doom 3 GPL Source Code Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company. This file is part of the Doom 3 GPL Source Code. Quake 4 compatibility additions guarded with QUAKE4. =========================================================================== */ #ifndef __NETWORKSYSTEM_H__ #define __NETWORKSYSTEM_H__ /* =============================================================================== Network System. =============================================================================== */ #ifdef QUAKE4 typedef struct scannedClient_s { idStr nickname; idStr clan; short ping; int rate; } scannedClient_t; typedef struct scannedServer_s { netadr_t adr; idDict serverInfo; int ping; int clients; int OSMask; // RAVEN BEGIN // shouchard: server browser metadata bool favorite; bool dedicated; bool performanceFiltered; // RAVEN END } scannedServer_t; typedef enum sortColumn_e { SC_NONE = -1, SC_FAVORITE, SC_LOCKED, SC_DEDICATED, SC_PB, SC_NAME, SC_PING, SC_REPEATER, SC_PLAYERS, SC_GAMETYPE, SC_MAP, SC_ALL, NUM_SC } sortColumn_t; typedef struct sortInfo_s { sortColumn_t column; idList::cmp_t * compareFn; idList::filter_t * filterFn; const char * description; } sortInfo_t; #endif // QUAKE4 class idNetworkSystem { public: virtual ~idNetworkSystem( void ) {} #ifdef QUAKE4 virtual void Shutdown( void ); virtual void ServerSendReliableMessage( int clientNum, const idBitMsg &msg, bool inhibitRepeater = false ); virtual void RepeaterSendReliableMessage( int clientNum, const idBitMsg &msg, bool inhibitHeader = false, int including = -1 ); virtual void RepeaterSendReliableMessageExcluding( int excluding, const idBitMsg &msg, bool inhibitHeader = false, int clientNum = -1 ); virtual void ServerSendReliableMessageExcluding( int clientNum, const idBitMsg &msg, bool inhibitRepeater = false ); virtual int ServerGetClientPing( int clientNum ); virtual int ServerGetClientPrediction( int clientNum ); virtual int ServerGetClientTimeSinceLastPacket( int clientNum ); virtual int ServerGetClientTimeSinceLastInput( int clientNum ); virtual int ServerGetClientOutgoingRate( int clientNum ); virtual int ServerGetClientIncomingRate( int clientNum ); virtual float ServerGetClientIncomingPacketLoss( int clientNum ); virtual int ServerGetClientNum( int clientId ); virtual int ServerGetServerTime( void ); // returns the new clientNum or -1 if there weren't any free. virtual int ServerConnectBot( void ); virtual int RepeaterGetClientNum( int clientId ); virtual void ClientSendReliableMessage( const idBitMsg &msg ); virtual int ClientGetPrediction( void ); virtual int ClientGetTimeSinceLastPacket( void ); virtual int ClientGetOutgoingRate( void ); virtual int ClientGetIncomingRate( void ); virtual float ClientGetIncomingPacketLoss( void ); // RAVEN BEGIN // ddynerman: added utility functions. Returned strings may use static storage. virtual const char * GetServerAddress( void ); virtual const char * GetClientAddress( int clientNum ); virtual void AddFriend( int clientNum ); virtual void RemoveFriend( int clientNum ); virtual void SetLoadingText( const char *loadingText ); virtual void AddLoadingIcon( const char *icon ); virtual const char * GetClientGUID( int clientNum ); // RAVEN END virtual void GetTrafficStats( int &bytesSent, int &packetsSent, int &bytesReceived, int &packetsReceived ) const; // server browser virtual int GetNumScannedServers( void ); virtual const scannedServer_t *GetScannedServerInfo( int serverNum ); virtual const scannedClient_t *GetScannedServerClientInfo( int serverNum, int clientNum ); virtual void AddSortFunction( const sortInfo_t &sortInfo ); virtual bool RemoveSortFunction( const sortInfo_t &sortInfo ); virtual void UseSortFunction( const sortInfo_t &sortInfo, bool use = true ); virtual bool SortFunctionIsActive( const sortInfo_t &sortInfo ); // returns true if enabled virtual bool HTTPEnable( bool enable ); virtual void ClientSetServerInfo( const idDict &serverSI ); virtual void RepeaterSetInfo( const idDict &info ); virtual const char * GetViewerGUID( int clientNum ); #else // !QUAKE4 virtual void ServerSendReliableMessage( int clientNum, const idBitMsg &msg ); virtual void ServerSendReliableMessageExcluding( int clientNum, const idBitMsg &msg ); virtual int ServerGetClientPing( int clientNum ); virtual int ServerGetClientPrediction( int clientNum ); virtual int ServerGetClientTimeSinceLastPacket( int clientNum ); virtual int ServerGetClientTimeSinceLastInput( int clientNum ); virtual int ServerGetClientOutgoingRate( int clientNum ); virtual int ServerGetClientIncomingRate( int clientNum ); virtual float ServerGetClientIncomingPacketLoss( int clientNum ); virtual void ClientSendReliableMessage( const idBitMsg &msg ); virtual int ClientGetPrediction( void ); virtual int ClientGetTimeSinceLastPacket( void ); virtual int ClientGetOutgoingRate( void ); virtual int ClientGetIncomingRate( void ); virtual float ClientGetIncomingPacketLoss( void ); virtual int AllocateClientSlotForBot(int maxPlayersOnServer); virtual int ServerSetBotUserCommand(int clientNum, int frameNum, const usercmd_t& cmd); virtual int ServerSetBotUserName(int clientNum, const char* playerName); #endif // QUAKE4 #ifdef QUAKE4 private: scannedServer_t scannedServer; scannedClient_t scannedClient; idList sortFunctions; idList activeSortFunctions; idDict clientServerInfo; idDict repeaterInfo; bool httpEnabled; #endif }; extern idNetworkSystem * networkSystem; #endif /* !__NETWORKSYSTEM_H__ */