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