#include "stdafx.h" #include "RYL_ServerRequestKeeper.h" #include #include CServerRequestKeeper::CServerRequestKeeper() : m_RequestKey(0) { } CServerRequestKeeper::~CServerRequestKeeper() { CCSLock::Syncronize sync(m_RequestMapLock); m_RequestMap.clear(); } unsigned long CServerRequestKeeper::Push(CPacketDispatch* lpPacketDispatch, unsigned long dwClientRequest) { CCSLock::Syncronize sync(m_RequestMapLock); m_RequestMap.insert(std::make_pair(++m_RequestKey, RequestInfo(dwClientRequest, lpPacketDispatch))); return m_RequestKey; } bool CServerRequestKeeper::Pop(unsigned long dwRequestKey) { CCSLock::Syncronize sync(m_RequestMapLock); std::pair itrs = m_RequestMap.equal_range(dwRequestKey); for(; itrs.first != itrs.second; ++itrs.first) { m_RequestMap.erase(itrs.first); return true; } return false; } bool CServerRequestKeeper::GetRequest(unsigned long dwRequestKey, CServerRequestKeeper::RequestInfo& Out_Info) { CCSLock::Syncronize sync(m_RequestMapLock); std::pair itrs = m_RequestMap.equal_range(dwRequestKey); for(; itrs.first != itrs.second; ++itrs.first) { Out_Info = itrs.first->second; return true; } return false; } // ÇØ´ç ClientDispatch°¡ ¼Ò¸êÇßÀ»°æ¿ì¸¦ ´ëºñÇÏ¿© ¼Ò¸êÀÚ¿¡ À̳༮À» Ãß°¡½ÃÄѳõÀÚ... void CServerRequestKeeper::RemoveAllSelectDispatch(CPacketDispatch* lpPacketDispatch) { CCSLock::Syncronize sync(m_RequestMapLock); isMapReqMap::iterator itr = m_RequestMap.begin(); for(; itr != m_RequestMap.end(); ) { RequestInfo& Info = itr->second; if(lpPacketDispatch == Info.m_lpPacketDispatch) { m_RequestMap.erase(itr++); } else { ++itr; } } }