#ifndef SERVER_STRUCTS_H #define SERVER_STRUCTS_H #include #include #include #include #include #include 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