diff options
Diffstat (limited to 'Database')
| -rw-r--r-- | Database/Common/commonactions.h | 31 | ||||
| -rw-r--r-- | Database/Common/existserver.cpp | 21 | ||||
| -rw-r--r-- | Database/Common/getgamenames.cpp | 28 | ||||
| -rw-r--r-- | Database/Common/getnumgames.cpp | 30 | ||||
| -rw-r--r-- | Database/Common/insertserver.cpp | 26 | ||||
| -rw-r--r-- | Database/Common/selectserverlist.cpp | 31 | ||||
| -rw-r--r-- | Database/Common/updateserver.cpp | 47 | ||||
| -rw-r--r-- | Database/closedatabase.cpp | 7 | ||||
| -rw-r--r-- | Database/createtables.cpp | 129 | ||||
| -rw-r--r-- | Database/databaseinterface.h | 24 | ||||
| -rw-r--r-- | Database/initdatabase.cpp | 77 | ||||
| -rw-r--r-- | Database/reportquery.cpp | 11 |
12 files changed, 0 insertions, 462 deletions
diff --git a/Database/Common/commonactions.h b/Database/Common/commonactions.h deleted file mode 100644 index 3bce0b6..0000000 --- a/Database/Common/commonactions.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef COMMONACTIONS_H -#define COMMONACTIONS_H - -#include <QDateTime> -#include "Database/databaseinterface.h" -#include "Logger/logprimitive.h" - -// insert, update or delete a server from the list -bool insertServer(const QString &serverAddress, - const unsigned short &serverPort, - const QString &gamename, - const bool &directBeacon); - -bool updateServer(const QString &serverAddress, - const unsigned short &serverPort, - const QString &gamename, - const bool &directBeacon, - const bool &authenticated); - -bool existServer(const QString &serverAddress, - const unsigned short &serverPort); - -QSqlQuery selectServerList(const QString &gamename, - const int &serverAge_s, - const bool &withSyncData); - -QStringList getGamenames(const int &serverAge_s); - -QHash<QString, int> getNumGames(const int &serverAge_s); - -#endif // COMMONACTIONS_H diff --git a/Database/Common/existserver.cpp b/Database/Common/existserver.cpp deleted file mode 100644 index 9609948..0000000 --- a/Database/Common/existserver.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "commonactions.h" - -bool existServer(const QString &serverAddress, - const unsigned short &serverPort) -{ - // find existing entry - QSqlQuery q; - QString selectString = "SELECT id FROM serverlist " - "WHERE ip = :ip AND queryport = :queryport "; - - // bind values and execute - q.prepare(selectString); - q.bindValue(":ip", serverAddress); - q.bindValue(":queryport", serverPort); - - if ( ! q.exec() ) - return reportQuery(q); - - // was a row/server found? - return q.next(); -} diff --git a/Database/Common/getgamenames.cpp b/Database/Common/getgamenames.cpp deleted file mode 100644 index 8093f7c..0000000 --- a/Database/Common/getgamenames.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "commonactions.h" - -QStringList getGamenames(const int &serverAge_s) -{ - // init output - QStringList gamenameList; - - // retrieve active gamenames from database - QSqlQuery q; - QString selectString = "SELECT DISTINCT gamename FROM serverlist " - "WHERE dt_updated > :timestamp " - "ORDER BY gamename ASC"; - - // bind and execute - q.prepare(selectString); - q.bindValue(":timestamp", QDateTime::currentDateTime().addSecs(-serverAge_s ).toSecsSinceEpoch()); - - if ( ! q.exec() ) - reportQuery(q); - - // parse to stringlist - while ( q.next() ) - { - gamenameList.append( q.value(0).toString() ); - } - - return gamenameList; -} diff --git a/Database/Common/getnumgames.cpp b/Database/Common/getnumgames.cpp deleted file mode 100644 index 1425427..0000000 --- a/Database/Common/getnumgames.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "commonactions.h" - -QHash<QString, int> getNumGames(const int &serverAge_s) -{ - QSqlQuery q; - QHash<QString, int> numGames; - - // number of games - q.prepare("SELECT count(gamename) FROM gameinfo"); - if ( ! q.exec() ) - reportQuery(q); - if (q.next()) - numGames["numTotal"] = q.value(0).toInt(); - - // number of active games - QString selectString = "SELECT count(gamename) FROM gameinfo " - "WHERE num_direct > 0 " - "OR num_total > 0 "; - q.prepare(selectString); - q.bindValue(":timestamp", QDateTime::currentDateTime().addSecs(-serverAge_s ).toSecsSinceEpoch()); - if ( ! q.exec() ) - reportQuery(q); - if (q.next()) - numGames["numActive"] = q.value(0).toInt(); - - - // TODO: get more relevant stats - - return numGames; -} diff --git a/Database/Common/insertserver.cpp b/Database/Common/insertserver.cpp deleted file mode 100644 index 05b2eaa..0000000 --- a/Database/Common/insertserver.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "commonactions.h" - -// insert a server into the list -bool insertServer(const QString &serverAddress, - const unsigned short &serverPort, - const QString &gamename, - const bool &directBeacon) -{ - // insert query string - QSqlQuery q; - QString insertString = "INSERT INTO serverlist (ip, queryport, gamename, f_direct) " - "VALUES (:ip, :queryport, :gamename, :directbeacon)"; - - // bind values and execute - q.prepare(insertString); - q.bindValue(":ip", serverAddress); - q.bindValue(":queryport", serverPort); - q.bindValue(":gamename", gamename); - q.bindValue(":directbeacon", ( directBeacon ? 1 : 0 ) ); // bool to int - - if ( ! q.exec() ) - return reportQuery(q); - - // was a row inserted? - return (q.numRowsAffected() > 0); -} diff --git a/Database/Common/selectserverlist.cpp b/Database/Common/selectserverlist.cpp deleted file mode 100644 index c4797ed..0000000 --- a/Database/Common/selectserverlist.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "commonactions.h" - -QSqlQuery selectServerList(const QString &gamename, - const int &serverAge_s, - const bool &withSyncData) -{ - // retrieve servers from database - QSqlQuery q; - QString selectString = "SELECT ip, queryport FROM serverlist " - "WHERE gamename = :gamename "; - - if ( withSyncData ) - { - // relies on sync data to be accurate (if checker is not enabled) - selectString += "AND (dt_updated > :timestamp OR dt_sync > :timestamp)"; - } - else - { - // sync data may not be (sufficiently) accurate, only use data that we verified directly - selectString += "AND dt_updated > :timestamp"; - } - - // bind values and execute - q.prepare(selectString); - q.bindValue(":gamename", gamename); - q.bindValue(":timestamp", QDateTime::currentDateTime().addSecs(-serverAge_s ).toSecsSinceEpoch()); - if ( ! q.exec() ) - reportQuery(q); - - return q; -} diff --git a/Database/Common/updateserver.cpp b/Database/Common/updateserver.cpp deleted file mode 100644 index 24fa26f..0000000 --- a/Database/Common/updateserver.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "commonactions.h" - -bool updateServer(const QString &serverAddress, - const unsigned short &serverPort, - const QString &gamename, - const bool &directBeacon, - const bool &authenticated - ) -{ - // update existing entry, but do not insert. - QSqlQuery q; - QString updateString; - - // update with available values - updateString = "UPDATE serverlist SET "; - - /* - * Note that direct/auth set to 'false' will NOT override a previous value in the database - */ - - // is this a direct beacon? - if (directBeacon) - { - updateString += "f_direct = 1, "; - updateString += "dt_beacon = :timestamp, "; - } - - // did the server authenticate? - if (authenticated) updateString += "f_auth = 1, "; - - updateString += "gamename = :gamename, " - "dt_updated = :timestamp " - "WHERE ip = :ip AND queryport = :queryport"; - - // bind values and execute - q.prepare(updateString); - q.bindValue(":ip", serverAddress); - q.bindValue(":queryport", serverPort); - q.bindValue(":gamename", gamename); - q.bindValue(":timestamp", QDateTime::currentSecsSinceEpoch() ); - - if ( ! q.exec() ) - return reportQuery(q); - - // was a row updated? - return (q.numRowsAffected() > 0); -} diff --git a/Database/closedatabase.cpp b/Database/closedatabase.cpp deleted file mode 100644 index 6f3ff89..0000000 --- a/Database/closedatabase.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "databaseinterface.h" - -void closeDatabase() -{ - QSqlDatabase dbi; - dbi.close(); -} diff --git a/Database/createtables.cpp b/Database/createtables.cpp deleted file mode 100644 index b437163..0000000 --- a/Database/createtables.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include "databaseinterface.h" - -bool createTables() -{ - { // create serverlist - QSqlQuery q; - QString createServerlist = QStringLiteral( - "CREATE TABLE serverlist(" - "id INTEGER PRIMARY KEY AUTOINCREMENT," - "gamename TEXT NOT NULL DEFAULT ''," - "ip TEXT NOT NULL ," - "queryport INTEGER NOT NULL DEFAULT 0," - "t_protocol INTEGER NOT NULL DEFAULT 0," - "f_blacklist INTEGER NOT NULL DEFAULT 0," - "f_auth INTEGER NOT NULL DEFAULT 0," - "f_direct INTEGER NOT NULL DEFAULT 0," - "dt_added BIGINT DEFAULT (CAST(strftime('%s','now') AS BIGINT))," - "dt_beacon BIGINT DEFAULT (CAST(strftime('%s','now') AS BIGINT))," - "dt_sync BIGINT DEFAULT (CAST(strftime('%s','now') AS BIGINT))," - "dt_updated BIGINT DEFAULT (CAST(strftime('%s','now') AS BIGINT))" - ")"); - - // bind values and execute (not all db-interfaces support prepare(create table), exec directly) - if ( ! q.exec(createServerlist) ) - return reportQuery(q); - } - - { // create serverinfo - QSqlQuery q; - QString createServerinfo = QStringLiteral( - "CREATE TABLE serverinfo(" - "sid INTEGER NOT NULL DEFAULT 0," - "hostport INTEGER NOT NULL DEFAULT 0," - "hostname TEXT," - "gamever TEXT," - "minnetver TEXT," - "country TEXT," - "location TEXT," - "listenserver TEXT," - "adminname TEXT," - "adminemail TEXT," - "password TEXT," - "gametype TEXT," - "gamestyle TEXT," - "changelevels TEXT," - "maptitle TEXT," - "mapname TEXT," - "numplayers INTEGER DEFAULT 0," - "maxplayers INTEGER DEFAULT 0," - "minplayers INTEGER DEFAULT 0," - "botskill TEXT," - "balanceteams TEXT," - "playersbalanceteams TEXT," - "friendlyfire TEXT," - "maxteams TEXT," - "timelimit TEXT," - "goalteamscore TEXT," - "fraglimit TEXT," - "mutators TEXT DEFAULT 'None'," - "misc TEXT," - "dt_serverinfo BIGINT DEFAULT (CAST(strftime('%s','now') AS BIGINT))" - ")"); - - // bind values and execute - if ( ! q.exec(createServerinfo) ) - return reportQuery(q); - } - - { // create playerinfo - QSqlQuery q; - QString createPlayerlist = QStringLiteral( - "CREATE TABLE playerinfo(" - "sid INTEGER NOT NULL DEFAULT 0," - "name TEXT DEFAULT 'Player'," - "team TEXT," - "frags INTEGER DEFAULT 0," - "mesh TEXT," - "skin TEXT," - "face TEXT," - "ping INTEGER DEFAULT 0," - "misc TEXT," - "dt_player BIGINT DEFAULT (CAST(strftime('%s','now') AS BIGINT))" - ")"); - - // bind values and execute - if ( ! q.exec(createPlayerlist) ) - return reportQuery(q); - } - - { // create gameinfo - QSqlQuery q; - QString createGamelist = QStringLiteral( - "CREATE TABLE gameinfo(" - "gamename TEXT NOT NULL DEFAULT ''," - "label TEXT NOT NULL DEFAULT ''," - "num_total INTEGER NOT NULL DEFAULT 0," - "num_direct INTEGER NOT NULL DEFAULT 0" - ")"); - - // bind values and execute - if ( ! q.exec(createGamelist) ) - return reportQuery(q); - } - - { // create version info - QSqlQuery q; - QString createVersion = QStringLiteral( - "CREATE TABLE versioninfo(" - "type TEXT NOT NULL DEFAULT ''," - "version TEXT NOT NULL DEFAULT ''" - ")"); - - // bind values and execute - if ( ! q.exec(createVersion) ) - return reportQuery(q); - - // insert current version directly into the db during creation - q.prepare("INSERT INTO versioninfo (type, version) VALUES (\"database\", :currentver)"); - q.bindValue(":currentver", BUILD_VERSION); - - if ( ! q.exec() ) - reportQuery(q); - } - - // TODO: optional: write an sql file to /data/tables.sql for easy access on generated tables. - - // no errors - return true; -} diff --git a/Database/databaseinterface.h b/Database/databaseinterface.h deleted file mode 100644 index f80c93a..0000000 --- a/Database/databaseinterface.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef DATABASEINTERFACE_H -#define DATABASEINTERFACE_H - -#include <QSqlDatabase> -#include <QSqlQuery> -#include <QSqlError> -#include <QDataStream> -#include "Core/version.h" -#include "Logger/logprimitive.h" - -// database file path (following README structure) -const QString _sqlitePath = "../data/masterserver.db"; - -// init and close -bool initDatabase(const QString applicationPath); -void closeDatabase(); - -// report execution errors (terminal/display only) -bool reportQuery(const QSqlQuery &q); // always returns false! - -// generate tables in first run -bool createTables(); - -#endif // DATABASEINTERFACE_H diff --git a/Database/initdatabase.cpp b/Database/initdatabase.cpp deleted file mode 100644 index 06cd37c..0000000 --- a/Database/initdatabase.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "databaseinterface.h" - -bool initDatabase(const QString applicationPath) -{ - // open SQLite database - QSqlDatabase dbi = QSqlDatabase::addDatabase( "QSQLITE" ); - dbi.setDatabaseName(applicationPath + "/" + _sqlitePath); - - // open database - if ( ! dbi.open() ) - { - QSqlError sqlError = dbi.lastError(); - logPrimitive() << "Error opening database: " << sqlError.text() << endl; - return false; - } - - // speed up SQLite with keeping journals in memory and asynchronous writing - dbi.exec("PRAGMA synchronous = OFF"); - dbi.exec("PRAGMA journal_mode = MEMORY"); - - { // check if the database was generated with this version of the software - - // serverlist exists (and thus the other tables exist) but not version - if ( dbi.tables().contains("serverlist") and ! dbi.tables().contains("versioninfo")) - { - // outdated because the "version" table does not even exist yet (pre-0.14) - logPrimitive() << "The database tables are outdated (pre-0.14). Please remove the current database." << endl; - return false; - } - - // does the version table exist, and does it contain the correct version? - if ( dbi.tables().contains("versioninfo") ) - { - float dbVersion = 0.0; - QSqlQuery versionQuery; - versionQuery.prepare("SELECT version FROM versioninfo WHERE type = \"database\""); - - // failed query? (unlikely) - if ( ! versionQuery.exec() ) - return reportQuery(versionQuery); - - if (versionQuery.next()) - dbVersion = versionQuery.value("version").toFloat(); - - // version check is intentionally hardcoded since the last change in database structure (currently v0.15) - if ( dbVersion < DATABASE_VERSION ) - { - logPrimitive() << "The database tables are outdated (" << QString::number(dbVersion) << "). Please remove the current database." << endl; - return false; - } - - // tables up to date - return true; - } - } - - // specifying AUTO_CREATE_DB=y in the environment allows bypassing of the interactive prompt for non-interactive environments - if (qgetenv("AUTO_CREATE_DB") != "y") - { - // relevant tables do not exist. ask to generate. - logPrimitive() << "The database tables do not exist. Do you want to generate these? [y/N]" << endl; - - // if no, do not proceed. - if ( ! QTextStream(stdin).readLine().startsWith("y") ) - { - // do not generate. failed to load database. - return false; - } - } - else - { - logPrimitive() << "The database tables do not exist and will now be created." << endl; - } - - // create tables and proceed - return createTables(); -} diff --git a/Database/reportquery.cpp b/Database/reportquery.cpp deleted file mode 100644 index 2a5d7f7..0000000 --- a/Database/reportquery.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "databaseinterface.h" - -bool reportQuery(const QSqlQuery &q) -{ - logPrimitive() << "Database query error." << endl << "" << endl - << "Technical info: " << q.lastQuery() << endl << "" << endl - << "Reported error: " << q.lastError().text() << endl; - - // always return false, so we can report error and return false in one line. - return false; -} |
