From 0d7001200952206d1ac8b39b09cce178eeea0153 Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Thu, 25 Jan 2024 09:22:20 +0100 Subject: [PATCH] add map info code --- src/ServerNetwork.cpp | 22 ++++++++++++++++++++++ src/ServerNetwork.h | 1 + 2 files changed, 23 insertions(+) diff --git a/src/ServerNetwork.cpp b/src/ServerNetwork.cpp index f8af5fb..0ffb148 100644 --- a/src/ServerNetwork.cpp +++ b/src/ServerNetwork.cpp @@ -5,6 +5,7 @@ #include "Launcher.h" #include "ProtocolVersion.h" #include "ServerInfo.h" +#include "Transport.h" #include "Util.h" #include #include @@ -73,6 +74,7 @@ void ServerNetwork::handle_packet(const bmp::Packet& packet) { handle_mod_download(packet); break; case bmp::State::SessionSetup: + handle_session_setup(packet); break; case bmp::State::Playing: break; @@ -99,6 +101,13 @@ void ServerNetwork::handle_mod_download(const bmp::Packet& packet) { tcp_write(ok); break; } + case bmp::Purpose::MapInfo: { + auto data = packet.get_readable_data(); + std::string map(data.begin(), data.end()); + // TODO: Send to game + spdlog::debug("Map: '{}'", map); + break; + } case bmp::Purpose::StateChangeSessionSetup: { spdlog::info("Starting session setup"); m_state = bmp::State::SessionSetup; @@ -253,3 +262,16 @@ void ServerNetwork::udp_write(bmp::Packet& packet) { std::copy(packet.raw_data.begin(), packet.raw_data.end(), data.begin() + static_cast(offset)); m_udp_socket.send_to(buffer(data), m_udp_ep, {}); } +void ServerNetwork::handle_session_setup(const bmp::Packet& packet) { + switch (packet.purpose) { + case bmp::Purpose::PlayersVehiclesInfo: { + spdlog::debug("Players and vehicles info: {} bytes ({} bytes on arrival)", packet.get_readable_data().size(), packet.raw_data.size()); + // TODO: Send to game + break; + } + default: + spdlog::error("Got 0x{:x} in state {}. This is not allowed. Disconnecting", uint16_t(packet.purpose), int(m_state)); + // todo: disconnect gracefully + break; + } +} diff --git a/src/ServerNetwork.h b/src/ServerNetwork.h index 2b62397..caab132 100644 --- a/src/ServerNetwork.h +++ b/src/ServerNetwork.h @@ -33,6 +33,7 @@ private: void handle_identification(const bmp::Packet& packet); void handle_authentication(const bmp::Packet& packet); void handle_mod_download(const bmp::Packet& packet); + void handle_session_setup(const bmp::Packet& packet); io_context m_io {}; ip::tcp::socket m_tcp_socket { m_io };