db: use async writes for fire-and-forget queries

This commit is contained in:
server
2026-04-13 23:53:55 +02:00
parent d738743ed3
commit e1e1684454

View File

@@ -1095,13 +1095,14 @@ void CClientManager::RESULT_PRICELIST_LOAD_FOR_UPDATE(SQLMsg* pMsg)
void CClientManager::QUERY_SAFEBOX_SAVE(CPeer * pkPeer, TSafeboxTable * pTable)
{
(void)pkPeer;
char szQuery[QUERY_MAX_LEN];
snprintf(szQuery, sizeof(szQuery),
"UPDATE safebox%s SET gold='%u' WHERE account_id=%u",
GetTablePostfix(), pTable->dwGold, pTable->dwID);
CDBManager::instance().ReturnQuery(szQuery, QID_SAFEBOX_SAVE, pkPeer->GetHandle(), NULL);
CDBManager::instance().AsyncQuery(szQuery);
}
void CClientManager::QUERY_EMPIRE_SELECT(CPeer * pkPeer, DWORD dwHandle, TEmpireSelectPacket * p)
@@ -1396,6 +1397,7 @@ void CClientManager::QUERY_ITEM_FLUSH(CPeer * pkPeer, const char * c_pData)
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
{
(void)pkPeer;
TPlayerItem * p = (TPlayerItem *) c_pData;
// 창고면 캐쉬하지 않고, 캐쉬에 있던 것도 빼버려야 한다.
@@ -1450,7 +1452,7 @@ void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
p->aAttr[5].bType, p->aAttr[5].sValue,
p->aAttr[6].bType, p->aAttr[6].sValue);
CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_SAVE, pkPeer->GetHandle(), NULL);
CDBManager::instance().AsyncQuery(szQuery);
}
else
{
@@ -1695,6 +1697,7 @@ void CClientManager::UpdateItemPriceListCache()
void CClientManager::QUERY_ITEM_DESTROY(CPeer * pkPeer, const char * c_pData)
{
(void)pkPeer;
DWORD dwID = *(DWORD *) c_pData;
c_pData += sizeof(DWORD);
@@ -1708,10 +1711,7 @@ void CClientManager::QUERY_ITEM_DESTROY(CPeer * pkPeer, const char * c_pData)
if (g_log)
sys_log(0, "GD::ITEM_DESTROY: PID %u ID %u", dwPID, dwID);
if (dwPID == 0) // 아무도 가진 사람이 없었다면, 비동기 쿼리
CDBManager::instance().AsyncQuery(szQuery);
else
CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, pkPeer->GetHandle(), NULL);
CDBManager::instance().AsyncQuery(szQuery);
}
}