From 8bef4abdbc7030c39d6c74aed6bc05b07189d5a1 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:23:01 +1000 Subject: [PATCH] Connection changes --- source/client/StarClientApplication.cpp | 2 +- source/game/StarNetPackets.cpp | 5 +++-- source/game/StarNetPackets.hpp | 2 +- source/game/StarUniverseClient.cpp | 7 ++++--- source/game/StarUniverseServer.cpp | 19 ++++++++++++++----- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/source/client/StarClientApplication.cpp b/source/client/StarClientApplication.cpp index a8ab969..5f3d119 100644 --- a/source/client/StarClientApplication.cpp +++ b/source/client/StarClientApplication.cpp @@ -360,7 +360,7 @@ void ClientApplication::update() { m_guiContext->cleanup(); m_edgeKeyEvents.clear(); - m_input->reset(); + m_input->update(); } void ClientApplication::render() { diff --git a/source/game/StarNetPackets.cpp b/source/game/StarNetPackets.cpp index d0aacac..b8605ed 100644 --- a/source/game/StarNetPackets.cpp +++ b/source/game/StarNetPackets.cpp @@ -404,10 +404,10 @@ ClientConnectPacket::ClientConnectPacket() {} ClientConnectPacket::ClientConnectPacket(ByteArray assetsDigest, bool allowAssetsMismatch, Uuid playerUuid, String playerName, String playerSpecies, WorldChunks shipChunks, ShipUpgrades shipUpgrades, - bool introComplete, String account) + bool introComplete, String account, Json info) : assetsDigest(std::move(assetsDigest)), allowAssetsMismatch(allowAssetsMismatch), playerUuid(std::move(playerUuid)), playerName(std::move(playerName)), playerSpecies(std::move(playerSpecies)), shipChunks(std::move(shipChunks)), - shipUpgrades(std::move(shipUpgrades)), introComplete(std::move(introComplete)), account(std::move(account)) {} + shipUpgrades(std::move(shipUpgrades)), introComplete(std::move(introComplete)), account(std::move(account)), info(std::move(info)) {} void ClientConnectPacket::readLegacy(DataStream& ds) { ds.read(assetsDigest); @@ -419,6 +419,7 @@ void ClientConnectPacket::readLegacy(DataStream& ds) { ds.read(shipUpgrades); ds.read(introComplete); ds.read(account); + info = Json(); } void ClientConnectPacket::read(DataStream& ds) { diff --git a/source/game/StarNetPackets.hpp b/source/game/StarNetPackets.hpp index 26fba1a..6181b30 100644 --- a/source/game/StarNetPackets.hpp +++ b/source/game/StarNetPackets.hpp @@ -310,7 +310,7 @@ struct ClientConnectPacket : PacketBase { ClientConnectPacket(); ClientConnectPacket(ByteArray assetsDigest, bool allowAssetsMismatch, Uuid playerUuid, String playerName, String playerSpecies, WorldChunks shipChunks, ShipUpgrades shipUpgrades, bool introComplete, - String account); + String account, Json info = {}); void readLegacy(DataStream& ds) override; void read(DataStream& ds) override; diff --git a/source/game/StarUniverseClient.cpp b/source/game/StarUniverseClient.cpp index a5bd9df..286df89 100644 --- a/source/game/StarUniverseClient.cpp +++ b/source/game/StarUniverseClient.cpp @@ -111,10 +111,11 @@ Maybe UniverseClient::connect(UniverseConnection connection, bool allowA } } connection.packetSocket().setLegacy(m_legacyServer); - - connection.pushSingle(make_shared(Root::singleton().assets()->digest(), allowAssetsMismatch, m_mainPlayer->uuid(), m_mainPlayer->name(), + auto clientConnect = make_shared(Root::singleton().assets()->digest(), allowAssetsMismatch, m_mainPlayer->uuid(), m_mainPlayer->name(), m_mainPlayer->species(), m_playerStorage->loadShipData(m_mainPlayer->uuid()), m_mainPlayer->shipUpgrades(), - m_mainPlayer->log()->introComplete(), account)); + m_mainPlayer->log()->introComplete(), account); + clientConnect->info = JsonObject{ {"brand", "OpenStarbound"} }; + connection.pushSingle(std::move(clientConnect)); connection.sendAll(timeout); connection.receiveAny(timeout); diff --git a/source/game/StarUniverseServer.cpp b/source/game/StarUniverseServer.cpp index 56ae634..690f1c6 100644 --- a/source/game/StarUniverseServer.cpp +++ b/source/game/StarUniverseServer.cpp @@ -1584,7 +1584,7 @@ void UniverseServer::acceptConnection(UniverseConnection connection, MaybesetCompressionStreamEnabled(useCompressionStream); String remoteAddressString = remoteAddress ? toString(*remoteAddress) : "local"; - Logger::info("UniverseServer: Awaiting connection info from {}, {} client", remoteAddressString, legacyClient ? "Starbound" : "OpenStarbound"); + Logger::info("UniverseServer: Awaiting connection info from {} ({} client)", remoteAddressString, legacyClient ? "vanilla" : "custom"); connection.receiveAny(clientWaitLimit); auto clientConnect = as(connection.pullSingle()); @@ -1597,7 +1597,6 @@ void UniverseServer::acceptConnection(UniverseConnection connection, Maybeaccount.empty() ? strf("'{}'", clientConnect->account) : ""; auto connectionFail = [&](String message) { @@ -1669,14 +1668,24 @@ void UniverseServer::acceptConnection(UniverseConnection connection, MaybeplayerName, remoteAddressString); + String connectionLog = strf("UniverseServer: Logged in account '{}' as player '{}' from address {}", + accountString, clientConnect->playerName, remoteAddressString); + + if (Json& info = clientConnect->info) { + if (Json brand = info.get("brand", "custom")) + connectionLog += strf(" ({} client)", brand.toString()); + if (info.getBool("legacy", false)) + connection.packetSocket().setLegacy(legacyClient = true); + } + Logger::log(LogLevel::Info, connectionLog.utf8Ptr()); + + mainLocker.lock(); WriteLocker clientsLocker(m_clientsLock); if (auto clashId = getClientForUuid(clientConnect->playerUuid)) { if (administrator) { - doDisconnection(*clashId, "Duplicate Uuid joined and is Administrator so has priority."); + doDisconnection(*clashId, "Duplicate UUID joined and is Administrator so has priority."); } else { connectionFail("Duplicate player UUID"); return;