diff options
| author | Darkelarious <darkelarious@333networks.com> | 2020-12-30 17:25:49 +0000 |
|---|---|---|
| committer | Darkelarious <darkelarious@333networks.com> | 2020-12-30 17:25:49 +0000 |
| commit | 1f894307ede92602f1615dcf8fb0ab75e3ea6447 (patch) | |
| tree | ca1e8e8c95070e93f67e8eefd781a5e91d519d3f | |
| parent | 6c9f14e8d2c10584d59a3c24127d95e447dc9ab0 (diff) | |
| download | Simulation-Tools-1f894307ede92602f1615dcf8fb0ab75e3ea6447.tar.gz Simulation-Tools-1f894307ede92602f1615dcf8fb0ab75e3ea6447.zip | |
split long queries in smaller chunks
| -rwxr-xr-x | common/status.pl | 8 | ||||
| -rwxr-xr-x | gameserver/gameserver.pl | 20 |
2 files changed, 21 insertions, 7 deletions
diff --git a/common/status.pl b/common/status.pl index 4e9ad28..32cb9e7 100755 --- a/common/status.pl +++ b/common/status.pl @@ -95,11 +95,11 @@ sub getResponse my $reply = ""; for ( 0..$info{numplayers}-1 ) { - $reply .= "\\player_$_\\" .$player{player_}; + $reply .= "\\player_$_\\" .$player{player_}.$_; # Player0 $reply .= "\\frags_$_\\" .$player{frags_}; $reply .= "\\health_$_\\" .$player{health_}; $reply .= "\\deaths_$_\\" .$player{deaths_}; - $reply .= "\\ping_$_\\" .int(rand(400)); # random number! + $reply .= "\\ping_$_\\" .int((rand(400))+24); # random number! $reply .= "\\team_$_\\" .$player{team_}; $reply .= "\\mesh_$_\\" .$player{mesh_}; $reply .= "\\skin_$_\\" .$player{skin_}; @@ -117,11 +117,11 @@ sub getResponse $reply .= "\\" . join '\\', %rules; for ( 0..$info{numplayers}-1 ) { - $reply .= "\\player_$_\\" .$player{player_}; + $reply .= "\\player_$_\\" .$player{player_}.$_; # Player0 $reply .= "\\frags_$_\\" .$player{frags_}; $reply .= "\\health_$_\\" .$player{health_}; $reply .= "\\deaths_$_\\" .$player{deaths_}; - $reply .= "\\ping_$_\\" .int(rand(400)); # random number! + $reply .= "\\ping_$_\\" .int((rand(400))+24); # random number! $reply .= "\\team_$_\\" .$player{team_}; $reply .= "\\mesh_$_\\" .$player{mesh_}; $reply .= "\\skin_$_\\" .$player{skin_}; 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 |
