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

summaryrefslogtreecommitdiff
path: root/source/game/StarUniverseServer.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-07-27 14:09:12 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2024-07-27 14:09:12 +1000
commit951fe787c437d43982f5eda77e1f19bf83998bfd (patch)
treed2e0c9a57451be75a968fedb6b7c407911ffbef4 /source/game/StarUniverseServer.cpp
parent9e7a2e9bb9976a0f23fad5c0c91b151ffa2db24c (diff)
Networking changes (needs P2P testing, requires clients to update unfortunately)
Diffstat (limited to 'source/game/StarUniverseServer.cpp')
-rw-r--r--source/game/StarUniverseServer.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/source/game/StarUniverseServer.cpp b/source/game/StarUniverseServer.cpp
index 43e67c0..56ae634 100644
--- a/source/game/StarUniverseServer.cpp
+++ b/source/game/StarUniverseServer.cpp
@@ -1540,6 +1540,7 @@ void UniverseServer::acceptConnection(UniverseConnection connection, Maybe<HostA
int clientWaitLimit = assets->json("/universe_server.config:clientWaitLimit").toInt();
String serverAssetsMismatchMessage = assets->json("/universe_server.config:serverAssetsMismatchMessage").toString();
String clientAssetsMismatchMessage = assets->json("/universe_server.config:clientAssetsMismatchMessage").toString();
+ auto connectionSettings = configuration->get("connectionSettings");
RecursiveMutexLocker mainLocker(m_mainLock, false);
@@ -1549,8 +1550,9 @@ void UniverseServer::acceptConnection(UniverseConnection connection, Maybe<HostA
Logger::warn("UniverseServer: client connection aborted, expected ProtocolRequestPacket");
return;
}
-
+
bool legacyClient = protocolRequest->compressionMode() != PacketCompressionMode::Enabled;
+ connection.packetSocket().setLegacy(legacyClient);
auto protocolResponse = make_shared<ProtocolResponsePacket>();
protocolResponse->setCompressionMode(PacketCompressionMode::Enabled); // Signal that we're OpenStarbound
@@ -1565,10 +1567,21 @@ void UniverseServer::acceptConnection(UniverseConnection connection, Maybe<HostA
return;
}
+ bool useCompressionStream = false;
protocolResponse->allowed = true;
+ if (!legacyClient) {
+ auto compressionName = connectionSettings.getString("compression", "None");
+ auto compressionMode = NetCompressionModeNames.maybeLeft(compressionName).value(NetCompressionMode::None);
+ useCompressionStream = compressionMode == NetCompressionMode::Zstd;
+ protocolResponse->info = JsonObject{
+ {"compression", NetCompressionModeNames.getRight(compressionMode)}
+ };
+ }
connection.pushSingle(protocolResponse);
connection.sendAll(clientWaitLimit);
- connection.setLegacy(legacyClient);
+
+ if (auto compressedSocket = as<CompressedPacketSocket>(&connection.packetSocket()))
+ compressedSocket->setCompressionStreamEnabled(useCompressionStream);
String remoteAddressString = remoteAddress ? toString(*remoteAddress) : "local";
Logger::info("UniverseServer: Awaiting connection info from {}, {} client", remoteAddressString, legacyClient ? "Starbound" : "OpenStarbound");