aboutsummaryrefslogtreecommitdiff
path: root/util/tools/r_database.pl
blob: 2875844c28e26cf4be7d20c6092b2bd38077467c (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
#!/usr/bin/perl
use strict;
use warnings;
use DBI;

our $dbh = open_database();

sub open_database {
  my $dbh = DBI->connect('dbi:Pg:dbname=database', 'user', 'password')
    or die "Cannot connect: $DBI::errstr\n";
  
  # don't forget at end!
  #$dbh->disconnect;
}

################################################################################
## Subroutine dbAddServer
## Add a server to the database (address + port only)
## If the address already exists in the database, it will be ignored.
################################################################################
sub db_add_server {
  my %o = @_;

  # Try to get the address out of the database.
  my $exists = $dbh->selectall_arrayref(
    "SELECT * FROM serverlist WHERE ip = ? AND port = ?", 
    undef, $o{ip}, $o{port});
  return if (defined $exists->[0]);
  
  $exists = $dbh->selectall_arrayref(
    "SELECT * FROM pending WHERE ip = ? AND heartbeat = ?", 
    undef, $o{ip}, $o{port});
  return if (defined $exists->[0]);
  
  # generate random "secure" string
  my @c = ('A'..'Z');
  my $s = "";
  $s .= $c[rand @c] for 1..6;
  
  #print "Add $o{ip}\t $o{port}\n";
  $exists = $dbh->do("INSERT INTO pending (ip, heartbeat, secure) VALUES(?, ?, ?)",
     undef, $o{ip}, $o{port}, $s);
}

################################################################################
## Add a remote master server applet 
################################################################################
sub add_master_applet {
  my %o = @_;

  my $u = $dbh->do(
     "SELECT * FROM appletlist 
      WHERE ip = ? 
      AND port = ?
      AND gamename = ?",
      undef, $o{ip}, $o{port}, lc $o{gamename});
  
  # return if found
  return if ($u > 0);

  # insert applet data 
  return $dbh->do("INSERT INTO appletlist (ip, port, gamename) 
                           SELECT ?, ?, ?", undef, 
                           $o{ip}, $o{port}, lc $o{gamename});
}

################################################################################
## update time on master applet
################################################################################
sub update_master_applet {
  my %o = @_;
  return $dbh->do("UPDATE appletlist 
    SET updated = to_timestamp(?) 
    WHERE ip = ?
      AND port = ?
      AND gamename = ?", 
    undef, time, $o{ip}, $o{port}, lc $o{gamename});
}

1;