diff options
Diffstat (limited to 'source/game/StarUniverseClient.cpp')
-rw-r--r-- | source/game/StarUniverseClient.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/source/game/StarUniverseClient.cpp b/source/game/StarUniverseClient.cpp index 023140c..6038901 100644 --- a/source/game/StarUniverseClient.cpp +++ b/source/game/StarUniverseClient.cpp @@ -94,20 +94,27 @@ Maybe<String> UniverseClient::connect(UniverseConnection connection, bool allowA else if (!protocolResponsePacket->allowed) return String(strf("Join failed! Server does not support connections with protocol version {}", StarProtocolVersion)); + NetCompatibilityRules compatibilityRules; + compatibilityRules.setVersion(LegacyVersion); bool legacyServer = protocolResponsePacket->compressionMode() != PacketCompressionMode::Enabled; if (!legacyServer) { - if (auto compressedSocket = as<CompressedPacketSocket>(&connection.packetSocket())) { - if (protocolResponsePacket->info) { - auto compressionName = protocolResponsePacket->info.getString("compression", "None"); + auto compressedSocket = as<CompressedPacketSocket>(&connection.packetSocket()); + if (protocolResponsePacket->info) { + compatibilityRules.setVersion(protocolResponsePacket->info.getUInt("openProtocolVersion", 1)); + auto compressionName = protocolResponsePacket->info.getString("compression", "None"); + if (compressedSocket) { auto compressionMode = NetCompressionModeNames.maybeLeft(compressionName); if (!compressionMode) return String(strf("Join failed! Unknown net stream connection type '{}'", compressionName)); Logger::info("UniverseClient: Using '{}' network stream compression", NetCompressionModeNames.getRight(*compressionMode)); compressedSocket->setCompressionStreamEnabled(compressionMode == NetCompressionMode::Zstd); - } else { + } + } else { + compatibilityRules.setVersion(1); // A version of 1 is OpenStarbound prior to the NetElement compatibility stuff + if (compressedSocket) { Logger::info("UniverseClient: Defaulting to Zstd network stream compression (older server version)"); - compressedSocket->setCompressionStreamEnabled(true);// old OpenSB server version always expects it! + compressedSocket->setCompressionStreamEnabled(true); } } } @@ -115,7 +122,10 @@ Maybe<String> UniverseClient::connect(UniverseConnection connection, bool allowA auto clientConnect = make_shared<ClientConnectPacket>(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); - clientConnect->info = JsonObject{ {"brand", "OpenStarbound"} }; + clientConnect->info = JsonObject{ + {"brand", "OpenStarbound"}, + {"openProtocolVersion", OpenProtocolVersion } + }; connection.pushSingle(std::move(clientConnect)); connection.sendAll(timeout); @@ -134,9 +144,6 @@ Maybe<String> UniverseClient::connect(UniverseConnection connection, bool allowA packet = connection.pullSingle(); } - NetCompatibilityRules compatibilityRules; - compatibilityRules.isLegacy = legacyServer; - if (auto success = as<ConnectSuccessPacket>(packet)) { m_universeClock = make_shared<Clock>(); m_clientContext = make_shared<ClientContext>(success->serverUuid, m_mainPlayer->uuid()); |