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
|
#include "statuschecker.h"
bool StatusChecker::insertPlayerInfo(const QString &serverAddress,
const unsigned short &serverPort,
const QHash<QString, QString> &serverInfo)
{
QSqlQuery q;
int serverID = -1;
// TODO: combine from 3 to 2 queries?
// (query optimisation)
// get server ID first
QString selectString = "SELECT id FROM serverlist "
"WHERE ip = :ip AND queryport = :queryport ";
q.prepare(selectString);
q.bindValue(":ip", serverAddress);
q.bindValue(":queryport", serverPort);
if ( ! q.exec() )
return reportQuery(q);
if ( q.next() ) // else serverID remains -1
serverID = q.value(0).toUInt();
// remove old player entries
QString deleteString = "DELETE FROM playerinfo WHERE sid = :sid";
q.prepare(deleteString);
q.bindValue(":sid", serverID);
if ( ! q.exec() )
return reportQuery(q);
// iterate through serverInfo player data
int playerIndex = 0;
while ( serverInfo.contains( QStringLiteral("player_%1").arg(playerIndex) ) )
{
QString insertString = "INSERT INTO playerinfo "
"(sid, name, team, frags, mesh, skin, face, ping, misc, dt_player) "
"VALUES (:sid, :name, :team, :frags, :mesh, :skin, :face, :ping, :misc, :dt_player)";
q.prepare(insertString);
q.bindValue(":sid", serverID);
q.bindValue(":name", serverInfo.value(QStringLiteral("player_%1").arg(playerIndex), "Player"));
q.bindValue(":team", serverInfo.value(QStringLiteral( "team_%1").arg(playerIndex), "0"));
q.bindValue(":frags", serverInfo.value(QStringLiteral( "frags_%1").arg(playerIndex), "0"));
q.bindValue(":mesh", serverInfo.value(QStringLiteral( "mesh_%1").arg(playerIndex), "default"));
q.bindValue(":skin", serverInfo.value(QStringLiteral( "skin_%1").arg(playerIndex), "default"));
q.bindValue(":face", serverInfo.value(QStringLiteral( "face_%1").arg(playerIndex), "default"));
q.bindValue(":ping", serverInfo.value(QStringLiteral( "ping_%1").arg(playerIndex), "0"));
q.bindValue(":misc", ""); // reserved for additional query info
q.bindValue(":dt_player", QDateTime::currentSecsSinceEpoch() );
if ( ! q.exec() )
return reportQuery(q);
// successfull insert, increase player index
playerIndex++;
}
return true;
}
|