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;
|