171 lines
5.3 KiB
C
171 lines
5.3 KiB
C
|
// Copyright (C) 2007 Id Software, Inc.
|
||
|
//
|
||
|
|
||
|
#ifndef __NETWORKSYSTEM_H__
|
||
|
#define __NETWORKSYSTEM_H__
|
||
|
|
||
|
struct repeaterUserOrigin_t {
|
||
|
idVec3 origin;
|
||
|
int followClient;
|
||
|
};
|
||
|
|
||
|
#ifdef _XENON
|
||
|
|
||
|
const int MAX_ASYNC_CLIENTS = 16;
|
||
|
|
||
|
#else
|
||
|
|
||
|
const int MAX_ASYNC_CLIENTS = 32;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#ifdef SD_SUPPORT_REPEATER
|
||
|
|
||
|
const int REPEATER_CLIENT_INDEX = -1;
|
||
|
|
||
|
#endif // SD_SUPPORT_REPEATER
|
||
|
|
||
|
/*
|
||
|
===============================================================================
|
||
|
|
||
|
Network System.
|
||
|
|
||
|
===============================================================================
|
||
|
*/
|
||
|
|
||
|
struct clientNetworkAddress_t {
|
||
|
unsigned char ip[ 4 ];
|
||
|
unsigned short port;
|
||
|
|
||
|
bool operator==( const clientNetworkAddress_t& rhs ) const {
|
||
|
return ip[ 0 ] == rhs.ip[ 0 ] &&
|
||
|
ip[ 1 ] == rhs.ip[ 1 ] &&
|
||
|
ip[ 2 ] == rhs.ip[ 2 ] &&
|
||
|
ip[ 3 ] == rhs.ip[ 3 ] &&
|
||
|
port == rhs.port;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
enum voiceMode_t {
|
||
|
VO_GLOBAL,
|
||
|
VO_TEAM,
|
||
|
VO_FIRETEAM,
|
||
|
VO_NUM_MODES,
|
||
|
};
|
||
|
|
||
|
struct sdNetClientId;
|
||
|
class usercmd_t;
|
||
|
|
||
|
// packed up version for deltification and compression
|
||
|
struct net_usercmd_t {
|
||
|
short angles[ 2 ];
|
||
|
unsigned short buttons;
|
||
|
signed char forwardmove;
|
||
|
signed char rightmove;
|
||
|
signed char upmove;
|
||
|
};
|
||
|
|
||
|
struct usercmdDeltaInfo_t {
|
||
|
private:
|
||
|
net_usercmd_t usercmd;
|
||
|
bool isValid;
|
||
|
|
||
|
public:
|
||
|
usercmdDeltaInfo_t( void ) { isValid = false; }
|
||
|
void Invalidate( void ) { isValid = false; }
|
||
|
|
||
|
void WriteDelta( const usercmd_t& cmd, idBitMsg& msg );
|
||
|
void ReadDelta( usercmd_t& cmd, const idBitMsg& msg );
|
||
|
};
|
||
|
|
||
|
class idNetworkSystem {
|
||
|
public:
|
||
|
virtual ~idNetworkSystem( void );
|
||
|
|
||
|
virtual void ServerSendReliableMessage( int clientNum, const idBitMsg& msg );
|
||
|
#ifdef SD_SUPPORT_REPEATER
|
||
|
virtual void RepeaterSendReliableMessage( int clientNum, const idBitMsg& msg, bool ignoreRelays );
|
||
|
#endif // SD_SUPPORT_REPEATER
|
||
|
|
||
|
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 ServerGetClientNetworkInfo( int clientNum, clientNetworkAddress_t& info );
|
||
|
virtual void ServerGetClientNetId( int clientNum, sdNetClientId& netClientId );
|
||
|
virtual const usercmd_t* ServerGetClientUserCmd( int clientNum, int frameNum );
|
||
|
virtual void ServerKickClient( int clientNum, const char* reason, bool localizedReason );
|
||
|
|
||
|
//mal: allow the network to access some engine side bot functions....
|
||
|
virtual int AllocateClientSlotForBot( int maxPlayersOnServer );
|
||
|
virtual int ServerSetBotUserCommand( int clientNum, int frameNum, const usercmd_t& cmd );
|
||
|
virtual int ServerSetBotUserName( int clientNum, const char* playerName );
|
||
|
//mal: end of bot network functions
|
||
|
|
||
|
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 const usercmd_t* ClientGetUserCmd( int clientNum, int frameNum );
|
||
|
virtual void WriteClientUserCmds( int clientNum, idBitMsg& msg );
|
||
|
virtual void ReadClientUserCmds( int clientNum, const idBitMsg& msg );
|
||
|
virtual bool IsDedicated( void );
|
||
|
virtual bool IsLANServer( void );
|
||
|
virtual bool IsActive( void );
|
||
|
virtual bool IsClient( void );
|
||
|
|
||
|
virtual netadr_t ClientGetServerAddress( void ) const;
|
||
|
virtual netadr_t ServerGetBoundAddress( void ) const;
|
||
|
|
||
|
virtual void WriteSound( short* buffer, int numSamples );
|
||
|
virtual int UpdateSound( float* buffer, int numSpeakers, int numSamples );
|
||
|
|
||
|
virtual void BeginLevelLoad( void );
|
||
|
virtual void EndLevelLoad( void );
|
||
|
|
||
|
virtual void EnableVoip( voiceMode_t mode );
|
||
|
virtual void DisableVoip( void );
|
||
|
|
||
|
virtual int GetLastVoiceSentTime( void );
|
||
|
virtual int GetLastVoiceReceivedTime( int clientIndex );
|
||
|
|
||
|
virtual int ClientGetFrameTime( void );
|
||
|
|
||
|
virtual int GetDemoState( int& time, int& position, int& length, int& startPosition, int& endPosition, int &cutStartMarker, int &cutEndMarker );
|
||
|
virtual const char* GetDemoName( void );
|
||
|
|
||
|
virtual bool CanPlayDemo( const char* fileName );
|
||
|
|
||
|
virtual const idDict& GetUserInfo( int clientNum );
|
||
|
|
||
|
virtual bool IsRankedServer( void );
|
||
|
|
||
|
virtual void StartSoundTest( int duration );
|
||
|
virtual bool IsSoundTestActive( void );
|
||
|
virtual bool IsSoundTestPlaybackActive( void );
|
||
|
virtual float GetSoundTestProgress( void );
|
||
|
|
||
|
virtual voiceMode_t GetVoiceMode( void );
|
||
|
|
||
|
virtual void RegisterServerInterest( const netadr_t& address );
|
||
|
|
||
|
#if !defined( SD_PUBLIC_TOOLS )
|
||
|
virtual bool HTTPEnable( bool enable );
|
||
|
#endif // !SD_PUBLIC_TOOLS
|
||
|
|
||
|
#ifdef SD_SUPPORT_REPEATER
|
||
|
virtual void RepeaterSetInfo( const idDict& info );
|
||
|
virtual const idDict& RepeaterGetClientInfo( int clientNum );
|
||
|
virtual void SetClientRepeaterUserOrigin( const repeaterUserOrigin_t& origin );
|
||
|
#endif // SD_SUPPORT_REPEATER
|
||
|
};
|
||
|
|
||
|
extern idNetworkSystem * networkSystem;
|
||
|
|
||
|
#endif /* !__NETWORKSYSTEM_H__ */
|