aboutsummaryrefslogtreecommitdiff
path: root/lib/MasterServer/Database/SQLite/dbUTServerInfo.pm
blob: 5a579ac0a9024008a166139f7af15f8b3706e547 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package MasterServer::Database::SQLite::dbUTServerInfo;

use strict;
use warnings;
use MasterServer::Core::Util 'sqlprint';
use Exporter 'import';

our @EXPORT = qw| add_utserver
               update_utserver 
               delete_utplayers
               insert_utplayer |;

################################################################################
## Update serverinfo for an existing address to the utserver list.
## opts: all server info data fields.
################################################################################
sub update_utserver {
  my $self = shift;
  my $id   = shift;
  my %s = (
   # defaults
   updated    => time,
   @_);

  # try updating it in serverlist
  my %H = (
    $s{minnetver}           ? (            'minnetver = ?' =>      $s{minnetver} )                    : (),
    $s{gamever}             ? (              'gamever = ?' => int( $s{gamever}) )                     : (),
    $s{location}            ? (             'location = ?' =>      $s{location} )                     : (),
    $s{listenserver}        ? (         'listenserver = ?' =>    ( $s{listenserver} ? 1 : 0) )        : (),
    $s{hostport}            ? (             'hostport = ?' =>      $s{hostport})                      : (),
    $s{hostname}            ? (             'hostname = ?' =>      $s{hostname})                      : (),
    $s{AdminName}           ? (            'adminname = ?' =>      $s{AdminName})                     : (),
    $s{AdminEMail}          ? (           'adminemail = ?' =>      $s{AdminEMail})                    : (),
    $s{password}            ? (             'password = ?' =>    ( $s{password} ? 1 : 0) )            : (),
    $s{gametype}            ? (             'gametype = ?' =>      $s{gametype})                      : (),
    $s{gamestyle}           ? (            'gamestyle = ?' =>      $s{gamestyle})                     : (),
    $s{changelevels}        ? (         'changelevels = ?' =>    ( $s{changelevels} ? 1 : 0) )        : (),
    $s{maptitle}            ? (             'maptitle = ?' =>      $s{maptitle})                      : (),
    $s{mapname}             ? (              'mapname = ?' =>      $s{mapname})                       : (),
    $s{numplayers}          ? (           'numplayers = ?' =>      $s{numplayers})                    : ('numplayers = ?' => 0),
    $s{maxplayers}          ? (           'maxplayers = ?' =>      $s{maxplayers})                    : ('maxplayers = ?' => 0),
    $s{minplayers}          ? (           'minplayers = ?' =>      $s{minplayers})                    : ('minplayers = ?' => 0),
    $s{botskill}            ? (             'botskill = ?' =>      $s{botskill})                      : (),
    $s{balanceteams}        ? (         'balanceteams = ?' =>    ( $s{balanceteams} ? 1 : 0) )        : (),
    $s{playersbalanceteams} ? (  'playersbalanceteams = ?' =>    ( $s{playersbalanceteams} ? 1 : 0) ) : (),
    $s{friendlyfire}        ? (         'friendlyfire = ?' =>      $s{friendlyfire})                  : (),
    $s{maxteams}            ? (             'maxteams = ?' =>      $s{maxteams})                      : (),
    $s{timelimit}           ? (            'timelimit = ?' =>      $s{timelimit})                     : (),
    $s{goalteamscore}       ? (        'goalteamscore = ?' => int( $s{goalteamscore}) )               : (),
    $s{fraglimit}           ? (            'fraglimit = ?' => int( $s{fraglimit}) )                   : (),
    $s{mutators}            ? (             'mutators = ?' =>      $s{mutators})                      : ('mutators = ?' => "None"),
    $s{updated}             ? ('updated = datetime(?, \'unixepoch\')' =>      $s{updated})            : (),
  );
  
  my($q, @p) = sqlprint("UPDATE utserver_info !H WHERE server_id = ?", \%H, $id);
  return $self->{dbh}->do($q, undef, @p);
}


################################################################################
## Add a new utserver and trigger the update routine above.
## opts: id, server info data
################################################################################
sub add_utserver {
  my ($self, $ip, $port) = @_;

  # create new entry
  return $self->{dbh}->do(
    "INSERT INTO utserver_info (server_id)
     SELECT (SELECT id FROM serverlist WHERE ip = ? AND port = ?)", 
     undef, $ip, $port);
}


################################################################################
## Delete all players from a certain server ID
## opts: server id
################################################################################
sub delete_utplayers {
  my ($self, $sid) = @_;
  
  # delete players for server_id
  return $self->{dbh}->do(
    "DELETE FROM utplayer_info WHERE server_id = ?",
    undef, $sid);
}

################################################################################
## Insert player info for a single player in server sid
## opts: server id, player info
################################################################################
sub insert_utplayer {
  my $self = shift;
  my $sid  = shift;
  my %s = (
   updated  => time,
   @_);

  # apparently useless chunk of code
  # FIXME move to site part
  my %H = (
    $s{server_id} ? ( 'server_id = ?' =>      $s{server_id})  : (),
    $s{player}    ? (    'player = ?' =>      $s{player})     : (),
    $s{team}      ? (      'team = ?' => int( $s{team}))      : (),
    $s{frags}     ? (     'frags = ?' => int( $s{frags}))     : (),
    $s{mesh}      ? (      'mesh = ?' =>      $s{mesh})       : (),
    $s{skin}      ? (      'skin = ?' =>      $s{skin})       : (),
    $s{face}      ? (      'face = ?' =>      $s{face})       : (),
    $s{ping}      ? (      'ping = ?' => int( $s{ping}))      : (),
    $s{ngsecret}  ? (  'ngsecret = ?' =>      $s{ngsecret})   : (),
    $s{updated}   ? ('updated = datetime(?, \'unixepoch\')' => $s{updated}) : (),
  );
  
  # insert
  return $self->{dbh}->do(
    "INSERT INTO utplayer_info (server_id, player, team, frags, mesh, skin, face, ping, ngsecret) 
     VALUES (?,?,?,?,?,?,?,?,?)", 
     undef, $sid, $s{player}, $s{team}, $s{frags}, $s{mesh}, $s{skin}, $s{face}, $s{ping}, $s{ngsecret});
}

1;