home *** CD-ROM | disk | FTP | other *** search
- #ifndef __PacketHandler_h__
- #define __PacketHandler_h__
-
- #include "SDL_net.h"
- #define _WINSOCKAPI_ // to prevent duplicate defines
-
- //#include "Client.h"
- //#include "Console.h"
-
- //#include "Network.h"
-
- #define CLIENT_MAX_NAME_LENGTH 32
- #define NETWORK_MAX_CLIENTS 16
- #define CON_MAX_STRING_LENGTH 256
-
- #define PACKET_OPTION_FLAG_GAME_USE_ARENA_CYCLE 0x01
- #define PACKET_OPTION_FLAG_GAME_ENABLE_FRIENDLY_FIRE 0x02
-
- enum packetTypes_e{
- PACKET_TYPE_NONE = 0,
-
- PACKET_TYPE_PING,
-
- PACKET_TYPE_SERVERINFO_REQUEST,
- PACKET_TYPE_SERVERINFO,
-
- PACKET_TYPE_PLAYERINFO_REQUEST,
- PACKET_TYPE_PLAYERINFO,
-
- PACKET_TYPE_CONNECTION_REQUEST,
- PACKET_TYPE_CONNECTION_REQUEST_ACCEPTED,
- PACKET_TYPE_CONNECTION_REQUEST_DECLINED,
- PACKET_TYPE_DISCONNECT,
- PACKET_TYPE_CLIENT_CONNECTED,
- PACKET_TYPE_CLIENT_DISCONNECTED,
-
- PACKET_TYPE_CLIENTSTATE,
- PACKET_TYPE_GAMESTATE,
-
- PACKET_TYPE_CLIENT_SPAWN,
- PACKET_TYPE_CLIENT_HURT,
- PACKET_TYPE_CLIENT_KILL,
- PACKET_TYPE_SHOT_SPAWN,
-
- PACKET_TYPE_CHAT_MESSAGE,
- PACKET_TYPE_VOICE_MESSAGE,
-
- PACKET_TYPE_ARENA_CHANGE,
-
- NUM_PACKET_TYPES
- };
-
- typedef struct pingPacket_s{
- unsigned char protocolVersion;
- char clientId;
- }pingPacket_t;
-
- typedef struct serverinfoRequestPacket_s{
- unsigned char protocolVersion;
- }serverinfoRequestPacket_t;
-
- typedef struct serverinfoPacket_s{
- unsigned char protocolVersion;
- char name[CON_MAX_STRING_LENGTH];
- char description[CON_MAX_STRING_LENGTH];
- char arena[CON_MAX_STRING_LENGTH];
- unsigned char optionFlags;
- unsigned char gamemode;
- unsigned char maxClients;
- unsigned char numClients;
- unsigned short ghostTime;
- }serverinfoPacket_t;
-
- typedef struct playerinfoRequestPacket_s{
- unsigned char protocolVersion;
- }playerinfoRequestPacket_t;
-
- typedef struct clientinfoPacket_s{
- char name[CLIENT_MAX_NAME_LENGTH];
- short ping;
- short secondsOnServer;
-
- char team;
- char vehicle;
- char weapon1;
- char weapon2;
- char weapon3;
- char weapon4;
- short score;
- short kills;
- short deaths;
- }clientinfoPacket_t;
-
- typedef struct playerinfoPacket_s{
- char clientIds[NETWORK_MAX_CLIENTS]; // to see if slots are in use
-
- clientinfoPacket_t ci[NETWORK_MAX_CLIENTS];
- }playerinfoPacket_t;
-
- typedef struct disconnectPacket_s{
- // unsigned char protocolVersion;
- char clientId;
- char reason[CON_MAX_STRING_LENGTH];
- }disconnectPacket_t;
-
- typedef struct connectionRequestPacket_s{
- unsigned char protocolVersion;
- char name[CLIENT_MAX_NAME_LENGTH];
- }connectionRequestPacket_t;
-
- typedef struct connectionRequestAcceptedPacket_s{
- char clientId;
- char newName[CLIENT_MAX_NAME_LENGTH];
- serverinfoPacket_t si; // 772
- playerinfoPacket_t pi; // 7xy
- }connectionRequestAcceptedPacket_t;
-
- typedef struct connectionRequestDeclinedPacket_s{
- char reason[CON_MAX_STRING_LENGTH];
- }connectionRequestDeclinedPacket_t;
-
- typedef struct clientConnectedPacket_s{
- char clientId;
- // char name[CLIENT_MAX_NAME_LENGTH];
- clientinfoPacket_t ci;
- }clientConnectedPacket_t;
-
- typedef struct clientDisconnectedPacket_s{
- char clientId;
- char reason[CON_MAX_STRING_LENGTH];
- }clientDisconnectedPacket_t;
-
-
-
- typedef struct clientstatePacket_s{
- float pos[3];
- float dir[3];
- float up[3];
- float vel[3];
- unsigned char energy;
- unsigned char armor;
- }clientstatePacket_t;
-
- typedef struct gamestatePacket_s{
- char clientIds[NETWORK_MAX_CLIENTS];
- clientstatePacket_t cs[NETWORK_MAX_CLIENTS];
- }gamestatePacket_t;
-
-
-
- typedef struct clientSpawnPacket_s{
- char clientId;
- clientinfoPacket_t ci;
- clientstatePacket_t cs;
- }clientSpawnPacket_t;
-
- typedef struct clientHurtPacket_s{
- char hurtClientId;
- char hurterClientId;
- unsigned char amount;
- }clientHurtPacket_t;
-
- typedef struct clientKillPacket_s{
- char killedClientId;
- char killerClientId;
- char weapon;
- }clientKillPacket_t;
-
- typedef struct shotSpawnPacket_s{
- char clientId;
-
- unsigned char weaponId;
- unsigned char type;
- float pos[3];
- float dir[3];
- float up[3];
- float vel[3];
- }shotSpawnPacket_t;
-
- typedef struct chatMessagePacket_s{
- char clientId;
- unsigned char mode;
- char message[CON_MAX_STRING_LENGTH];
- }chatMessagePacket_t;
-
- typedef struct voiceMessagePacket_s{
- char clientId;
- unsigned char mode;
- char messageId;
- }voiceMessagePacket_t;
-
-
- typedef struct arenaChangePacket_s{
- char newArena[CON_MAX_STRING_LENGTH];
- // unsigned long durationMillis;
- }arenaChangePacket_t;
-
- class PacketHandler{
- public:
- static UDPpacket* wrapPacket(unsigned char packetType, IPaddress addr, void* data, int size);
- static bool unwrapPacket(UDPpacket* packet, void* data, int size);
- static bool unwrapAndFreePacket(UDPpacket* packet, void* data, int size);
- // static UDPpacket* allocPacket();
- static void freePacket(UDPpacket* packet);
- };
-
-
- #endif /* __PacketHandler_h__ */
-