Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/StarUniverseClient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/game/StarUniverseClient.cpp')
-rw-r--r--source/game/StarUniverseClient.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/source/game/StarUniverseClient.cpp b/source/game/StarUniverseClient.cpp
index 136fd7b..a5bd9df 100644
--- a/source/game/StarUniverseClient.cpp
+++ b/source/game/StarUniverseClient.cpp
@@ -81,8 +81,8 @@ Maybe<String> UniverseClient::connect(UniverseConnection connection, bool allowA
{
auto protocolRequest = make_shared<ProtocolRequestPacket>(StarProtocolVersion);
protocolRequest->setCompressionMode(PacketCompressionMode::Enabled);
- // Signal that we're OpenStarbound. Vanilla Starbound only compresses packets above 64 bytes - by forcing it we can communicate this.
- // If you know a less cursed way, please let me know.
+ // Signal that we're OpenStarbound. Vanilla Starbound only compresses
+ // packets above 64 bytes - by forcing it, we can communicate this.
connection.pushSingle(protocolRequest);
}
connection.sendAll(timeout);
@@ -94,8 +94,24 @@ 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));
- m_legacyServer = protocolResponsePacket->compressionMode() != PacketCompressionMode::Enabled; // True if server is vanilla
- connection.setLegacy(m_legacyServer);
+ if (!(m_legacyServer = protocolResponsePacket->compressionMode() != PacketCompressionMode::Enabled)) {
+ if (auto compressedSocket = as<CompressedPacketSocket>(&connection.packetSocket())) {
+ if (protocolResponsePacket->info) {
+ auto compressionName = protocolResponsePacket->info.getString("compression", "None");
+ 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 if (!m_legacyServer) {
+ Logger::info("UniverseClient: Defaulting to Zstd network stream compression (older server version)");
+ compressedSocket->setCompressionStreamEnabled(true);// old OpenSB server version always expects it!
+ }
+ }
+ }
+ connection.packetSocket().setLegacy(m_legacyServer);
+
connection.pushSingle(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));