Refactor some of the database stuff for QueryServ for uniformity, should probably be done right later

This commit is contained in:
Akkadius 2015-01-20 04:30:27 -06:00
parent cdde408602
commit 1bbbb28218
7 changed files with 47 additions and 40 deletions

View File

@ -4173,7 +4173,7 @@ void Database::LoadLogSysSettings(EQEmuLogSys::LogSettings* log_settings){
auto results = QueryDatabase(query); auto results = QueryDatabase(query);
int log_category = 0; int log_category = 0;
log_settings.file_logs_enabled = false; Log.file_logs_enabled = false;
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
log_category = atoi(row[0]); log_category = atoi(row[0]);
@ -4186,7 +4186,7 @@ void Database::LoadLogSysSettings(EQEmuLogSys::LogSettings* log_settings){
If we go through this whole loop and nothing is set to any debug level, there is no point to create a file or keep anything open If we go through this whole loop and nothing is set to any debug level, there is no point to create a file or keep anything open
*/ */
if (log_settings[log_category].log_to_file > 0){ if (log_settings[log_category].log_to_file > 0){
log_settings.file_logs_enabled = true; Log.file_logs_enabled = true;
} }
} }
} }

View File

@ -265,8 +265,8 @@ void EQEmuLogSys::CloseFileLogs()
{ {
if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone){ if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone){
std::cout << "Closing down zone logs..." << std::endl; std::cout << "Closing down zone logs..." << std::endl;
process_log.close();
} }
process_log.close();
} }
void EQEmuLogSys::StartFileLogs(const std::string log_name) void EQEmuLogSys::StartFileLogs(const std::string log_name)
@ -276,4 +276,7 @@ void EQEmuLogSys::StartFileLogs(const std::string log_name)
EQEmuLogSys::MakeDirectory("logs/zone"); EQEmuLogSys::MakeDirectory("logs/zone");
process_log.open(StringFormat("logs/zone/%s.txt", log_name.c_str()), std::ios_base::app | std::ios_base::out); process_log.open(StringFormat("logs/zone/%s.txt", log_name.c_str()), std::ios_base::app | std::ios_base::out);
} }
else{
}
} }

View File

@ -48,7 +48,7 @@
#include "../common/string_util.h" #include "../common/string_util.h"
#include "../common/servertalk.h" #include "../common/servertalk.h"
Database::Database () QSDatabase::QSDatabase ()
{ {
DBInitVars(); DBInitVars();
} }
@ -57,13 +57,13 @@ Database::Database ()
Establish a connection to a mysql database with the supplied parameters Establish a connection to a mysql database with the supplied parameters
*/ */
Database::Database(const char* host, const char* user, const char* passwd, const char* database, uint32 port) QSDatabase::QSDatabase(const char* host, const char* user, const char* passwd, const char* database, uint32 port)
{ {
DBInitVars(); DBInitVars();
Connect(host, user, passwd, database, port); Connect(host, user, passwd, database, port);
} }
bool Database::Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port) bool QSDatabase::Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port)
{ {
uint32 errnum= 0; uint32 errnum= 0;
char errbuf[MYSQL_ERRMSG_SIZE]; char errbuf[MYSQL_ERRMSG_SIZE];
@ -81,24 +81,24 @@ bool Database::Connect(const char* host, const char* user, const char* passwd, c
} }
} }
void Database::DBInitVars() { void QSDatabase::DBInitVars() {
} }
void Database::HandleMysqlError(uint32 errnum) { void QSDatabase::HandleMysqlError(uint32 errnum) {
} }
/* /*
Close the connection to the database Close the connection to the database
*/ */
Database::~Database() QSDatabase::~QSDatabase()
{ {
} }
void Database::AddSpeech(const char* from, const char* to, const char* message, uint16 minstatus, uint32 guilddbid, uint8 type) { void QSDatabase::AddSpeech(const char* from, const char* to, const char* message, uint16 minstatus, uint32 guilddbid, uint8 type) {
char *escapedFrom = new char[strlen(from) * 2 + 1]; char *escapedFrom = new char[strlen(from) * 2 + 1];
char *escapedTo = new char[strlen(to) * 2 + 1]; char *escapedTo = new char[strlen(to) * 2 + 1];
@ -123,7 +123,7 @@ void Database::AddSpeech(const char* from, const char* to, const char* message,
} }
void Database::LogPlayerTrade(QSPlayerLogTrade_Struct* QS, uint32 detailCount) { void QSDatabase::LogPlayerTrade(QSPlayerLogTrade_Struct* QS, uint32 detailCount) {
std::string query = StringFormat("INSERT INTO `qs_player_trade_record` SET `time` = NOW(), " std::string query = StringFormat("INSERT INTO `qs_player_trade_record` SET `time` = NOW(), "
"`char1_id` = '%i', `char1_pp` = '%i', `char1_gp` = '%i', " "`char1_id` = '%i', `char1_pp` = '%i', `char1_gp` = '%i', "
@ -164,7 +164,7 @@ void Database::LogPlayerTrade(QSPlayerLogTrade_Struct* QS, uint32 detailCount) {
} }
void Database::LogPlayerHandin(QSPlayerLogHandin_Struct* QS, uint32 detailCount) { void QSDatabase::LogPlayerHandin(QSPlayerLogHandin_Struct* QS, uint32 detailCount) {
std::string query = StringFormat("INSERT INTO `qs_player_handin_record` SET `time` = NOW(), " std::string query = StringFormat("INSERT INTO `qs_player_handin_record` SET `time` = NOW(), "
"`quest_id` = '%i', `char_id` = '%i', `char_pp` = '%i', " "`quest_id` = '%i', `char_id` = '%i', `char_pp` = '%i', "
@ -205,7 +205,7 @@ void Database::LogPlayerHandin(QSPlayerLogHandin_Struct* QS, uint32 detailCount)
} }
void Database::LogPlayerNPCKill(QSPlayerLogNPCKill_Struct* QS, uint32 members){ void QSDatabase::LogPlayerNPCKill(QSPlayerLogNPCKill_Struct* QS, uint32 members){
std::string query = StringFormat("INSERT INTO `qs_player_npc_kill_record` " std::string query = StringFormat("INSERT INTO `qs_player_npc_kill_record` "
"SET `npc_id` = '%i', `type` = '%i', " "SET `npc_id` = '%i', `type` = '%i', "
@ -236,7 +236,7 @@ void Database::LogPlayerNPCKill(QSPlayerLogNPCKill_Struct* QS, uint32 members){
} }
void Database::LogPlayerDelete(QSPlayerLogDelete_Struct* QS, uint32 items) { void QSDatabase::LogPlayerDelete(QSPlayerLogDelete_Struct* QS, uint32 items) {
std::string query = StringFormat("INSERT INTO `qs_player_delete_record` SET `time` = NOW(), " std::string query = StringFormat("INSERT INTO `qs_player_delete_record` SET `time` = NOW(), "
"`char_id` = '%i', `stack_size` = '%i', `char_items` = '%i'", "`char_id` = '%i', `stack_size` = '%i', `char_items` = '%i'",
@ -269,7 +269,7 @@ void Database::LogPlayerDelete(QSPlayerLogDelete_Struct* QS, uint32 items) {
} }
void Database::LogPlayerMove(QSPlayerLogMove_Struct* QS, uint32 items) { void QSDatabase::LogPlayerMove(QSPlayerLogMove_Struct* QS, uint32 items) {
/* These are item moves */ /* These are item moves */
std::string query = StringFormat("INSERT INTO `qs_player_move_record` SET `time` = NOW(), " std::string query = StringFormat("INSERT INTO `qs_player_move_record` SET `time` = NOW(), "
@ -305,7 +305,7 @@ void Database::LogPlayerMove(QSPlayerLogMove_Struct* QS, uint32 items) {
} }
void Database::LogMerchantTransaction(QSMerchantLogTransaction_Struct* QS, uint32 items) { void QSDatabase::LogMerchantTransaction(QSMerchantLogTransaction_Struct* QS, uint32 items) {
/* Merchant transactions are from the perspective of the merchant, not the player -U */ /* Merchant transactions are from the perspective of the merchant, not the player -U */
std::string query = StringFormat("INSERT INTO `qs_merchant_transaction_record` SET `time` = NOW(), " std::string query = StringFormat("INSERT INTO `qs_merchant_transaction_record` SET `time` = NOW(), "
"`zone_id` = '%i', `merchant_id` = '%i', `merchant_pp` = '%i', " "`zone_id` = '%i', `merchant_id` = '%i', `merchant_pp` = '%i', "
@ -346,7 +346,7 @@ void Database::LogMerchantTransaction(QSMerchantLogTransaction_Struct* QS, uint3
} }
void Database::GeneralQueryReceive(ServerPacket *pack) { void QSDatabase::GeneralQueryReceive(ServerPacket *pack) {
/* /*
These are general queries passed from anywhere in zone instead of packing structures and breaking them down again and again These are general queries passed from anywhere in zone instead of packing structures and breaking them down again and again
*/ */

View File

@ -35,12 +35,12 @@
//atoi is not uint32 or uint32 safe!!!! //atoi is not uint32 or uint32 safe!!!!
#define atoul(str) strtoul(str, nullptr, 10) #define atoul(str) strtoul(str, nullptr, 10)
class Database : public DBcore { class QSDatabase : public DBcore {
public: public:
Database(); QSDatabase();
Database(const char* host, const char* user, const char* passwd, const char* database,uint32 port); QSDatabase(const char* host, const char* user, const char* passwd, const char* database,uint32 port);
bool Connect(const char* host, const char* user, const char* passwd, const char* database,uint32 port); bool Connect(const char* host, const char* user, const char* passwd, const char* database,uint32 port);
~Database(); ~QSDatabase();
void AddSpeech(const char* from, const char* to, const char* message, uint16 minstatus, uint32 guilddbid, uint8 type); void AddSpeech(const char* from, const char* to, const char* message, uint16 minstatus, uint32 guilddbid, uint8 type);
void LogPlayerTrade(QSPlayerLogTrade_Struct* QS, uint32 DetailCount); void LogPlayerTrade(QSPlayerLogTrade_Struct* QS, uint32 DetailCount);

View File

@ -8,7 +8,7 @@
#include "../common/rulesys.h" #include "../common/rulesys.h"
extern WorldServer *worldserver; extern WorldServer *worldserver;
extern Database database; extern QSDatabase qs_database;
PlayerLookingForGuild::PlayerLookingForGuild(char *Name, char *Comments, uint32 Level, uint32 Class, uint32 AACount, uint32 Timezone, uint32 TimePosted) PlayerLookingForGuild::PlayerLookingForGuild(char *Name, char *Comments, uint32 Level, uint32 Class, uint32 AACount, uint32 Timezone, uint32 TimePosted)
{ {
@ -38,7 +38,7 @@ bool LFGuildManager::LoadDatabase()
std::string query = "SELECT `type`,`name`,`comment`, " std::string query = "SELECT `type`,`name`,`comment`, "
"`fromlevel`, `tolevel`, `classes`, " "`fromlevel`, `tolevel`, `classes`, "
"`aacount`, `timezone`, `timeposted` FROM `lfguild`"; "`aacount`, `timezone`, `timeposted` FROM `lfguild`";
auto results = database.QueryDatabase(query); auto results = qs_database.QueryDatabase(query);
if (!results.Success()) { if (!results.Success()) {
return false; return false;
} }
@ -239,7 +239,7 @@ void LFGuildManager::TogglePlayer(uint32 FromZoneID, uint32 FromInstanceID, char
} }
std::string query = StringFormat("DELETE FROM `lfguild` WHERE `type` = 0 AND `name` = '%s'", From); std::string query = StringFormat("DELETE FROM `lfguild` WHERE `type` = 0 AND `name` = '%s'", From);
auto results = database.QueryDatabase(query); auto results = qs_database.QueryDatabase(query);
uint32 Now = time(nullptr); uint32 Now = time(nullptr);
@ -252,7 +252,7 @@ void LFGuildManager::TogglePlayer(uint32 FromZoneID, uint32 FromInstanceID, char
"`classes`, `aacount`, `timezone`, `timeposted`) " "`classes`, `aacount`, `timezone`, `timeposted`) "
"VALUES (0, '%s', '%s', %u, 0, %u, %u, %u, %u)", "VALUES (0, '%s', '%s', %u, 0, %u, %u, %u, %u)",
From, Comments, Level, Class, AAPoints, TimeZone, Now); From, Comments, Level, Class, AAPoints, TimeZone, Now);
auto results = database.QueryDatabase(query); auto results = qs_database.QueryDatabase(query);
} }
ServerPacket *pack = new ServerPacket(ServerOP_QueryServGeneric, strlen(From) + strlen(Comments) + 30); ServerPacket *pack = new ServerPacket(ServerOP_QueryServGeneric, strlen(From) + strlen(Comments) + 30);
@ -281,7 +281,7 @@ void LFGuildManager::ToggleGuild(uint32 FromZoneID, uint32 FromInstanceID, char
} }
std::string query = StringFormat("DELETE FROM `lfguild` WHERE `type` = 1 AND `name` = '%s'", GuildName); std::string query = StringFormat("DELETE FROM `lfguild` WHERE `type` = 1 AND `name` = '%s'", GuildName);
auto results = database.QueryDatabase(query); auto results = qs_database.QueryDatabase(query);
uint32 Now = time(nullptr); uint32 Now = time(nullptr);
@ -296,7 +296,7 @@ void LFGuildManager::ToggleGuild(uint32 FromZoneID, uint32 FromInstanceID, char
"VALUES (1, '%s', '%s', %u, %u, %u, %u, %u, %u)", "VALUES (1, '%s', '%s', %u, %u, %u, %u, %u, %u)",
GuildName, Comments, FromLevel, ToLevel, GuildName, Comments, FromLevel, ToLevel,
Classes, AACount, TimeZone, Now); Classes, AACount, TimeZone, Now);
auto results = database.QueryDatabase(query); auto results = qs_database.QueryDatabase(query);
} }
@ -324,7 +324,7 @@ void LFGuildManager::ExpireEntries()
continue; continue;
std::string query = StringFormat("DELETE from `lfguild` WHERE `type` = 0 AND `name` = '%s'", (*it).Name.c_str()); std::string query = StringFormat("DELETE from `lfguild` WHERE `type` = 0 AND `name` = '%s'", (*it).Name.c_str());
auto results = database.QueryDatabase(query); auto results = qs_database.QueryDatabase(query);
if(!results.Success()) if(!results.Success())
it = Players.erase(it); it = Players.erase(it);
@ -336,7 +336,7 @@ void LFGuildManager::ExpireEntries()
continue; continue;
std::string query = StringFormat("DELETE from `lfguild` WHERE `type` = 1 AND `name` = '%s'", (*it2).Name.c_str()); std::string query = StringFormat("DELETE from `lfguild` WHERE `type` = 1 AND `name` = '%s'", (*it2).Name.c_str());
auto results = database.QueryDatabase(query); auto results = qs_database.QueryDatabase(query);
if(!results.Success()) if(!results.Success())
it2 = Guilds.erase(it2); it2 = Guilds.erase(it2);

View File

@ -17,6 +17,7 @@
*/ */
#include "../common/database.h"
#include "../common/global_define.h" #include "../common/global_define.h"
#include "../common/eqemu_logsys.h" #include "../common/eqemu_logsys.h"
#include "../common/opcodemgr.h" #include "../common/opcodemgr.h"
@ -36,6 +37,7 @@ volatile bool RunLoops = true;
TimeoutManager timeout_manager; TimeoutManager timeout_manager;
Database database; Database database;
QSDatabase qs_database;
LFGuildManager lfguildmanager; LFGuildManager lfguildmanager;
std::string WorldShortName; std::string WorldShortName;
const queryservconfig *Config; const queryservconfig *Config;
@ -50,7 +52,6 @@ void CatchSignal(int sig_num) {
int main() { int main() {
RegisterExecutablePlatform(ExePlatformQueryServ); RegisterExecutablePlatform(ExePlatformQueryServ);
Log.LoadLogSettingsDefaults();
set_exception_handler(); set_exception_handler();
Timer LFGuildExpireTimer(60000); Timer LFGuildExpireTimer(60000);
Timer InterserverTimer(INTERSERVER_TIMER); // does auto-reconnect Timer InterserverTimer(INTERSERVER_TIMER); // does auto-reconnect
@ -77,7 +78,7 @@ int main() {
Log.Out(Logs::Detail, Logs::QS_Server, "Connecting to MySQL..."); Log.Out(Logs::Detail, Logs::QS_Server, "Connecting to MySQL...");
/* MySQL Connection */ /* MySQL Connection */
if (!database.Connect( if (!qs_database.Connect(
Config->QSDatabaseHost.c_str(), Config->QSDatabaseHost.c_str(),
Config->QSDatabaseUsername.c_str(), Config->QSDatabaseUsername.c_str(),
Config->QSDatabasePassword.c_str(), Config->QSDatabasePassword.c_str(),
@ -87,6 +88,9 @@ int main() {
return 1; return 1;
} }
Log.LoadLogSettingsDefaults();
database.LoadLogSysSettings(Log.log_settings);
if (signal(SIGINT, CatchSignal) == SIG_ERR) { if (signal(SIGINT, CatchSignal) == SIG_ERR) {
Log.Out(Logs::Detail, Logs::QS_Server, "Could not set signal handler"); Log.Out(Logs::Detail, Logs::QS_Server, "Could not set signal handler");
return 1; return 1;

View File

@ -38,7 +38,7 @@
extern WorldServer worldserver; extern WorldServer worldserver;
extern const queryservconfig *Config; extern const queryservconfig *Config;
extern Database database; extern QSDatabase qs_database;
extern LFGuildManager lfguildmanager; extern LFGuildManager lfguildmanager;
WorldServer::WorldServer() WorldServer::WorldServer()
@ -78,42 +78,42 @@ void WorldServer::Process()
Server_Speech_Struct *SSS = (Server_Speech_Struct*)pack->pBuffer; Server_Speech_Struct *SSS = (Server_Speech_Struct*)pack->pBuffer;
std::string tmp1 = SSS->from; std::string tmp1 = SSS->from;
std::string tmp2 = SSS->to; std::string tmp2 = SSS->to;
database.AddSpeech(tmp1.c_str(), tmp2.c_str(), SSS->message, SSS->minstatus, SSS->guilddbid, SSS->type); qs_database.AddSpeech(tmp1.c_str(), tmp2.c_str(), SSS->message, SSS->minstatus, SSS->guilddbid, SSS->type);
break; break;
} }
case ServerOP_QSPlayerLogTrades: { case ServerOP_QSPlayerLogTrades: {
QSPlayerLogTrade_Struct *QS = (QSPlayerLogTrade_Struct*)pack->pBuffer; QSPlayerLogTrade_Struct *QS = (QSPlayerLogTrade_Struct*)pack->pBuffer;
database.LogPlayerTrade(QS, QS->_detail_count); qs_database.LogPlayerTrade(QS, QS->_detail_count);
break; break;
} }
case ServerOP_QSPlayerLogHandins: { case ServerOP_QSPlayerLogHandins: {
QSPlayerLogHandin_Struct *QS = (QSPlayerLogHandin_Struct*)pack->pBuffer; QSPlayerLogHandin_Struct *QS = (QSPlayerLogHandin_Struct*)pack->pBuffer;
database.LogPlayerHandin(QS, QS->_detail_count); qs_database.LogPlayerHandin(QS, QS->_detail_count);
break; break;
} }
case ServerOP_QSPlayerLogNPCKills: { case ServerOP_QSPlayerLogNPCKills: {
QSPlayerLogNPCKill_Struct *QS = (QSPlayerLogNPCKill_Struct*)pack->pBuffer; QSPlayerLogNPCKill_Struct *QS = (QSPlayerLogNPCKill_Struct*)pack->pBuffer;
uint32 Members = pack->size - sizeof(QSPlayerLogNPCKill_Struct); uint32 Members = pack->size - sizeof(QSPlayerLogNPCKill_Struct);
if (Members > 0) Members = Members / sizeof(QSPlayerLogNPCKillsPlayers_Struct); if (Members > 0) Members = Members / sizeof(QSPlayerLogNPCKillsPlayers_Struct);
database.LogPlayerNPCKill(QS, Members); qs_database.LogPlayerNPCKill(QS, Members);
break; break;
} }
case ServerOP_QSPlayerLogDeletes: { case ServerOP_QSPlayerLogDeletes: {
QSPlayerLogDelete_Struct *QS = (QSPlayerLogDelete_Struct*)pack->pBuffer; QSPlayerLogDelete_Struct *QS = (QSPlayerLogDelete_Struct*)pack->pBuffer;
uint32 Items = QS->char_count; uint32 Items = QS->char_count;
database.LogPlayerDelete(QS, Items); qs_database.LogPlayerDelete(QS, Items);
break; break;
} }
case ServerOP_QSPlayerLogMoves: { case ServerOP_QSPlayerLogMoves: {
QSPlayerLogMove_Struct *QS = (QSPlayerLogMove_Struct*)pack->pBuffer; QSPlayerLogMove_Struct *QS = (QSPlayerLogMove_Struct*)pack->pBuffer;
uint32 Items = QS->char_count; uint32 Items = QS->char_count;
database.LogPlayerMove(QS, Items); qs_database.LogPlayerMove(QS, Items);
break; break;
} }
case ServerOP_QSPlayerLogMerchantTransactions: { case ServerOP_QSPlayerLogMerchantTransactions: {
QSMerchantLogTransaction_Struct *QS = (QSMerchantLogTransaction_Struct*)pack->pBuffer; QSMerchantLogTransaction_Struct *QS = (QSMerchantLogTransaction_Struct*)pack->pBuffer;
uint32 Items = QS->char_count + QS->merchant_count; uint32 Items = QS->char_count + QS->merchant_count;
database.LogMerchantTransaction(QS, Items); qs_database.LogMerchantTransaction(QS, Items);
break; break;
} }
case ServerOP_QueryServGeneric: { case ServerOP_QueryServGeneric: {
@ -155,7 +155,7 @@ void WorldServer::Process()
} }
case ServerOP_QSSendQuery: { case ServerOP_QSSendQuery: {
/* Process all packets here */ /* Process all packets here */
database.GeneralQueryReceive(pack); qs_database.GeneralQueryReceive(pack);
break; break;
} }
} }