1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package MasterWebInterface::Handler::Json::JsonServerList;
use strict;
use TUWF ':html';
use Exporter 'import';
use JSON;
TUWF::register(
qr{json/(.[\w]{1,20})} => \&serverlist_json,
qr{json/(.[\w]{1,20})/(all|[0a-z])} => \&serverlist_json,
);
################################################################################
# LIST SERVERS
# Generate a list of selected games in the database per game (arg: gamename)
# Same as &serverlist, but with json output.
################################################################################
sub serverlist_json
{
my($self, $gamename) = @_;
$gamename = "all" unless $gamename;
# sorting, page
my $f = $self->formValidate(
{
get => 's',
required => 0,
default => 'gamename',
enum => [ qw| hostname gamename country added gametype numplayers mapname | ]
},
{
get => 'o',
required => 0,
default => 'a',
enum => [ 'a','d' ]
},
{
get => 'p',
required => 0,
default => 1,
template => 'page',
},
{
get => 'q',
required => 0,
default => '',
maxlength => 90
},
{
get => 'r',
required => 0,
default => 100,
template => 'page'
},
{
get => 'g',
required => 0,
default => '',
maxlength => 90
},
{
get => 'a',
required => 0,
default => '',
maxlength => 200
},
);
return $self->resNotFound if $f->{_err};
# load server list from database
my ( $list, $np, $p ) = $self->dbServerListGet(
sort => $f->{s},
reverse => $f->{o} eq 'd',
gamename => $gamename,
search => $f->{q},
page => $f->{p},
results => $f->{r},
updated => $self->{window_time},
gametype => $f->{g},
# parse extra request parameters like version, populated, etc
($f->{a} =~ m/popserv/ig) ? (popserv => 1) : (),
($f->{a} =~ m/utdemo/ig) ? (utdemo => 1) : (),
);
# get total number of players
my $pl = 0;
for (@{$list})
{
$pl += $_->{numplayers}
}
# return json data as the response
my $json_data = encode_json [$list, {total => $p, players => $pl}];
print {
$self->resFd()
} $json_data;
# set content type and allow off-domain access (for example jQuery)
$self->resHeader("Access-Control-Allow-Origin", "*");
$self->resHeader("Content-Type", "application/json; charset=UTF-8");
}
1;
|