2026-01-08 00:26:30 +00:00

117 lines
4.3 KiB
C++

#include "session.hpp"
void SessionManager::on_new_session(const trackAtributes &track) {
track_info = track;
}
void SessionManager::on_player_connected(const carAtributes &car) {
if (car.carID < MAX_PLAYERS) {
players[car.carID] = car;
players[car.carID].isConnected = 1;
players[car.carID].isLoading = 1;
connected_players++;
}
}
void SessionManager::on_player_finished_loading(u_int8_t car_id) {
if (car_id < MAX_PLAYERS) {
players[car_id].isLoading = 0;
}
}
void SessionManager::on_player_disconnected(u_int8_t car_id) {
if (car_id < MAX_PLAYERS) {
memset(&players[car_id], 0, sizeof(carAtributes));
connected_players--;
}
}
void SessionManager::on_car_update(const carAtributes &car) {
if (car.carID < MAX_PLAYERS) {
players[car.carID] = car;
}
}
void SessionManager::on_lap_completed(u_int8_t car_id, u_int32_t lap_time, u_int32_t cuts) {
if (car_id < MAX_PLAYERS) {
players[car_id].lap_time = lap_time;
players[car_id].cuts += cuts;
}
}
void SessionManager::on_collision(u_int8_t car1, u_int8_t car2) {
if (car1 < MAX_PLAYERS) {
players[car1].contacts++;
}
if (car2 < MAX_PLAYERS) {
players[car2].contacts++;
}
}
api_packet SessionManager::build_packet(u_int8_t message_type) {
api_packet pkt;
memset(&pkt, 0, sizeof(pkt));
pkt.message_type = message_type;
pkt.tracker_id = server_id;
pkt.connected_players = connected_players;
for (u_int8_t i = 0; i < MAX_PLAYERS; i++) {
pkt.cars[i].carID = players[i].carID;
pkt.cars[i].position = players[i].position;
pkt.cars[i].velocity = players[i].velocity;
pkt.cars[i].carGear = players[i].carGear;
pkt.cars[i].carRPM = players[i].carRPM;
pkt.cars[i].lap_time = players[i].lap_time;
pkt.cars[i].cuts = players[i].cuts;
pkt.cars[i].total_cuts = players[i].total_cuts;
pkt.cars[i].total_cuts_alltime = players[i].total_cuts_alltime; // TAG: Kinda useless
pkt.cars[i].total_laps_completed = players[i].total_laps_completed;
pkt.cars[i].contacts = players[i].contacts;
pkt.cars[i].total_contacts = players[i].total_contacts;
pkt.cars[i].current_flag = players[i].current_flag;
pkt.cars[i].normalizedSplinePos = players[i].normalizedSplinePos;
pkt.cars[i].isConnected = players[i].isConnected;
pkt.cars[i].isLoading = players[i].isLoading;
strncpy(pkt.cars[i].car_model, players[i].car_model, sizeof(pkt.cars[i].car_model));
strncpy(pkt.cars[i].car_skin, players[i].car_skin, sizeof(pkt.cars[i].car_skin));
strncpy(pkt.cars[i].driver_name, players[i].driver_name, sizeof(pkt.cars[i].driver_name));
strncpy(pkt.cars[i].driver_team, players[i].driver_team, sizeof(pkt.cars[i].driver_team));
strncpy(pkt.cars[i].driver_GUID, players[i].driver_GUID, sizeof(pkt.cars[i].driver_GUID));
}
// TAG: Also kinda useless to send track protocol
pkt.track_info.protocol_version = track_info.protocol_version;
pkt.track_info.session_index = track_info.session_index;
pkt.track_info.current_session_index = track_info.current_session_index;
pkt.track_info.session_count = track_info.session_count;
pkt.track_info.session_type = track_info.session_type;
strncpy(pkt.track_info.server_name, track_info.server_name, sizeof(pkt.track_info.server_name));
strncpy(pkt.track_info.track, track_info.track, sizeof(pkt.track_info.track));
strncpy(pkt.track_info.track_config, track_info.track_config, sizeof(pkt.track_info.track_config));
strncpy(pkt.track_info.session_name, track_info.session_name, sizeof(pkt.track_info.session_name));
pkt.track_info.typ = track_info.typ;
pkt.track_info.time = track_info.time;
pkt.track_info.laps = track_info.laps;
pkt.track_info.wait_time = track_info.wait_time;
pkt.track_info.ambient_temp = track_info.ambient_temp;
pkt.track_info.road_temp = track_info.road_temp;
strncpy(pkt.track_info.weather_graphics, track_info.weather_graphics, sizeof(pkt.track_info.weather_graphics));
pkt.track_info.elapsed_ms = track_info.elapsed_ms;
return pkt;
}
SessionManager::SessionManager(u_int8_t sid) : server_id(sid), connected_players(0) {
memset(&track_info, 0, sizeof(trackAtributes));
memset(players, 0, sizeof(players));
}