generated from AfonsoCMSousa/CPP-Template
159 lines
3.5 KiB
C++
159 lines
3.5 KiB
C++
#ifndef SERVER_STRUCTS_H
|
|
#define SERVER_STRUCTS_H
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <string>
|
|
#include <sys/cdefs.h>
|
|
#include <sys/types.h>
|
|
|
|
using namespace std;
|
|
|
|
typedef struct app_info {
|
|
// From args
|
|
u_int16_t app_id;
|
|
u_int16_t app_port_in;
|
|
u_int16_t app_port_out;
|
|
|
|
// From .env
|
|
const char *app_api_socket_path;
|
|
u_int16_t max_players;
|
|
const char *app_server_out_ip;
|
|
} __attribute__((packed)) app_info;
|
|
|
|
typedef struct postion {
|
|
float x;
|
|
float y;
|
|
float z;
|
|
} __attribute__((packed)) postion;
|
|
|
|
typedef enum flag {
|
|
NO_FLAG = 0,
|
|
YELLOW_FLAG = 1,
|
|
BLUE_FLAG = 2,
|
|
BLACK_FLAG = 3,
|
|
CHECKERED_FLAG = 4,
|
|
} __attribute__((packed)) flag;
|
|
|
|
typedef struct carAtributes {
|
|
// Related to ACSP_CAR_INFO
|
|
u_char isConnected; // 1 = connected, 0 = disconnected
|
|
u_char isLoading; // 1 = loading, 0 = not isLoading
|
|
|
|
string car_model[64];
|
|
string car_skin[64];
|
|
string driver_name[64];
|
|
string driver_team[64];
|
|
string driver_GUID[64];
|
|
|
|
// Related to ACSP_CAR_UPDATE
|
|
u_int8_t carID;
|
|
postion position;
|
|
postion velocity;
|
|
u_int8_t carGear;
|
|
u_int16_t carRPM;
|
|
u_int32_t lap_time;
|
|
u_int32_t cuts;
|
|
u_int32_t total_cuts;
|
|
u_int32_t total_cuts_alltime;
|
|
u_int16_t total_laps_completed;
|
|
u_int16_t contacts;
|
|
u_int16_t total_contacts;
|
|
|
|
flag current_flag; // TODO: implement flag status updates
|
|
// TAG:3
|
|
|
|
float normalizedSplinePos;
|
|
} __attribute__((packed)) carAtributes;
|
|
|
|
|
|
typedef enum SessionType {
|
|
PRACTICE = 0,
|
|
RACE = 1,
|
|
QUALIFYING = 2,
|
|
} __attribute__((packed)) SessionType;
|
|
|
|
typedef struct trackAtributes{
|
|
u_int8_t protocol_version;
|
|
|
|
u_int8_t session_index;
|
|
u_int8_t current_session_index;
|
|
u_int8_t session_count;
|
|
SessionType session_type;
|
|
|
|
string server_name;
|
|
string track[64];
|
|
string track_config[64];
|
|
string session_name[64];
|
|
|
|
u_int8_t typ;
|
|
u_int16_t time;
|
|
u_int16_t laps;
|
|
u_int16_t wait_time;
|
|
u_int8_t ambient_temp;
|
|
u_int8_t road_temp;
|
|
|
|
string weather_graphics[64];
|
|
u_int32_t elapsed_ms;
|
|
} __attribute__((packed)) trackAtributes;
|
|
|
|
typedef struct api_packet {
|
|
u_char message_type; // ACSP_MessageType
|
|
u_int8_t tracker_id;
|
|
u_int8_t connected_players;
|
|
|
|
carAtributes cars[64];
|
|
trackAtributes track_info;
|
|
} __attribute__((packed)) api_packet;
|
|
|
|
enum ACSP_MessageType {
|
|
// ============================
|
|
// PROTOCOL VERSION
|
|
// ============================
|
|
PROTOCOL_VERSION = 4,
|
|
|
|
// ============================
|
|
// SERVER → CLIENT MESSAGES
|
|
// ============================
|
|
ACSP_NEW_SESSION = 50,
|
|
ACSP_NEW_CONNECTION = 51,
|
|
ACSP_CONNECTION_CLOSED = 52,
|
|
ACSP_CAR_UPDATE = 53,
|
|
ACSP_CAR_INFO = 54, // Response to ACSP_GET_CAR_INFO
|
|
ACSP_END_SESSION = 55,
|
|
ACSP_VERSION = 56,
|
|
ACSP_CHAT = 57,
|
|
ACSP_CLIENT_LOADED = 58,
|
|
ACSP_SESSION_INFO = 59,
|
|
ACSP_ERROR = 60,
|
|
ACSP_LAP_COMPLETED = 73,
|
|
|
|
// ============================
|
|
// EVENTS
|
|
// ============================
|
|
ACSP_CLIENT_EVENT = 130,
|
|
|
|
// ============================
|
|
// EVENT TYPES
|
|
// ============================
|
|
ACSP_CE_COLLISION_WITH_CAR = 10,
|
|
ACSP_CE_COLLISION_WITH_ENV = 11,
|
|
|
|
// ============================
|
|
// CLIENT → SERVER COMMANDS
|
|
// ============================
|
|
ACSP_REALTIMEPOS_INTERVAL = 200,
|
|
ACSP_GET_CAR_INFO = 201,
|
|
ACSP_SEND_CHAT = 202, // Sends chat to one car
|
|
ACSP_BROADCAST_CHAT = 203, // Sends chat to everybody
|
|
ACSP_GET_SESSION_INFO = 204,
|
|
ACSP_SET_SESSION_INFO = 205,
|
|
ACSP_KICK_USER = 206,
|
|
ACSP_NEXT_SESSION = 207,
|
|
ACSP_RESTART_SESSION = 208,
|
|
ACSP_ADMIN_COMMAND = 209 // Send message plus a string
|
|
};
|
|
|
|
#endif // SERVER_STRUCTS_H
|