Thread safe /load without paramters

This commit is contained in:
Zwelf 2020-05-30 18:55:19 +02:00
parent 7514e93a8a
commit f5ebbf59b6
2 changed files with 18 additions and 21 deletions

View file

@ -1760,19 +1760,13 @@ bool CSqlScore::LoadTeamThread(CSqlServer* pSqlServer, const CSqlData<CSqlResult
void CSqlScore::GetSaves(int ClientID) void CSqlScore::GetSaves(int ClientID)
{ {
/* ExecPlayerThread(GetSavesThread, "get saves", ClientID, "", 0);
CSqlGetSavesData *Tmp = new CSqlGetSavesData();
Tmp->m_ClientID = ClientID;
Tmp->m_Name = Server()->ClientName(ClientID);
thread_init_and_detach(ExecSqlFunc, new CSqlExecData(GetSavesThread, Tmp, false), "get saves");
*/
} }
bool CSqlScore::GetSavesThread(CSqlServer* pSqlServer, const CSqlData<CSqlPlayerResult> *pGameData, bool HandleFailure) bool CSqlScore::GetSavesThread(CSqlServer* pSqlServer, const CSqlData<CSqlPlayerResult> *pGameData, bool HandleFailure)
{ {
/* const CSqlPlayerRequest *pData = dynamic_cast<const CSqlPlayerRequest *>(pGameData);
const CSqlGetSavesData *pData = dynamic_cast<const CSqlGetSavesData *>(pGameData); auto paMessages = pData->m_pResult->m_aaMessages;
if (HandleFailure) if (HandleFailure)
return true; return true;
@ -1781,7 +1775,15 @@ bool CSqlScore::GetSavesThread(CSqlServer* pSqlServer, const CSqlData<CSqlPlayer
{ {
char aBuf[512]; char aBuf[512];
str_format(aBuf, sizeof(aBuf), "SELECT count(*) as NumSaves, UNIX_TIMESTAMP(CURRENT_TIMESTAMP)-UNIX_TIMESTAMP(max(Timestamp)) as Ago FROM %s_saves WHERE Map='%s' AND Savegame regexp '\\n%s\\t';", pSqlServer->GetPrefix(), pData->m_Map.ClrStr(), pData->m_Name.ClrStr()); str_format(aBuf, sizeof(aBuf),
"SELECT COUNT(*) as NumSaves, "
"UNIX_TIMESTAMP(CURRENT_TIMESTAMP)-UNIX_TIMESTAMP(max(Timestamp)) as Ago "
"FROM %s_saves "
"WHERE Map='%s' AND Savegame regexp '\\n%s\\t';",
pSqlServer->GetPrefix(),
pData->m_Map.ClrStr(),
pData->m_RequestingPlayer.ClrStr()
);
pSqlServer->executeSqlQuery(aBuf); pSqlServer->executeSqlQuery(aBuf);
if(pSqlServer->GetResults()->next()) if(pSqlServer->GetResults()->next())
{ {
@ -1796,11 +1798,14 @@ bool CSqlScore::GetSavesThread(CSqlServer* pSqlServer, const CSqlData<CSqlPlayer
str_format(aLastSavedString, sizeof(aLastSavedString), ", last saved %s ago", aAgoString); str_format(aLastSavedString, sizeof(aLastSavedString), ", last saved %s ago", aAgoString);
} }
str_format(pData->m_pResult->m_Message, str_format(paMessages[0], sizeof(paMessages[0]),
sizeof(pData->m_pResult->m_Message), "%s has %d save%s on %s%s",
"%s has %d save%s on %s%s", pData->m_Name.Str(), NumSaves, NumSaves == 1 ? "" : "s", pData->m_Map.Str(), aLastSavedString); pData->m_RequestingPlayer.Str(),
NumSaves, NumSaves == 1 ? "" : "s",
pData->m_Map.Str(), aLastSavedString);
} }
pData->m_pResult->m_Done = true;
dbg_msg("sql", "Showing saves done"); dbg_msg("sql", "Showing saves done");
return true; return true;
} }
@ -1808,11 +1813,8 @@ bool CSqlScore::GetSavesThread(CSqlServer* pSqlServer, const CSqlData<CSqlPlayer
{ {
dbg_msg("sql", "MySQL Error: %s", e.what()); dbg_msg("sql", "MySQL Error: %s", e.what());
dbg_msg("sql", "ERROR: Could not get saves"); dbg_msg("sql", "ERROR: Could not get saves");
pData->GameServer()->SendChatTarget(pData->m_ClientID, "MySQL Error: Could not get saves");
} }
return false; return false;
*/
return false;
} }
#endif #endif

View file

@ -147,11 +147,6 @@ struct CSqlTeamLoad : CSqlData<CSqlResult>
char m_ClientName[MAX_NAME_LENGTH]; char m_ClientName[MAX_NAME_LENGTH];
}; };
struct CSqlGetSavesData: CSqlData<CSqlResult>
{
sqlstr::CSqlString<MAX_NAME_LENGTH> m_Name;
};
struct CSqlRandomMap : CSqlData<CSqlResult> struct CSqlRandomMap : CSqlData<CSqlResult>
{ {
using CSqlData::CSqlData; using CSqlData::CSqlData;