Core/Warden: Switch to multi-threaded packet processing for warden

This commit is contained in:
leak
2012-02-28 23:05:30 +01:00
parent 77c848b937
commit 66fc6482de
4 changed files with 10 additions and 16 deletions
+3 -15
View File
@@ -25,7 +25,6 @@
#include "WardenCheckMgr.h"
#include "Warden.h"
WardenCheckMgr::WardenCheckMgr()
{
}
@@ -49,17 +48,6 @@ void WardenCheckMgr::LoadWardenChecks()
return;
}
// For reload case
for (uint16 i = 0; i < CheckStore.size(); ++i)
delete CheckStore[i];
CheckStore.clear();
for (CheckResultContainer::iterator itr = CheckResultStore.begin(); itr != CheckResultStore.end(); ++itr)
delete itr->second;
CheckResultStore.clear();
QueryResult result = WorldDatabase.Query("SELECT MAX(id) FROM warden_checks");
if (!result)
@@ -166,13 +154,13 @@ void WardenCheckMgr::LoadWardenOverrides()
return;
}
Field* fields = result->Fetch();
uint32 count = 0;
ACE_WRITE_GUARD(ACE_RW_Mutex, g, _checkStoreLock);
do
{
fields = result->Fetch();
Field* fields = result->Fetch();
uint16 checkId = fields[0].GetUInt16();
uint8 action = fields[1].GetUInt8();
+2
View File
@@ -64,6 +64,8 @@ class WardenCheckMgr
void LoadWardenChecks();
void LoadWardenOverrides();
ACE_RW_Mutex _checkStoreLock;
private:
CheckContainer CheckStore;
CheckResultContainer CheckResultStore;
+4
View File
@@ -212,6 +212,8 @@ void WardenWin::RequestData()
ByteBuffer buff;
buff << uint8(WARDEN_SMSG_CHEAT_CHECKS_REQUEST);
ACE_READ_GUARD(ACE_RW_Mutex, g, sWardenCheckMgr->_checkStoreLock);
for (uint32 i = 0; i < sWorld->getIntConfig(CONFIG_WARDEN_NUM_OTHER_CHECKS); ++i)
{
// If todo list is done break loop (will be filled on next Update() run)
@@ -377,6 +379,8 @@ void WardenWin::HandleData(ByteBuffer &buff)
uint8 type;
uint16 checkFailed = 0;
ACE_READ_GUARD(ACE_RW_Mutex, g, sWardenCheckMgr->_checkStoreLock);
for (std::list<uint16>::iterator itr = _currentChecks.begin(); itr != _currentChecks.end(); ++itr)
{
rd = sWardenCheckMgr->GetWardenDataById(*itr);