aboutsummaryrefslogtreecommitdiff
path: root/util/tools/r_database.pl
diff options
context:
space:
mode:
Diffstat (limited to 'util/tools/r_database.pl')
-rwxr-xr-xutil/tools/r_database.pl48
1 files changed, 44 insertions, 4 deletions
diff --git a/util/tools/r_database.pl b/util/tools/r_database.pl
index 601b1ae..2875844 100755
--- a/util/tools/r_database.pl
+++ b/util/tools/r_database.pl
@@ -6,7 +6,7 @@ use DBI;
our $dbh = open_database();
sub open_database {
- my $dbh = DBI->connect('dbi:Pg:dbname=masterserver', 'user', 'password')
+ my $dbh = DBI->connect('dbi:Pg:dbname=database', 'user', 'password')
or die "Cannot connect: $DBI::errstr\n";
# don't forget at end!
@@ -19,7 +19,7 @@ sub open_database {
## If the address already exists in the database, it will be ignored.
################################################################################
sub db_add_server {
- my %o = (@_);
+ my %o = @_;
# Try to get the address out of the database.
my $exists = $dbh->selectall_arrayref(
@@ -32,9 +32,49 @@ sub db_add_server {
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) VALUES(?, ?)",
- undef, $o{ip}, $o{port});
+ $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;