bool CClientReConnectManager::DeleteIClientMessage(IClientMessage* pClientMessage) { ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_ThreadWritrLock); //将异步回调有效队列中此pClientMessage设置为无效 App_ServerMessageTask::instance()->DelClientMessage(pClientMessage); //一一寻找与之对应的连接以及相关信息并删除之 vector<CReactorClientInfo*> vecReactorClientInfo; m_objClientTCPList.Get_All_Used(vecReactorClientInfo); for(int i = 0; i < (int)vecReactorClientInfo.size(); i++) { CReactorClientInfo* pClientInfo = vecReactorClientInfo[i]; if(NULL != pClientInfo && pClientInfo->GetClientMessage() == pClientMessage) { //关闭连接,并删除对象。 //关闭链接对象 if (NULL != pClientInfo->GetConnectClient()) { pClientInfo->GetConnectClient()->ClientClose(); } char szServerID[10] = {'\0'}; sprintf_safe(szServerID, 10, "%d", pClientInfo->GetServerID()); SAFE_DELETE(pClientInfo); m_objClientTCPList.Del_Hash_Data(szServerID); return true; } } return true; }
IClientMessage* CClientReConnectManager::GetClientMessage(int nServerID) { ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_ThreadWritrLock); //查找已有连接 char szServerID[10] = {'\0'}; sprintf_safe(szServerID, 10, "%d", nServerID); CReactorClientInfo* pClientInfo = m_objClientTCPList.Get_Hash_Box_Data(szServerID); if (NULL != pClientInfo) { return pClientInfo->GetClientMessage(); } return NULL; }
IClientMessage* CClientReConnectManager::GetClientMessage(int nServerID) { ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_ThreadWritrLock); mapReactorConnectInfo::iterator f = m_mapConnectInfo.find(nServerID); if (f == m_mapConnectInfo.end()) { //如果这个链接已经存在,则不创建新的链接 return NULL; } CReactorClientInfo* pClientInfo = (CReactorClientInfo*)f->second; if (NULL != pClientInfo) { return pClientInfo->GetClientMessage(); } return NULL; }