302 lines
6.1 KiB
C++
302 lines
6.1 KiB
C++
|
|
#include "Stdafx.h"
|
|||
|
|
#include "DnDummyClientMgr.h"
|
|||
|
|
#include "DnDummyInfoListCtrl.h"
|
|||
|
|
#include "DnDummyClientFrame.h"
|
|||
|
|
#include "LogWnd.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------
|
|||
|
|
DnDummyClientMgr g_DummyClientMgr;
|
|||
|
|
|
|||
|
|
DnDummyClientMgr::DnDummyClientMgr()
|
|||
|
|
{
|
|||
|
|
//_CrtSetBreakAlloc(771);
|
|||
|
|
ClearIOInfo();
|
|||
|
|
//LogWnd::CreateLog();
|
|||
|
|
|
|||
|
|
m_nMode = 0;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DnDummyClientMgr::~DnDummyClientMgr()
|
|||
|
|
{
|
|||
|
|
AllDisconnect();
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < (int)m_DummyClients.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
DnDummyClient* pDummy = m_DummyClients[i];
|
|||
|
|
if ( pDummy )
|
|||
|
|
delete pDummy;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_DummyClients.clear();
|
|||
|
|
//LogWnd::DestroyLog();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void DnDummyClientMgr::AllDisconnect()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < (int)m_DummyClients.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
DnDummyClient* pDummy = m_DummyClients[i];
|
|||
|
|
if ( pDummy )
|
|||
|
|
pDummy->Disconnect();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void DnDummyClientMgr::CreateDummy(std::vector<DnDummyClient::CreateInfo>& DummyCreateInfo)
|
|||
|
|
{
|
|||
|
|
for ( int i = 0 ; i < (int)DummyCreateInfo.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
DnDummyClient* pDummyclient = new DnDummyClient();
|
|||
|
|
pDummyclient->Create(DummyCreateInfo[i]);
|
|||
|
|
m_DummyClients.push_back(pDummyclient);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWnd::Log(1, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"));
|
|||
|
|
InitializeDummyInfoListCtrl();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void DnDummyClientMgr::InitializeDummyInfoListCtrl()
|
|||
|
|
{
|
|||
|
|
if ( !g_pDummyInfoListCtrl )
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
g_pDummyInfoListCtrl->ResetAll();
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < (int)m_DummyClients.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
g_pDummyInfoListCtrl->InsertDummyInfo(i, m_DummyClients[i]->GetProperty() );
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DnDummyClient*
|
|||
|
|
DnDummyClientMgr::GetDummyClient(int nIndex)
|
|||
|
|
{
|
|||
|
|
if ( nIndex < 0 || nIndex > (int) m_DummyClients.size() )
|
|||
|
|
return NULL;
|
|||
|
|
|
|||
|
|
|
|||
|
|
return m_DummyClients[nIndex];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
DnDummyClientMgr::UpdateDummyInfo()
|
|||
|
|
{
|
|||
|
|
for ( int i = 0 ; i < (int)m_DummyClients.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
g_pDummyInfoListCtrl->UpdateDummyInfo(i, m_DummyClients[i]->GetProperty() );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
DnDummyClientMgr::Update()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
static DWORD __nCnt = 0;
|
|||
|
|
static DWORD __nTime = GetTickCount();
|
|||
|
|
|
|||
|
|
m_nCurrentPartingUserCnt = 0;
|
|||
|
|
for ( int i = 0 ; i < (int)m_DummyClients.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
if ( m_DummyClients[i]->GetProperty().nPlayState == PlayStateInfo::PS_THINKING_PARTY )
|
|||
|
|
{
|
|||
|
|
m_nCurrentPartingUserCnt++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < (int)m_DummyClients.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
m_DummyClients[i]->Update();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
__nCnt++;
|
|||
|
|
|
|||
|
|
DWORD nCurTime = GetTickCount();
|
|||
|
|
if ( nCurTime - __nTime >= 1000 )
|
|||
|
|
{
|
|||
|
|
__nTime = nCurTime;
|
|||
|
|
LogWnd::Log(1, _T("1<EFBFBD>ʴ<EFBFBD> : %d Cnt" ), __nCnt);
|
|||
|
|
__nCnt = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
DnDummyClientMgr::DumpCurrentInfo(std::wstring& szStr)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < (int)m_DummyClients.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
//if ( m_DummyClients[i]->IsConnected() == false ) continue;
|
|||
|
|
|
|||
|
|
if ( i == 106 )
|
|||
|
|
{
|
|||
|
|
int a = 0 ;
|
|||
|
|
}
|
|||
|
|
DnDummyClient::Property& property = m_DummyClients[i]->GetProperty();
|
|||
|
|
|
|||
|
|
wxString strUserIdx = wxString::Format( _T("%d"), i);
|
|||
|
|
wxString strResponseTime = wxString::Format( _T("%d"), property.nResponseTime);
|
|||
|
|
wxString strResponseAvrTime = wxString::Format( _T("%d"), property.nResponseAvrTime);
|
|||
|
|
wxString strOnDamage = wxString::Format( _T("%d"), property.nDamageCnt);
|
|||
|
|
wxString strHit = wxString::Format( _T("%d"), property.nHitCnt);
|
|||
|
|
std::wstring strTime = GetTimeString(property.ConnectTime);
|
|||
|
|
|
|||
|
|
szStr += strUserIdx.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += gs_State[property.nConnectionState].szState.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += property.szUserID.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += property.szCharacter.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += gs_PlayState[property.nPlayState].szState.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += gs_CurrentServerInfo[property.nCurPosition].szState.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += strTime.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += strResponseTime.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += strResponseAvrTime.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += strOnDamage.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += strHit.c_str();
|
|||
|
|
szStr += L",";
|
|||
|
|
|
|||
|
|
szStr += L"\n";
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
DnDummyClientMgr::GetClientCntInfo(int& nConnected, int& nDisConnected, int& nVillageCnt, int& nGameRoomCnt, int& nGamePlayCnt )
|
|||
|
|
{
|
|||
|
|
nConnected = 0;
|
|||
|
|
nDisConnected = 0;
|
|||
|
|
nVillageCnt = 0;
|
|||
|
|
nGameRoomCnt = 0;
|
|||
|
|
nGamePlayCnt = 0;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < (int)m_DummyClients.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
if ( m_DummyClients[i]->GetProperty().nConnectionState == StateInfo::_CONNECTED )
|
|||
|
|
{
|
|||
|
|
nConnected++;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
nDisConnected++;
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int nPlayState = m_DummyClients[i]->GetProperty().nPlayState;
|
|||
|
|
|
|||
|
|
/*if ( nPlayState > PlayStateInfo::PS_NONE && nPlayState < PlayStateInfo::PS_GAME_PLAY )
|
|||
|
|
nVillageCnt++;
|
|||
|
|
|
|||
|
|
if ( nPlayState <= PlayStateInfo::PS_GAME_PLAY)
|
|||
|
|
nGamePlayCnt++;
|
|||
|
|
|
|||
|
|
if ( nPlayState == PlayStateInfo::PS_GAME_PLAY )
|
|||
|
|
{
|
|||
|
|
if ( m_DummyClients[i]->IsPartyLeader() )
|
|||
|
|
nGameRoomCnt++;
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
bool LoadDummyClientFile(const CHAR* szFileName, OUT std::vector<DnDummyClient::CreateInfo>& DummyCreateInfo)
|
|||
|
|
{
|
|||
|
|
TiXmlDocument doc;
|
|||
|
|
doc.LoadFile(szFileName, TIXML_ENCODING_UTF8 );
|
|||
|
|
|
|||
|
|
std::string msg;
|
|||
|
|
std::wstring wmsg;
|
|||
|
|
|
|||
|
|
if ( doc.Error() )
|
|||
|
|
{
|
|||
|
|
msg = "xml <20><><EFBFBD><EFBFBD> <20>Ľ<EFBFBD> <20><><EFBFBD><EFBFBD> : ";
|
|||
|
|
msg += szFileName;
|
|||
|
|
msg += " error msg : ";
|
|||
|
|
const char* errmsg = doc.ErrorDesc();
|
|||
|
|
msg += errmsg;
|
|||
|
|
|
|||
|
|
ToWideString(msg, wmsg);
|
|||
|
|
Log( wmsg.c_str() );
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TiXmlElement* pElement = NULL;
|
|||
|
|
pElement = doc.RootElement();
|
|||
|
|
|
|||
|
|
if ( !pElement )
|
|||
|
|
{
|
|||
|
|
msg = "xml <20><><EFBFBD><EFBFBD> <20>Ľ<EFBFBD> <20><><EFBFBD><EFBFBD> : ";
|
|||
|
|
msg += szFileName;
|
|||
|
|
msg += " error msg : ";
|
|||
|
|
const char* errmsg = doc.ErrorDesc();
|
|||
|
|
msg += errmsg;
|
|||
|
|
|
|||
|
|
ToWideString(msg, wmsg);
|
|||
|
|
Log( wmsg.c_str() );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TiXmlNode* pNode = pElement->FirstChild("user");
|
|||
|
|
|
|||
|
|
if ( !pNode ) return false;
|
|||
|
|
|
|||
|
|
pElement = pNode->ToElement();
|
|||
|
|
|
|||
|
|
for ( pElement ; pElement != NULL ; pElement = pElement->NextSiblingElement() )
|
|||
|
|
{
|
|||
|
|
DnDummyClient::CreateInfo info;
|
|||
|
|
|
|||
|
|
const char* szid = pElement->Attribute("id");
|
|||
|
|
const char* szpasswd = pElement->Attribute("passwd");
|
|||
|
|
const char* szChar = pElement->Attribute("character");
|
|||
|
|
const char* szExtra = pElement->Attribute("extra");
|
|||
|
|
|
|||
|
|
if ( szid == NULL || szpasswd == NULL || szChar == NULL )
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
ToWideString((CHAR*)szid, info.szUserID);
|
|||
|
|
ToWideString((CHAR*)szpasswd, info.szPasswd);
|
|||
|
|
ToWideString((CHAR*)szChar, info.szCharacter);
|
|||
|
|
|
|||
|
|
if ( szExtra )
|
|||
|
|
ToWideString((CHAR*)szExtra, info.szExtra);
|
|||
|
|
|
|||
|
|
|
|||
|
|
DummyCreateInfo.push_back(info);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_DummyClientMgr.CreateDummy(DummyCreateInfo);
|
|||
|
|
return true;
|
|||
|
|
}
|