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