aboutsummaryrefslogtreecommitdiff
path: root/gameserver/gameserver.pl
diff options
context:
space:
mode:
authorDarkelarious <darkelarious@333networks.com>2020-12-30 17:25:49 +0000
committerDarkelarious <darkelarious@333networks.com>2020-12-30 17:25:49 +0000
commit1f894307ede92602f1615dcf8fb0ab75e3ea6447 (patch)
treeca1e8e8c95070e93f67e8eefd781a5e91d519d3f /gameserver/gameserver.pl
parent6c9f14e8d2c10584d59a3c24127d95e447dc9ab0 (diff)
downloadSimulation-Tools-1f894307ede92602f1615dcf8fb0ab75e3ea6447.tar.gz
Simulation-Tools-1f894307ede92602f1615dcf8fb0ab75e3ea6447.zip
split long queries in smaller chunks
Diffstat (limited to 'gameserver/gameserver.pl')
-rwxr-xr-xgameserver/gameserver.pl20
1 files changed, 17 insertions, 3 deletions
diff --git a/gameserver/gameserver.pl b/gameserver/gameserver.pl
index e86af7c..924ce06 100755
--- a/gameserver/gameserver.pl
+++ b/gameserver/gameserver.pl
@@ -26,7 +26,7 @@ my $gamename = &getGameName;
my $port = 7778;
# set masterserver
-my $masteraddress = "localhost";
+my $masteraddress = "rhea.333networks.com";
my $masterport = 27900;
my $ma = sockaddr_in($masterport, inet_aton($masteraddress) );
@@ -56,8 +56,22 @@ my $udp_server; $udp_server = AnyEvent::Handle::UDP->new(
# if status
if ($data[0] =~ m/^(basic|info|rules|players|status|echo)$/ig)
- {
- $udp_server->push_send(&getResponse($data[0], $data[1] || ""), $pa)
+ {
+ # generate the status response
+ my $response = &getResponse($data[0], $data[1] || "");
+
+ # status is longer than 1024 bytes. older games do not support
+ # long queries. start splitting at \player\ parts.
+
+ # split the response in chunks of 768 bytes and send (for large lists)
+ while (length $response > 768)
+ {
+ my $pos = index $response, "\\player_", 768;
+ my $chunk = substr $response, 0, $pos, '';
+ $udp_server->push_send($chunk, $pa);
+ }
+ # last <512 chunk
+ $udp_server->push_send($response, $pa);
}
# respond to possible secure