mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
160 lines
5.6 KiB
C
160 lines
5.6 KiB
C
/*H*************************************************************************************/
|
|
/*!
|
|
\File netgamepkt.h
|
|
|
|
\Description
|
|
Defines netgame packet constants and types.
|
|
|
|
\Copyright
|
|
Copyright (c) Electronic Arts 1998-2007.
|
|
|
|
\Version 1.0 12/12/1998 (gschaefer) First Version
|
|
\Version 1.1 11/18/2002 (jbrookes) Moved to NetGame hierarchy
|
|
\Version 1.2 02/04/2007 (jbrookes) Cleanup, added NetGameMaxPacketT
|
|
*/
|
|
/*************************************************************************************H*/
|
|
|
|
#ifndef _netgamepkt_h
|
|
#define _netgamepkt_h
|
|
|
|
/*!
|
|
\Moduledef NetGamePkt NetGamePkt
|
|
\Modulemember Game
|
|
*/
|
|
//@{
|
|
|
|
/*** Include files *********************************************************************/
|
|
|
|
#include "DirtySDK/platform.h"
|
|
|
|
/*** Defines ***************************************************************************/
|
|
|
|
/* sampling period constants
|
|
dont enum these or you will regret it
|
|
(the compiler translates divides by these into logical shifts) */
|
|
#define RTT_SAMPLE_PERIOD 1024
|
|
#define LATE_SAMPLE_PERIOD 512
|
|
|
|
//! identifiers of client/server packets
|
|
enum
|
|
{
|
|
GAME_PACKET_ONE_BEFORE_FIRST =1,//!< enum with value 1 available for future use. If needed just lower ONE_BEFORE_FIRST to zero
|
|
GAME_PACKET_INPUT, //!< data exchanged by machines using dist, usually controller inputs
|
|
GAME_PACKET_INPUT_MULTI, //!< same as INPUT but from the game server.
|
|
GAME_PACKET_STATS, //!< stats sent by the game server.
|
|
GAME_PACKET_USER, //!< user packet
|
|
GAME_PACKET_USER_UNRELIABLE, //!< user packet, to be sent unreliably
|
|
GAME_PACKET_USER_BROADCAST, //!< user packet, to be sent unreliably to broadcast address
|
|
GAME_PACKET_INPUT_FLOW, //!< dist flow control, sent to indicate readiness
|
|
GAME_PACKET_INPUT_MULTI_FAT, //!< same as INPUT_MULTI but 16-bit individual packet sizes (to allow 256-1200 sizes).
|
|
GAME_PACKET_INPUT_META, //!< meta-information on the packet format
|
|
GAME_PACKET_LINK_STRM, //!< netgamelink stream packet
|
|
GAME_PACKET_ONE_PAST_LAST, //!< used to mark the valid range. Insert new kinds before
|
|
GAME_PACKET_SYNC = 64 //!< OR this value with packet kind to signal that packet conveys sync info
|
|
};
|
|
|
|
//! default max raw data packet size
|
|
#define NETGAME_DATAPKT_DEFSIZE (240)
|
|
|
|
//! max raw data packet size
|
|
#define NETGAME_DATAPKT_MAXSIZE (1200)
|
|
|
|
//! max size of packet tail (sync+kind)
|
|
#define NETGAME_DATAPKT_MAXTAIL (sizeof(NetGamePacketSyncT)+1)
|
|
|
|
//! max stream packet size
|
|
#define NETGAME_STRMPKT_DEFSIZE (200)
|
|
#define NETGAME_STRMPKT_MAXSIZE (NETGAME_DATAPKT_MAXSIZE - 12)
|
|
|
|
//! default max input/output buffers, in packets
|
|
#define NETGAME_DATABUF_MAXSIZE (32)
|
|
|
|
// sync packet flags
|
|
|
|
//!< indicates repl field is not yet valid (remote side has not received our first sync packet yet)
|
|
#define NETGAME_SYNCFLAG_REPLINVALID (0x01)
|
|
|
|
|
|
/*** Macros ****************************************************************************/
|
|
|
|
/*** Type Definitions ******************************************************************/
|
|
|
|
//! packet header (common for every packet)
|
|
typedef struct NetGamePacketHeadT
|
|
{
|
|
int32_t size; //!< total size (including header, 4-byte aligned)
|
|
uint32_t when; //!< reception time in ticks
|
|
uint16_t len; //!< length of packet body
|
|
uint8_t kind; //!< packet type (see enum above)
|
|
uint8_t pad; //!< unused (alignment)
|
|
} NetGamePacketHeadT;
|
|
|
|
//! format of a sync packet (piggybacks onto regular packets) -- FOR INTERNAL USE ONLY
|
|
typedef struct NetGamePacketSyncT
|
|
{
|
|
uint32_t repl;
|
|
uint32_t echo;
|
|
int16_t late;
|
|
uint8_t psnt; //!< number of packets sent since last update
|
|
uint8_t prcvd; //!< number of packets received since last update
|
|
uint8_t plost; //!< number of inbound packets lost since last update
|
|
uint8_t nsnt; //!< number of NAKs sent since last update
|
|
uint8_t flags; //!< sync packet flags (NETGAME_SYNCFLAG_*)
|
|
uint8_t size; //!< size of sync packet (MUST COME LAST)
|
|
} NetGamePacketSyncT;
|
|
|
|
//! format of packets which are exchanged by client/server
|
|
typedef struct NetGamePacketT
|
|
{
|
|
//! packet header (not sent)
|
|
NetGamePacketHeadT head;
|
|
|
|
//! game packet body
|
|
union {
|
|
//! stream data
|
|
struct {
|
|
int32_t ident; //!< stream ident
|
|
int32_t kind; //!< token
|
|
int32_t size; //!< packet size
|
|
uint8_t data[NETGAME_STRMPKT_DEFSIZE];//!< binary data
|
|
} strm;
|
|
//! raw data packet
|
|
uint8_t data[NETGAME_DATAPKT_DEFSIZE];
|
|
} body;
|
|
|
|
//! space for game packet tail
|
|
uint8_t tail[NETGAME_DATAPKT_MAXTAIL];
|
|
} NetGamePacketT;
|
|
|
|
//! format of a max-sized link packet (may be substituted for a NetGamePacketT)
|
|
typedef struct NetGameMaxPacketT
|
|
{
|
|
//! packet header (not sent)
|
|
NetGamePacketHeadT head;
|
|
|
|
//! game packet body
|
|
union {
|
|
//! stream data
|
|
struct {
|
|
int32_t ident; //!< stream ident
|
|
int32_t kind; //!< token
|
|
int32_t size; //!< packet size
|
|
uint8_t data[NETGAME_STRMPKT_MAXSIZE];//!< binary data
|
|
} strm;
|
|
//! raw data packet
|
|
uint8_t data[NETGAME_DATAPKT_MAXSIZE];
|
|
} body;
|
|
|
|
//! space for game packet tail
|
|
uint8_t tail[NETGAME_DATAPKT_MAXTAIL];
|
|
} NetGameMaxPacketT;
|
|
|
|
/*** Variables *************************************************************************/
|
|
|
|
/*** Functions *************************************************************************/
|
|
|
|
//@}
|
|
|
|
#endif // _netgamepkt_h
|
|
|