mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-08 17:48:46 -10:00
139 lines
3.8 KiB
C
139 lines
3.8 KiB
C
/*
|
|
* Copyright (C) Volition, Inc. 2005. All rights reserved.
|
|
*
|
|
* All source code herein is the property of Volition, Inc. You may not sell
|
|
* or otherwise commercially exploit the source or things you created based on the
|
|
* source.
|
|
*
|
|
*/
|
|
|
|
#ifndef _gtrack_header
|
|
#define _gtrack_header
|
|
|
|
#ifdef _WIN32
|
|
#include <in6addr.h>
|
|
#else
|
|
#include <netinet/in.h>
|
|
#endif
|
|
|
|
//Game Tracker client code header
|
|
|
|
#define GAMEPORT 9202
|
|
|
|
#define MAX_NET_RETRIES 30
|
|
#define NET_ACK_TIMEOUT 2500
|
|
#define NET_GAME_TIMEOUT 300 //time in seconds
|
|
|
|
#define MAX_GAME_DATA_SIZE 500
|
|
|
|
#define MAX_GENERIC_GAME_NAME_LEN 32
|
|
|
|
#define MAX_GAME_LISTS_PER_PACKET 10
|
|
|
|
#define CHANNEL_LEN 33
|
|
|
|
#define MAX_FREESPACE_PLAYERS 16
|
|
#define MAX_FREESPACE_PLAYER_NAME_LEN 32
|
|
#define MAX_FREESPACE_MISSION_NAME_LEN 32
|
|
#define MAX_FREESPACE_PLAYERS 16
|
|
|
|
#define GNT_SERVER_ACK 0
|
|
#define GNT_CLIENT_ACK 1
|
|
#define GNT_GAMESTARTED 2
|
|
#define GNT_GAMEOVER 3
|
|
#define GNT_GAMEUPDATE 4
|
|
#define GNT_GAMELIST_REQ 5
|
|
#define GNT_GAMELIST_DATA 6
|
|
#define GNT_GAME_COUNT_REQ 7
|
|
#define GNT_GAME_COUNT_DATA 8
|
|
#define GNT_GAMELIST_DATA_NEW 9
|
|
|
|
#define GT_FREESPACE 1
|
|
#define GT_DESCENT3 2
|
|
#define GT_TUBERACER 3
|
|
#define GT_FREESPACE2 4
|
|
#define GT_FS2OPEN 5
|
|
#define GT_UNUSED 0
|
|
|
|
#define GAME_HEADER_ONLY_SIZE (sizeof(game_packet_header)-MAX_GAME_DATA_SIZE)
|
|
|
|
#pragma pack(push, 1)
|
|
typedef struct {
|
|
unsigned int len; //Length of entire packet;
|
|
unsigned char game_type; //1==freespace (GT_FREESPACE), 2==D3, 3==tuberacer, etc.
|
|
short game_id; // only used for fs2open, otherwise is part of 16-byte junk space
|
|
char junk[14]; // not used but need constant size for compatibility (SOCKADDR_IN addr); (originally 16-bytes!!)
|
|
int type; //Used to specify what to do ie. Add a new net game (GNT_GAMESTARTED), remove a net game (game over), etc.
|
|
unsigned int sig; //Unique identifier for client ACKs (The server always fills this in, the client responds)
|
|
|
|
char data[MAX_GAME_DATA_SIZE];
|
|
} game_packet_header;
|
|
#pragma pack(pop)
|
|
|
|
typedef struct {
|
|
char game_name[MAX_GENERIC_GAME_NAME_LEN];
|
|
int difficulty;
|
|
int type; //game type;
|
|
int state;
|
|
int max_players;
|
|
int current_num_players;
|
|
char mission_name[MAX_FREESPACE_MISSION_NAME_LEN];
|
|
char channel[CHANNEL_LEN];
|
|
char pad[3]; // 3-byte padding for size/alignment
|
|
} freespace2_net_game_data;
|
|
|
|
#define pxo_net_game_data freespace2_net_game_data
|
|
|
|
typedef struct {
|
|
unsigned char game_type;
|
|
char game_name[MAX_GAME_LISTS_PER_PACKET][MAX_GENERIC_GAME_NAME_LEN];
|
|
char pad[3]; // ..needs 3-byte padding here for alignment..
|
|
unsigned int game_server[MAX_GAME_LISTS_PER_PACKET];
|
|
unsigned short port[MAX_GAME_LISTS_PER_PACKET];
|
|
} game_list_ip4;
|
|
|
|
typedef struct {
|
|
unsigned char game_type;
|
|
char game_name[MAX_GAME_LISTS_PER_PACKET][MAX_GENERIC_GAME_NAME_LEN];
|
|
char pad[3]; // ..needs 3-byte padding here for alignment..
|
|
in6_addr game_server[MAX_GAME_LISTS_PER_PACKET];
|
|
unsigned short port[MAX_GAME_LISTS_PER_PACKET];
|
|
} game_list_ip6;
|
|
|
|
#define game_list game_list_ip6
|
|
|
|
typedef struct {
|
|
int rank; // Try to find opponents with a rank similar to this
|
|
char channel[CHANNEL_LEN]; // only give us games in this channel
|
|
char pad[3]; // 3-bytes padding for size/alignment
|
|
} filter_game_list_struct;
|
|
|
|
|
|
//Function prototypes
|
|
|
|
int InitGameTrackerClient(int gametype);
|
|
void IdleGameTracker();
|
|
void UpdateGameData(void *buffer);
|
|
game_list * GetGameList();
|
|
void RequestGameList();
|
|
void RequestGameListWithFilter(void *filter);
|
|
void RequestGameCountWithFilter(void *filter);
|
|
|
|
// void SendGameOver();
|
|
//Start New 7-9-98
|
|
int SendGameOver();
|
|
//End New 7-9-98
|
|
|
|
void StartTrackerGame(void *buffer);
|
|
|
|
void AckPacket(int sig);
|
|
|
|
//Definitions
|
|
#define MAX_GAME_BUFFERS 20 //Thats a lot considering 20 games per game_list struct
|
|
|
|
#define TRACKER_UPDATE_INTERVAL 240 //300 seconds
|
|
#define TRACKER_RESEND_TIME 2000 //2000ms
|
|
|
|
|
|
#endif
|