Files
FC1/CryGame/XNetwork.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

246 lines
7.5 KiB
C

//////////////////////////////////////////////////////////////////////
//
// 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