123
This commit is contained in:
245
CryGame/XNetwork.h
Normal file
245
CryGame/XNetwork.h
Normal file
@@ -0,0 +1,245 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Game Source Code
|
||||
//
|
||||
// File: XNetwork.h
|
||||
// Description: Network stuffs.
|
||||
//
|
||||
// History:
|
||||
// - August 6, 2001: Created by Alberto Demichelis
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef GAME_XNETWORK_H
|
||||
#define GAME_XNETWORK_H
|
||||
#if _MSC_VER > 1000
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#include "IPAddress.h" // CIPAddress
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Server to client messages
|
||||
|
||||
typedef unsigned char XSERVERMSG;
|
||||
|
||||
#define XSERVERMSG_UPDATEENTITY ((XSERVERMSG)(0))
|
||||
#define XSERVERMSG_ADDENTITY ((XSERVERMSG)(1))
|
||||
#define XSERVERMSG_REMOVEENTITY ((XSERVERMSG)(2))
|
||||
#define XSERVERMSG_TIMESTAMP ((XSERVERMSG)(3))
|
||||
#define XSERVERMSG_TEXT ((XSERVERMSG)(4))
|
||||
#define XSERVERMSG_SETPLAYERSCORE ((XSERVERMSG)(5))
|
||||
#define XSERVERMSG_SETENTITYSTATE ((XSERVERMSG)(6))
|
||||
//#define XSERVERMSG_OBITUARY ((XSERVERMSG)(7))
|
||||
#define XSERVERMSG_SETTEAMSCORE ((XSERVERMSG)(8))
|
||||
#define XSERVERMSG_SETTEAMFLAGS ((XSERVERMSG)(9))
|
||||
#define XSERVERMSG_SETPLAYER ((XSERVERMSG)(10))
|
||||
#define XSERVERMSG_CLIENTSTRING ((XSERVERMSG)(11))
|
||||
#define XSERVERMSG_CMD ((XSERVERMSG)(12))
|
||||
#define XSERVERMSG_SETTEAM ((XSERVERMSG)(13))
|
||||
#define XSERVERMSG_ADDTEAM ((XSERVERMSG)(14))
|
||||
#define XSERVERMSG_REMOVETEAM ((XSERVERMSG)(15))
|
||||
#define XSERVERMSG_SETENTITYNAME ((XSERVERMSG)(16))
|
||||
#define XSERVERMSG_BINDENTITY ((XSERVERMSG)(17))
|
||||
#define XSERVERMSG_SCOREBOARD ((XSERVERMSG)(18))
|
||||
#define XSERVERMSG_SETGAMESTATE ((XSERVERMSG)(19))
|
||||
#define XSERVERMSG_TEAMS ((XSERVERMSG)(20))
|
||||
#define XSERVERMSG_SYNCVAR ((XSERVERMSG)(21))
|
||||
#define XSERVERMSG_EVENTSCHEDULE ((XSERVERMSG)(22))
|
||||
#define XSERVERMSG_UNIDENTIFIED ((XSERVERMSG)(23)) // 23 is not used as message
|
||||
#define XSERVERMSG_REQUESTSCRIPTHASH ((XSERVERMSG)(24))
|
||||
#define XSERVERMSG_AISTATE ((XSERVERMSG)(25))
|
||||
|
||||
#define XSERVERMSG_RESERVED_DONOT_USE1 ((XSERVERMSG)(250))
|
||||
#define XSERVERMSG_RESERVED_DONOT_USE2 ((XSERVERMSG)(251))
|
||||
#define XSERVERMSG_RESERVED_DONOT_USE3 ((XSERVERMSG)(252))
|
||||
#define XSERVERMSG_RESERVED_DONOT_USE4 ((XSERVERMSG)(253))
|
||||
#define XSERVERMSG_RESERVED_DONOT_USE5 ((XSERVERMSG)(254))
|
||||
#define XSERVERMSG_RESERVED_DONOT_USE6 ((XSERVERMSG)(255))
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Client to server messages
|
||||
|
||||
typedef unsigned char XCLIENTMSG;
|
||||
|
||||
#define XCLIENTMSG_UNKNOWN ((XCLIENTMSG)(0))
|
||||
#define XCLIENTMSG_PLAYERPROCESSINGCMD ((XCLIENTMSG)(1))
|
||||
#define XCLIENTMSG_TEXT ((XCLIENTMSG)(2))
|
||||
#define XCLIENTMSG_JOINTEAMREQUEST ((XCLIENTMSG)(3))
|
||||
#define XCLIENTMSG_CALLVOTE ((XCLIENTMSG)(4))
|
||||
#define XCLIENTMSG_VOTE ((XCLIENTMSG)(5))
|
||||
#define XCLIENTMSG_KILL ((XCLIENTMSG)(6))
|
||||
#define XCLIENTMSG_NAME ((XCLIENTMSG)(7))
|
||||
#define XCLIENTMSG_CMD ((XCLIENTMSG)(8))
|
||||
#define XCLIENTMSG_RATE ((XCLIENTMSG)(9))
|
||||
#define XCLIENTMSG_ENTSOFFSYNC ((XCLIENTMSG)(10))
|
||||
#define XCLIENTMSG_RETURNSCRIPTHASH ((XCLIENTMSG)(11))
|
||||
#define XCLIENTMSG_AISTATE ((XCLIENTMSG)(12))
|
||||
#define XCLIENTMSG_UNIDENTIFIED XSERVERMSG_UNIDENTIFIED // 23 is not used as message
|
||||
|
||||
#define XCLIENTMSG_RESERVED_DONOT_USE1 ((XCLIENTMSG)(250))
|
||||
#define XCLIENTMSG_RESERVED_DONOT_USE2 ((XCLIENTMSG)(251))
|
||||
#define XCLIENTMSG_RESERVED_DONOT_USE3 ((XCLIENTMSG)(252))
|
||||
#define XCLIENTMSG_RESERVED_DONOT_USE4 ((XCLIENTMSG)(253))
|
||||
#define XCLIENTMSG_RESERVED_DONOT_USE5 ((XCLIENTMSG)(254))
|
||||
#define XCLIENTMSG_RESERVED_DONOT_USE6 ((XCLIENTMSG)(255))
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
//CLIENT COMMAND
|
||||
////////////////////////////////////////////////////
|
||||
#define SEND_ONE 1
|
||||
#define SEND_MANY 2
|
||||
#define SEND_TEAM 3
|
||||
|
||||
//<<>>list here the commands ids
|
||||
//#define CMD_DONT_SEND_ME 0x00
|
||||
#define CMD_SAY 0x01
|
||||
#define CMD_SAY_TEAM 0x02
|
||||
#define CMD_SAY_ONE 0x03
|
||||
|
||||
#define DEFAULT_TEXT_LIFETIME 7.5f
|
||||
|
||||
struct TextMessage
|
||||
{
|
||||
//! constructor
|
||||
TextMessage()
|
||||
{
|
||||
fLifeTime=DEFAULT_TEXT_LIFETIME;
|
||||
}
|
||||
|
||||
BYTE cMessageType; //!<
|
||||
unsigned short uiSender; //!<
|
||||
unsigned short uiTarget; //!<
|
||||
float fLifeTime; //!<
|
||||
// CStream stmPayload;
|
||||
string m_sText; //!<
|
||||
|
||||
//!
|
||||
bool Write(CStream &stm)
|
||||
{
|
||||
stm.Write(cMessageType);
|
||||
stm.Write(uiSender);
|
||||
stm.Write(uiTarget);
|
||||
if(fLifeTime==DEFAULT_TEXT_LIFETIME)
|
||||
{
|
||||
stm.Write(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
stm.Write(true);
|
||||
unsigned char temp;
|
||||
temp = (unsigned char) (fLifeTime * 10.0f);
|
||||
stm.Write(temp);
|
||||
}
|
||||
return stm.Write(m_sText);
|
||||
// stm.Write((unsigned short)stmPayload.GetSize());
|
||||
// return stm.Write(stmPayload);
|
||||
}
|
||||
|
||||
//!
|
||||
bool Read(CStream &stm)
|
||||
{
|
||||
// unsigned short usSize;
|
||||
bool b;
|
||||
|
||||
if(!stm.Read(cMessageType))
|
||||
return false;
|
||||
if(!stm.Read(uiSender))
|
||||
return false;
|
||||
if(!stm.Read(uiTarget))
|
||||
return false;
|
||||
if(!stm.Read(b))
|
||||
return false;
|
||||
|
||||
if(!b)
|
||||
{
|
||||
fLifeTime=DEFAULT_TEXT_LIFETIME;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned char temp;
|
||||
temp = (unsigned char) (fLifeTime * 10.0f);
|
||||
stm.Read(temp);
|
||||
fLifeTime = temp / 10.0f;
|
||||
}
|
||||
return stm.Read(m_sText);
|
||||
// stm.Read(usSize);
|
||||
// stmPayload.SetSize(usSize);
|
||||
// return stm.ReadBits(stmPayload.GetPtr(), usSize);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Utility classes
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// Infos about the server
|
||||
struct SXServerInfos
|
||||
{
|
||||
enum Flags
|
||||
{
|
||||
FLAG_PASSWORD = 1 << 0,
|
||||
FLAG_CHEATS = 1 << 1,
|
||||
FLAG_NET = 1 << 2,
|
||||
FLAG_PUNKBUSTER = 1 << 3,
|
||||
};
|
||||
|
||||
string strName; //!< e.g. "Jack's Server"
|
||||
string strMap; //!< e.g. "MP_Airstrip"
|
||||
string strGameType; //!< e.g. "ASSAULT", "FFA", "TDM"
|
||||
string strMod; //!< e.g. "FarCry", "Counterstrike" current TCM(Total Conversion Mod), specified with -MOD ...
|
||||
BYTE nPlayers; //!< current player count
|
||||
BYTE nMaxPlayers; //!< max player count
|
||||
WORD nPort; //!<
|
||||
WORD nPing; //!<
|
||||
// DWORD dwGameVersion; //!< still used?
|
||||
CIPAddress IP; //!<
|
||||
BYTE nComputerType; //!< reserved, currently not used (CPU: AMD64,Intel OS:Linux,Win)
|
||||
int nServerFlags; //!< Flags with special info about server.
|
||||
SFileVersion VersionInfo; //!<
|
||||
|
||||
//! constructor
|
||||
SXServerInfos();
|
||||
virtual ~SXServerInfos() {};
|
||||
|
||||
bool Read(const string &szServerInfoString);
|
||||
};
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// Game context (sent to the client when connecting to a server)
|
||||
struct SXGameContext
|
||||
{
|
||||
unsigned char ucServerInfoVersion; //!< SERVERINFO_FORMAT_VERSION (needed to prevent connects from old clients)
|
||||
string strMapFolder; //!<
|
||||
string strMod; //!< e.g. "FarCry", "Counterstrike" current TCM(Total Conversion Mod), specified with -MOD ...
|
||||
string strGameType; //!< e.g. "ASSAULT", "FFA", "TDM"
|
||||
string strMission; //!<
|
||||
DWORD dwNetworkVersion; //!< NETWORK_FORMAT_VERSION
|
||||
WORD wLevelDataCheckSum; //!<
|
||||
bool bForceNonDevMode; //!< client is forced not to use the Devmode
|
||||
bool bInternetServer; //!< true=requires UBI login, false=LAN
|
||||
BYTE nComputerType; //!< HI:CPUType, LO:OSType
|
||||
|
||||
//! constructor
|
||||
SXGameContext();
|
||||
|
||||
//!
|
||||
bool Write(class CStream &stm);
|
||||
//!
|
||||
bool Read(class CStream &stm);
|
||||
//!
|
||||
bool IsVersionOk() const;
|
||||
//! \return 0 if unknown, zero terminated string otherwise
|
||||
const char *GetCPUTarget() const;
|
||||
//! \return 0 if unknown, zero terminated string otherwise
|
||||
const char *GetOSTarget() const;
|
||||
};
|
||||
|
||||
#endif // GAME_XNETWORK_H
|
||||
Reference in New Issue
Block a user