aboutsummaryrefslogtreecommitdiff
path: root/gameserver/gameserver.pl
diff options
context:
space:
mode:
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