mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-22 13:30:06 +00:00
Add racing-related DB functions
This commit is contained in:
parent
ea47f67b2b
commit
598c7ce1d0
@ -1758,3 +1758,71 @@ bool Database::sendEmail(EmailData* data, std::vector<sItemBase> attachments) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Database::RaceRanking Database::getTopRaceRanking(int epID) {
|
||||||
|
std::lock_guard<std::mutex> lock(dbCrit);
|
||||||
|
const char* sql = R"(
|
||||||
|
SELECT
|
||||||
|
"EPID",
|
||||||
|
"PlayerID",
|
||||||
|
"Score",
|
||||||
|
"RingCount",
|
||||||
|
"Time",
|
||||||
|
"Timestamp"
|
||||||
|
FROM "RaceResults"
|
||||||
|
WHERE "EPID" = ?
|
||||||
|
ORDER BY "Score" DESC
|
||||||
|
LIMIT 1;
|
||||||
|
)";
|
||||||
|
sqlite3_stmt* stmt;
|
||||||
|
|
||||||
|
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
|
||||||
|
sqlite3_bind_int(stmt, 1, epID);
|
||||||
|
|
||||||
|
Database::RaceRanking ranking = {};
|
||||||
|
if (sqlite3_step(stmt) != SQLITE_ROW) {
|
||||||
|
// this race hasn't been run before, so return a blank ranking
|
||||||
|
sqlite3_finalize(stmt);
|
||||||
|
return ranking;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(epID == sqlite3_column_int(stmt, 0)); // EPIDs should always match
|
||||||
|
|
||||||
|
ranking.EPID = epID;
|
||||||
|
ranking.PlayerID = sqlite3_column_int(stmt, 1);
|
||||||
|
ranking.Score = sqlite3_column_int(stmt, 2);
|
||||||
|
ranking.RingCount = sqlite3_column_int(stmt, 3);
|
||||||
|
ranking.Time = sqlite3_column_int64(stmt, 4);
|
||||||
|
ranking.Timestamp = sqlite3_column_int64(stmt, 5);
|
||||||
|
|
||||||
|
sqlite3_finalize(stmt);
|
||||||
|
return ranking;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Database::postRaceRanking(Database::RaceRanking ranking) {
|
||||||
|
std::lock_guard<std::mutex> lock(dbCrit);
|
||||||
|
|
||||||
|
const char* sql = R"(
|
||||||
|
INSERT INTO "RaceResults"
|
||||||
|
("EPID", "PlayerID", "Score", "RingCount", "Time", "Timestamp")
|
||||||
|
VALUES(?, ?, ?, ?, ?, ?);
|
||||||
|
)";
|
||||||
|
sqlite3_stmt* stmt;
|
||||||
|
|
||||||
|
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
|
||||||
|
sqlite3_bind_int(stmt, 1, ranking.EPID);
|
||||||
|
sqlite3_bind_int(stmt, 2, ranking.PlayerID);
|
||||||
|
sqlite3_bind_int(stmt, 3, ranking.Score);
|
||||||
|
sqlite3_bind_int(stmt, 4, ranking.RingCount);
|
||||||
|
sqlite3_bind_int64(stmt, 5, ranking.Time);
|
||||||
|
sqlite3_bind_int64(stmt, 6, ranking.Timestamp);
|
||||||
|
|
||||||
|
if (sqlite3_step(stmt) != SQLITE_DONE) {
|
||||||
|
std::cout << "[WARN] Database: Failed to post race result" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3_finalize(stmt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,6 +29,14 @@ namespace Database {
|
|||||||
uint64_t SendTime;
|
uint64_t SendTime;
|
||||||
uint64_t DeleteTime;
|
uint64_t DeleteTime;
|
||||||
};
|
};
|
||||||
|
struct RaceRanking {
|
||||||
|
int EPID;
|
||||||
|
int PlayerID;
|
||||||
|
int Score;
|
||||||
|
int RingCount;
|
||||||
|
uint64_t Time;
|
||||||
|
uint64_t Timestamp;
|
||||||
|
};
|
||||||
|
|
||||||
void open();
|
void open();
|
||||||
void close();
|
void close();
|
||||||
@ -88,4 +96,8 @@ namespace Database {
|
|||||||
void deleteEmails(int playerID, int64_t* indices);
|
void deleteEmails(int playerID, int64_t* indices);
|
||||||
int getNextEmailIndex(int playerID);
|
int getNextEmailIndex(int playerID);
|
||||||
bool sendEmail(EmailData* data, std::vector<sItemBase> attachments);
|
bool sendEmail(EmailData* data, std::vector<sItemBase> attachments);
|
||||||
|
|
||||||
|
// racing
|
||||||
|
RaceRanking getTopRaceRanking(int epID);
|
||||||
|
void postRaceRanking(RaceRanking ranking);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user