#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)); }