123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #ifndef __ASYNCSERVER_H__
- #define __ASYNCSERVER_H__
- const int MAX_CHALLENGES = 1024;
- const int AUTHORIZE_TIMEOUT = 5000;
- typedef enum {
- CDK_WAIT = 0,
-
-
- CDK_OK,
- CDK_ONLYLAN,
- CDK_PUREWAIT,
- CDK_PUREOK,
- CDK_MAXSTATES
- } authState_t;
- typedef enum {
- AUTH_NONE = 0,
- AUTH_OK,
- AUTH_WAIT,
- AUTH_DENY,
- AUTH_MAXSTATES
- } authReply_t;
- typedef enum {
- AUTH_REPLY_WAITING = 0,
- AUTH_REPLY_UNKNOWN,
- AUTH_REPLY_DENIED,
- AUTH_REPLY_PRINT,
- AUTH_REPLY_SRVWAIT,
- AUTH_REPLY_MAXSTATES
- } authReplyMsg_t;
- typedef struct challenge_s {
- netadr_t address;
- int clientId;
- int challenge;
- int time;
- int pingTime;
- bool connected;
- authState_t authState;
- authReply_t authReply;
- authReplyMsg_t authReplyMsg;
- idStr authReplyPrint;
- char guid[12];
- int OS;
- } challenge_t;
- typedef enum {
- SCS_FREE,
- SCS_ZOMBIE,
- SCS_PUREWAIT,
- SCS_CONNECTED,
- SCS_INGAME
- } serverClientState_t;
- typedef struct serverClient_s {
- int OS;
- int clientId;
- serverClientState_t clientState;
- int clientPrediction;
- int clientAheadTime;
- int clientRate;
- int clientPing;
- int gameInitSequence;
- int gameFrame;
- int gameTime;
- idMsgChannel channel;
- int lastConnectTime;
- int lastEmptyTime;
- int lastPingTime;
- int lastSnapshotTime;
- int lastPacketTime;
- int lastInputTime;
- int snapshotSequence;
- int acknowledgeSnapshotSequence;
- int numDuplicatedUsercmds;
- char guid[12];
- } serverClient_t;
- class idAsyncServer {
- public:
- idAsyncServer();
- bool InitPort( void );
- void ClosePort( void );
- void Spawn( void );
- void Kill( void );
- void ExecuteMapChange( void );
- int GetPort( void ) const;
- netadr_t GetBoundAdr( void ) const;
- bool IsActive( void ) const { return active; }
- int GetDelay( void ) const { return gameTimeResidual; }
- int GetOutgoingRate( void ) const;
- int GetIncomingRate( void ) const;
- bool IsClientInGame( int clientNum ) const;
- int GetClientPing( int clientNum ) const;
- int GetClientPrediction( int clientNum ) const;
- int GetClientTimeSinceLastPacket( int clientNum ) const;
- int GetClientTimeSinceLastInput( int clientNum ) const;
- int GetClientOutgoingRate( int clientNum ) const;
- int GetClientIncomingRate( int clientNum ) const;
- float GetClientOutgoingCompression( int clientNum ) const;
- float GetClientIncomingCompression( int clientNum ) const;
- float GetClientIncomingPacketLoss( int clientNum ) const;
- int GetNumClients( void ) const;
- int GetNumIdleClients( void ) const;
- int GetLocalClientNum( void ) const { return localClientNum; }
- void RunFrame( void );
- void ProcessConnectionLessMessages( void );
- void RemoteConsoleOutput( const char *string );
- void SendReliableGameMessage( int clientNum, const idBitMsg &msg );
- void SendReliableGameMessageExcluding( int clientNum, const idBitMsg &msg );
- void LocalClientSendReliableMessage( const idBitMsg &msg );
- void MasterHeartbeat( bool force = false );
- void DropClient( int clientNum, const char *reason );
- void PacifierUpdate( void );
- void UpdateUI( int clientNum );
- void UpdateAsyncStatsAvg( void );
- void GetAsyncStatsAvgMsg( idStr &msg );
- void PrintLocalServerInfo( void );
- private:
- bool active;
- int realTime;
- int serverTime;
- idPort serverPort;
- int serverId;
- int serverDataChecksum;
- int localClientNum;
- challenge_t challenges[MAX_CHALLENGES];
- serverClient_t clients[MAX_ASYNC_CLIENTS];
- usercmd_t userCmds[MAX_USERCMD_BACKUP][MAX_ASYNC_CLIENTS];
- int gameInitId;
- int gameFrame;
- int gameTime;
- int gameTimeResidual;
- netadr_t rconAddress;
-
- int nextHeartbeatTime;
- int nextAsyncStatsTime;
- bool serverReloadingEngine;
- bool noRconOutput;
- int lastAuthTime;
-
-
- static const int stats_numsamples = 60;
- int stats_outrate[ stats_numsamples ];
- int stats_current;
- int stats_average_sum;
- int stats_max;
- int stats_max_index;
- void PrintOOB( const netadr_t to, int opcode, const char *string );
- void DuplicateUsercmds( int frame, int time );
- void ClearClient( int clientNum );
- void InitClient( int clientNum, int clientId, int clientRate );
- void InitLocalClient( int clientNum );
- void BeginLocalClient( void );
- void LocalClientInput( void );
- void CheckClientTimeouts( void );
- void SendPrintBroadcast( const char *string );
- void SendPrintToClient( int clientNum, const char *string );
- void SendUserInfoBroadcast( int userInfoNum, const idDict &info, bool sendToAll = false );
- void SendUserInfoToClient( int clientNum, int userInfoNum, const idDict &info );
- void SendSyncedCvarsBroadcast( const idDict &cvars );
- void SendSyncedCvarsToClient( int clientNum, const idDict &cvars );
- void SendApplySnapshotToClient( int clientNum, int sequence );
- bool SendEmptyToClient( int clientNum, bool force = false );
- bool SendPingToClient( int clientNum );
- void SendGameInitToClient( int clientNum );
- bool SendSnapshotToClient( int clientNum );
- void ProcessUnreliableClientMessage( int clientNum, const idBitMsg &msg );
- void ProcessReliableClientMessages( int clientNum );
- void ProcessChallengeMessage( const netadr_t from, const idBitMsg &msg );
- void ProcessConnectMessage( const netadr_t from, const idBitMsg &msg );
- void ProcessRemoteConsoleMessage( const netadr_t from, const idBitMsg &msg );
- void ProcessGetInfoMessage( const netadr_t from, const idBitMsg &msg );
- bool ConnectionlessMessage( const netadr_t from, const idBitMsg &msg );
- bool ProcessMessage( const netadr_t from, idBitMsg &msg );
- void ProcessAuthMessage( const idBitMsg &msg );
- bool SendPureServerMessage( const netadr_t to, int OS );
- void ProcessPureMessage( const netadr_t from, const idBitMsg &msg );
- int ValidateChallenge( const netadr_t from, int challenge, int clientId );
- bool SendReliablePureToClient( int clientNum );
- void ProcessReliablePure( int clientNum, const idBitMsg &msg );
- bool VerifyChecksumMessage( int clientNum, const netadr_t *from, const idBitMsg &msg, idStr &reply, int OS );
- void SendReliableMessage( int clientNum, const idBitMsg &msg );
- int UpdateTime( int clamp );
- void SendEnterGameToClient( int clientNum );
- void ProcessDownloadRequestMessage( const netadr_t from, const idBitMsg &msg );
- };
- #endif
|