1 |
#! perl |
2 |
|
3 |
# metaserver reports |
4 |
|
5 |
use IO::Socket::INET; |
6 |
|
7 |
$cf::CFG{metaserver_comment} |
8 |
or return; |
9 |
|
10 |
our $UPDATE_METASERVER = Event->timer ( |
11 |
reentrant => 0, |
12 |
after => 5, |
13 |
interval => 299, |
14 |
data => cf::WF_AUTOCANCEL, |
15 |
cb => sub { |
16 |
my $socket = new IO::Socket::INET |
17 |
Proto => 'udp', |
18 |
PeerAddr => $cf::CFG{metaserver_metaserver}, |
19 |
LocalAddr => $cf::CFG{metaserver_serveraddr} |
20 |
or die "metaserver socket creation error: $!"; |
21 |
|
22 |
my $num_players = grep |
23 |
$_->ob->map |
24 |
&& !$_->hidden |
25 |
&& !$_->ob->flag (cf::FLAG_WIZ), |
26 |
cf::player::list; |
27 |
|
28 |
my $pkt = sprintf "%s|%d|%s|%s|%d|%d|%d", |
29 |
$cf::CFG{metaserver_servername}, |
30 |
$num_players, |
31 |
cf::VERSION, |
32 |
$cf::CFG{metaserver_comment}, |
33 |
0, # ibytes |
34 |
0, # obytes |
35 |
time - $cf::uptime; |
36 |
|
37 |
syswrite $socket, $pkt; |
38 |
}, |
39 |
); |
40 |
|