DragonNest/Server/ServiceMonitorEx/Source/ConnectionInfoMngr.cpp

124 lines
3 KiB
C++
Raw Permalink Normal View History

#include "Stdafx.h"
#include "ConnectionInfoMngr.h"
#include "XMLParser.h"
#include "NetConnection.h"
#include "ServiceMonitor.h"
#include "MainFrm.h"
#include "BasePartitionView.h"
DEFINE_SINGLETON_CLASS(CConnectionInfoMngr);
CConnectionInfoMngr::CConnectionInfoMngr()
{
}
bool CConnectionInfoMngr::LoadData ()
{
m_vConnectionList.clear();
CXMLParser parser;
if (parser.Open("ConnectionList.xml") == false)
return false;
if (parser.FirstChildElement("ConnectionList", true))
{
if (parser.FirstChildElement("Connection") == true)
{
do {
stConnectionInfo ConInfo;
memset(&ConInfo, 0, sizeof(ConInfo));
WCHAR wszTemp[1024];
wcscpy_s(wszTemp, NAMELENMAX, parser.GetAttribute("UserName"));
WideCharToMultiByte(CP_ACP, 0, wszTemp, -1, ConInfo.szUserName, NAMELENMAX, NULL, NULL);
wcscpy_s(wszTemp, NAMELENMAX, parser.GetAttribute("PasswordId"));
WideCharToMultiByte(CP_ACP, 0, wszTemp, -1, ConInfo.szPassWord, NAMELENMAX, NULL, NULL);
wcscpy_s(wszTemp, IPLENMAX, parser.GetAttribute("IP"));
WideCharToMultiByte(CP_ACP, 0, wszTemp, -1, ConInfo.szIpAddress, IPLENMAX, NULL, NULL);
ConInfo.wPort = (WORD)_tstoi(parser.GetAttribute("Port"));
ConInfo.nConID = inet_addr((char*)ConInfo.szIpAddress);
m_vConnectionList.push_back(ConInfo);
} while (parser.NextSiblingElement("Connection"));
}
}
return true;
}
void CConnectionInfoMngr::ConnectToServerManager ()
{
stConnectionInfo ConInfo = {0,};
for (int i=0; i<(int)m_vConnectionList.size(); i++)
{
ConInfo = m_vConnectionList[i];
CNetConnection* pNetConnection = CNetConnectionMgr::GetInstancePtr()->GetConnection (ConInfo.nConID);
if (pNetConnection) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
CNetSession* pNetSession = pNetConnection->GetSession();
if (!pNetSession)
continue;
DWORD dwRetVal = pNetSession->Connect(ConInfo.nConID, ConInfo.wPort);
if (NOERROR != dwRetVal)
continue;
}
else // <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD>
{
// <20>Ʒ<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5>մϴ<D5B4>.
pNetConnection = CNetConnectionMgr::GetInstancePtr()->CreateConnection();
if (!pNetConnection)
continue;
CNetSession* pNetSession = pNetConnection->GetSession();
if (!pNetSession)
continue;
CMainFrame* pMainFrame = static_cast<CServiceMonitorApp*>(::AfxGetApp())->GetMainFrame();
if (!pMainFrame)
continue;
CBasePartitionView* pPartitionView = pMainFrame->AddPartition (pNetConnection, ConInfo.nConID);
if (!pPartitionView)
continue;
DWORD dwRetVal = pNetSession->Connect(ConInfo.nConID, ConInfo.wPort);
if (NOERROR != dwRetVal)
continue;
// Ŀ<><C4BF><EFBFBD>Ǿ<EFBFBD><C7BE>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>
pPartitionView->SetConnectionID(ConInfo.nConID);
// Ŀ<>ؼǵ<D8BC><C7B5><EFBFBD>
CNetConnectionMgr::GetInstancePtr()->RegistConnection (pNetConnection);
}
}
}
bool CConnectionInfoMngr::GetConInfo (UINT nConID, stConnectionInfo& ConInfo)
{
for (size_t i=0; i<m_vConnectionList.size(); i++)
{
if (m_vConnectionList[i].nConID == nConID)
{
ConInfo = m_vConnectionList[i];
return true;
}
}
return false;
}