aboutsummaryrefslogtreecommitdiff
path: root/lib/MasterWebInterface/Handler/Json/JsonServerList.pm
blob: ecd6c369471542c8826e30cb313809c5ea5f9e4f (plain)
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
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, $char) = @_;
    $gamename = "all" unless $gamename;
    
    # TODO DEPRECATE $char

    # 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 
        },
    );
    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}, # TODO: implement in DB query
    );
    
    # 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;