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
|
package MasterWebInterface::Handler::Json::JsonServerList;
use strict;
use TUWF ':html';
use Exporter 'import';
use JSON;
TUWF::register(
qr{json/([\w]{1,20})} => \&serverlist_json, # valid list
);
#
# Generate a list of selected games in the database per game (arg: gamename)
#
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 => 'r', required => 0, default => 100, template => 'page' },
{ get => 'q', required => 0, default => '', maxlength => 90 },
{ get => 'g', required => 0, default => '', maxlength => 90 },
{ get => 'a', required => 0, default => '', maxlength => 200 },
);
# allow all outside sources to access the json api
$self->resHeader("Access-Control-Allow-Origin", "*");
# generate json error data if errors in field
if ( $f->{_err} )
{
# response as json data
$self->resJSON({
error => 1,
in => "options",
options => $f->{_err}
});
return;
}
# 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 for ubrowser.333networks.com
($f->{a} =~ m/popserv/ig) ? (popserv => 1) : (),
($f->{a} =~ m/utdemo/ig) ? (utdemo => 1) : (),
);
# get total number of players in selected page(s)
my $pl = 0;
for (@{$list})
{
$pl += $_->{numplayers}
}
# response as json data
$self->resJSON([
$list,
{total => $p, players => $pl}
]);
}
1;
|