home *** CD-ROM | disk | FTP | other *** search
/ Enter 2005 March / ENTER.ISO / files / fwp-0.0.6-win32-installer.exe / PacketHandler.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-24  |  4.7 KB  |  209 lines

  1. #ifndef __PacketHandler_h__
  2. #define __PacketHandler_h__
  3.  
  4. #include "SDL_net.h"
  5. #define _WINSOCKAPI_    // to prevent duplicate defines
  6.  
  7. //#include "Client.h"
  8. //#include "Console.h"
  9.  
  10. //#include "Network.h"
  11.  
  12. #define CLIENT_MAX_NAME_LENGTH 32
  13. #define NETWORK_MAX_CLIENTS 16
  14. #define CON_MAX_STRING_LENGTH 256
  15.  
  16. #define PACKET_OPTION_FLAG_GAME_USE_ARENA_CYCLE                0x01
  17. #define PACKET_OPTION_FLAG_GAME_ENABLE_FRIENDLY_FIRE        0x02
  18.  
  19. enum packetTypes_e{
  20.     PACKET_TYPE_NONE = 0,
  21.  
  22.     PACKET_TYPE_PING,
  23.  
  24.     PACKET_TYPE_SERVERINFO_REQUEST,
  25.     PACKET_TYPE_SERVERINFO,
  26.  
  27.     PACKET_TYPE_PLAYERINFO_REQUEST,
  28.     PACKET_TYPE_PLAYERINFO,
  29.  
  30.     PACKET_TYPE_CONNECTION_REQUEST,
  31.     PACKET_TYPE_CONNECTION_REQUEST_ACCEPTED,
  32.     PACKET_TYPE_CONNECTION_REQUEST_DECLINED,
  33.     PACKET_TYPE_DISCONNECT,
  34.     PACKET_TYPE_CLIENT_CONNECTED,
  35.     PACKET_TYPE_CLIENT_DISCONNECTED,
  36.  
  37.     PACKET_TYPE_CLIENTSTATE,
  38.     PACKET_TYPE_GAMESTATE,
  39.  
  40.     PACKET_TYPE_CLIENT_SPAWN,
  41.     PACKET_TYPE_CLIENT_HURT,
  42.     PACKET_TYPE_CLIENT_KILL,
  43.     PACKET_TYPE_SHOT_SPAWN,
  44.  
  45.     PACKET_TYPE_CHAT_MESSAGE,
  46.     PACKET_TYPE_VOICE_MESSAGE,
  47.  
  48.     PACKET_TYPE_ARENA_CHANGE,
  49.  
  50.     NUM_PACKET_TYPES
  51. };
  52.  
  53. typedef struct pingPacket_s{
  54.     unsigned char protocolVersion;
  55.     char clientId;
  56. }pingPacket_t;
  57.  
  58. typedef struct serverinfoRequestPacket_s{
  59.     unsigned char protocolVersion;
  60. }serverinfoRequestPacket_t;
  61.  
  62. typedef struct serverinfoPacket_s{
  63.     unsigned char protocolVersion;
  64.     char name[CON_MAX_STRING_LENGTH];
  65.     char description[CON_MAX_STRING_LENGTH];
  66.     char arena[CON_MAX_STRING_LENGTH];
  67.     unsigned char optionFlags;
  68.     unsigned char gamemode;
  69.     unsigned char maxClients;
  70.     unsigned char numClients;
  71.     unsigned short ghostTime;
  72. }serverinfoPacket_t;
  73.  
  74. typedef struct playerinfoRequestPacket_s{
  75.     unsigned char protocolVersion;
  76. }playerinfoRequestPacket_t;
  77.  
  78. typedef struct clientinfoPacket_s{
  79.     char name[CLIENT_MAX_NAME_LENGTH];
  80.     short ping;
  81.     short secondsOnServer;
  82.  
  83.     char team;
  84.     char vehicle;
  85.     char weapon1;
  86.     char weapon2;
  87.     char weapon3;
  88.     char weapon4;
  89.     short score;
  90.     short kills;
  91.     short deaths;
  92. }clientinfoPacket_t;
  93.  
  94. typedef struct playerinfoPacket_s{
  95.     char clientIds[NETWORK_MAX_CLIENTS];    // to see if slots are in use
  96.  
  97.     clientinfoPacket_t ci[NETWORK_MAX_CLIENTS];
  98. }playerinfoPacket_t;
  99.  
  100. typedef struct disconnectPacket_s{
  101. //    unsigned char protocolVersion;
  102.     char clientId;
  103.     char reason[CON_MAX_STRING_LENGTH];
  104. }disconnectPacket_t;
  105.  
  106. typedef struct connectionRequestPacket_s{
  107.     unsigned char protocolVersion;
  108.     char name[CLIENT_MAX_NAME_LENGTH];
  109. }connectionRequestPacket_t;
  110.  
  111. typedef struct connectionRequestAcceptedPacket_s{
  112.     char clientId;
  113.     char newName[CLIENT_MAX_NAME_LENGTH];
  114.     serverinfoPacket_t si;        // 772
  115.     playerinfoPacket_t pi;        // 7xy
  116. }connectionRequestAcceptedPacket_t;
  117.  
  118. typedef struct connectionRequestDeclinedPacket_s{
  119.     char reason[CON_MAX_STRING_LENGTH];
  120. }connectionRequestDeclinedPacket_t;
  121.  
  122. typedef struct clientConnectedPacket_s{
  123.     char clientId;
  124. //    char name[CLIENT_MAX_NAME_LENGTH];
  125.     clientinfoPacket_t ci;
  126. }clientConnectedPacket_t;
  127.  
  128. typedef struct clientDisconnectedPacket_s{
  129.     char clientId;
  130.     char reason[CON_MAX_STRING_LENGTH];
  131. }clientDisconnectedPacket_t;
  132.  
  133.  
  134.  
  135. typedef struct clientstatePacket_s{
  136.     float pos[3];
  137.     float dir[3];
  138.     float up[3];
  139.     float vel[3];
  140.     unsigned char energy;
  141.     unsigned char armor;
  142. }clientstatePacket_t;
  143.  
  144. typedef struct gamestatePacket_s{
  145.     char clientIds[NETWORK_MAX_CLIENTS];
  146.     clientstatePacket_t cs[NETWORK_MAX_CLIENTS];
  147. }gamestatePacket_t;
  148.  
  149.  
  150.  
  151. typedef struct clientSpawnPacket_s{
  152.     char clientId;
  153.     clientinfoPacket_t ci;
  154.     clientstatePacket_t cs;
  155. }clientSpawnPacket_t;
  156.  
  157. typedef struct clientHurtPacket_s{
  158.     char hurtClientId;
  159.     char hurterClientId;
  160.     unsigned char amount;
  161. }clientHurtPacket_t;
  162.  
  163. typedef struct clientKillPacket_s{
  164.     char killedClientId;
  165.     char killerClientId;
  166.     char weapon;
  167. }clientKillPacket_t;
  168.  
  169. typedef struct shotSpawnPacket_s{
  170.     char clientId;
  171.  
  172.     unsigned char weaponId;
  173.     unsigned char type;
  174.     float pos[3];
  175.     float dir[3];
  176.     float up[3];
  177.     float vel[3];
  178. }shotSpawnPacket_t;
  179.  
  180. typedef struct chatMessagePacket_s{
  181.     char clientId;
  182.     unsigned char mode;
  183.     char message[CON_MAX_STRING_LENGTH];
  184. }chatMessagePacket_t;
  185.  
  186. typedef struct voiceMessagePacket_s{
  187.     char clientId;
  188.     unsigned char mode;
  189.     char messageId;
  190. }voiceMessagePacket_t;
  191.  
  192.  
  193. typedef struct arenaChangePacket_s{
  194.     char newArena[CON_MAX_STRING_LENGTH];
  195. //    unsigned long durationMillis;
  196. }arenaChangePacket_t;
  197.  
  198. class PacketHandler{
  199. public:
  200.     static UDPpacket* wrapPacket(unsigned char packetType, IPaddress addr, void* data, int size);
  201.     static bool unwrapPacket(UDPpacket* packet, void* data, int size);
  202.     static bool unwrapAndFreePacket(UDPpacket* packet, void* data, int size);
  203. //    static UDPpacket* allocPacket();
  204.     static void freePacket(UDPpacket* packet);
  205. };
  206.  
  207.  
  208. #endif    /* __PacketHandler_h__ */
  209.