Example #1
0
bool CPacketParsePool::Delete(CPacketParse* pPacketParse, bool blDelete)
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

    if (NULL == pPacketParse)
    {
        OUR_DEBUG((LM_INFO, "[CPacketParsePool::Delete] pPacketParse is NULL.\n"));
        return false;
    }

    if (true == blDelete)
    {
        //清理包头和包体的内存
        if (NULL != pPacketParse->GetMessageHead())
        {
            App_MessageBlockManager::instance()->Close(pPacketParse->GetMessageHead());
        }

        if (NULL != pPacketParse->GetMessageBody())
        {
            App_MessageBlockManager::instance()->Close(pPacketParse->GetMessageBody());
        }
    }

    pPacketParse->Clear();

    return CObjectPoolManager<CPacketParse, ACE_Recursive_Thread_Mutex>::Delete(pPacketParse->GetHashID(), pPacketParse);
}
Example #2
0
void ClistManager::Add_LG_Info(uint32 u4ConnectID, uint32 u4LGID, const char* pIP, uint32 u4Port, const char* pMD5, const char* pSession, uint16 u2Version)
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

    _LG_Info* pInfo = Get_LG_Info_By_LGID(u4LGID);

    if(NULL == pInfo)
    {
        _LG_Info objNewInfo;
        objNewInfo.m_u4ConnectID = u4ConnectID;
        objNewInfo.m_u4LGID      = u4LGID;
        objNewInfo.m_u4Port      = u4Port;
        sprintf_safe(objNewInfo.m_szIP, 50, "%s", pIP);
        sprintf_safe(objNewInfo.m_szMD5, 33, "%s", pMD5);
        sprintf_safe(objNewInfo.m_szSession, 33, "%s", pSession);
        m_vecLGInfo.push_back(objNewInfo);
        objNewInfo.m_u2Version   = u2Version;
    }
    else
    {
        pInfo->m_u4ConnectID = u4ConnectID;
        pInfo->m_u4LGID      = u4LGID;
        pInfo->m_u4Port      = u4Port;
        sprintf_safe(pInfo->m_szIP, 50, "%s", pIP);
        sprintf_safe(pInfo->m_szMD5, 33, "%s", pMD5);
        sprintf_safe(pInfo->m_szSession, 33, "%s", pSession);
        pInfo->m_u2Version   = u2Version;
    }

    Compare_MD5();

    Check_LG_Target(u4ConnectID, u4LGID, pIP, u4Port);
}
Example #3
0
void ClistManager::Clear()
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

    m_vecLGInfo.clear();
    m_szMD5[0] = '\0';
}
bool CMakePacketPool::Delete(_MakePacket* pBuffPacket)
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

	if(NULL == pBuffPacket)
	{
		return false;
	}
	pBuffPacket->Clear();

	mapPacket::iterator f = m_mapPacketUsed.find(pBuffPacket);
	if(f != m_mapPacketUsed.end())
	{
		m_mapPacketUsed.erase(f);

		//添加到Free map里面
		mapPacket::iterator f = m_mapPacketFree.find(pBuffPacket);
		if(f == m_mapPacketFree.end())
		{
			m_mapPacketFree.insert(mapPacket::value_type(pBuffPacket, pBuffPacket));
		}
	}

	return true;
}
Example #5
0
bool CBuffPacketManager::Delete(IBuffPacket* pBuffPacket)
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

	CBuffPacket* pBuff = (CBuffPacket* )pBuffPacket;
	if(NULL == pBuff)
	{
		return false;
	}

	pBuffPacket->Clear();
	pBuffPacket->SetNetSort(m_blSortType);

	mapPacket::iterator f = m_mapPacketUsed.find(pBuff);
	if(f != m_mapPacketUsed.end())
	{
		m_mapPacketUsed.erase(f);

		//添加到Free map里面
		mapPacket::iterator f = m_mapPacketFree.find(pBuff);
		if(f == m_mapPacketFree.end())
		{
			m_mapPacketFree.insert(mapPacket::value_type(pBuff, pBuff));
		}
	}

	return true;
}
ACE_Message_Block* CMessageBlockManager::Create(uint32 u4Size)
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);
	ACE_Message_Block* pmb = NULL;

	if(u4Size <= 0)
	{
		//如果申请的空间为0,则直接返回空。
		return NULL;
	}

	ACE_NEW_MALLOC_NORETURN(pmb, 
		                    static_cast<ACE_Message_Block*>(m_pmsgallocator->malloc(sizeof(ACE_Message_Block))),
	 	                    ACE_Message_Block(u4Size, // size
							ACE_Message_Block::MB_DATA, // type
							0,
							0,
							m_pbuff_allocator, // allocator_strategy
							0, // locking strategy
							ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY, // priority
							ACE_Time_Value::zero,
							ACE_Time_Value::max_time,
							m_pdata_allocator,
							m_pmsgallocator
							));

	return pmb;
}
Example #7
0
bool CMessagePool::Delete(CMessage* pBuffPacket)
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

	CMessage* pBuff = (CMessage* )pBuffPacket;
	if(NULL == pBuff)
	{
		return false;
	}

	pBuffPacket->Clear();

	mapMessage::iterator f = m_mapMessageUsed.find(pBuff);
	if(f != m_mapMessageUsed.end())
	{
		m_mapMessageUsed.erase(f);

		//添加到Free map里面
		mapMessage::iterator f = m_mapMessageFree.find(pBuff);
		if(f == m_mapMessageFree.end())
		{
			m_mapMessageFree.insert(mapMessage::value_type(pBuff, pBuff));
		}
	}

	return true;
}
bool CMessageBlockManager::Close(ACE_Message_Block* pMessageBlock)
{
  ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);
  if(pMessageBlock != NULL)
  {
    pMessageBlock->release();
  }
  return true;
}
Example #9
0
_SendMessage* CSendMessagePool::Create()
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

    _SendMessage* pMessage = NULL;

    //在Hash表中弹出一个已使用的数据
    pMessage = m_objHashHandleList.Pop();

    //没找到空余的
    return pMessage;
}
Example #10
0
_LG_Info* ClistManager::Get_LG_Info_By_Index(uint32 u4Index)
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

    if(u4Index >= (uint32)m_vecLGInfo.size())
    {
        return NULL;
    }
    else
    {
        return &m_vecLGInfo[u4Index];
    }
}
Example #11
0
_LG_Info* ClistManager::Get_LG_Info_By_ConnectID(uint32 u4ConnectID)
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

    for(uint32 u4Index = 0; u4Index < (uint32)m_vecLGInfo.size(); u4Index++)
    {
        if(m_vecLGInfo[u4Index].m_u4ConnectID == u4ConnectID)
        {
            return &m_vecLGInfo[u4Index];
        }
    }

    return NULL;
}
Example #12
0
void ClistManager::Del_LG_Info_By_ConnectID(uint32 u4ConnectID)
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

    for(vecLGInfo::iterator b = m_vecLGInfo.begin(); b != m_vecLGInfo.end(); b++)
    {
        if(b->m_u4ConnectID == u4ConnectID)
        {
            m_vecLGInfo.erase(b);
            return;
        }
    }

    Compare_MD5();
}
Example #13
0
bool CSendMessagePool::Delete(_SendMessage* pObject)
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

    if(NULL == pObject)
    {
        return false;
    }

    char szHashID[10] = {'\0'};
    sprintf_safe(szHashID, 10, "%d", pObject->GetHashID());
    pObject->Clear();
    bool blState = m_objHashHandleList.Push(szHashID, pObject);

    if(false == blState)
    {
        OUR_DEBUG((LM_INFO, "[CSendMessagePool::Delete]HashID=%s(0x%08x).\n", szHashID, pObject));
    }

    return true;
}
Example #14
0
IBuffPacket* CBuffPacketManager::Create(uint32 u4BuffID)
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

	//如果free池中已经没有了,则添加到free池中。
	if(m_mapPacketFree.size() <= 0)
	{
		CBuffPacket* pBuffPacket = new CBuffPacket();

		if(pBuffPacket != NULL)
		{
			//添加到Free map里面
			mapPacket::iterator f = m_mapPacketFree.find(pBuffPacket);
			if(f == m_mapPacketFree.end())
			{
				m_mapPacketFree.insert(mapPacket::value_type(pBuffPacket, pBuffPacket));
			}
		}
		else
		{
			return NULL;
		}
	}

	//从free池中拿出一个,放入到used池中
	mapPacket::iterator itorFreeB = m_mapPacketFree.begin();
	CBuffPacket* pBuffPacket = (CBuffPacket* )itorFreeB->second;
	m_mapPacketFree.erase(itorFreeB);
	//添加到used map里面
	mapPacket::iterator f = m_mapPacketUsed.find(pBuffPacket);
	if(f == m_mapPacketUsed.end())
	{
		m_mapPacketUsed.insert(mapPacket::value_type(pBuffPacket, pBuffPacket));
	}

	pBuffPacket->SetBuffID(u4BuffID);
	return (IBuffPacket* )pBuffPacket;
}
Example #15
0
CPacketParse* CPacketParsePool::Create()
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

	//如果free池中已经没有了,则添加到free池中。
	if(m_mapPacketFree.size() <= 0)
	{
		CPacketParse* pPacket = new CPacketParse();

		if(pPacket != NULL)
		{
			//添加到Free map里面
			mapPacketParse::iterator f = m_mapPacketFree.find(pPacket);
			if(f == m_mapPacketFree.end())
			{
				m_mapPacketFree.insert(mapPacketParse::value_type(pPacket, pPacket));
			}
		}
		else
		{
			return NULL;
		}
	}

	//从free池中拿出一个,放入到used池中
	mapPacketParse::iterator itorFreeB = m_mapPacketFree.begin();
	CPacketParse* pPacket = (CPacketParse* )itorFreeB->second;
	m_mapPacketFree.erase(itorFreeB);
	//添加到used map里面
	mapPacketParse::iterator f = m_mapPacketUsed.find(pPacket);
	if(f == m_mapPacketUsed.end())
	{
		m_mapPacketUsed.insert(mapPacketParse::value_type(pPacket, pPacket));
	}

	pPacket->Init();
	return (CPacketParse* )pPacket;
}
Example #16
0
void ClistManager::Get_All_LG_List(IBuffPacket* pbpList, uint32& u4Count)
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

    if(pbpList == NULL)
    {
        return;
    }

    u4Count = Get_LG_Count();

    for(uint32 i = 0; i < u4Count; i++)
    {
        _LG_Info* pInfo = Get_LG_Info_By_Index(i);
        _VCHARS_STR strIP;
        uint8 u1Len = (uint8)strlen(pInfo->m_szIP);
        strIP.SetData(pInfo->m_szIP, u1Len);

        (*pbpList) << pInfo->m_u4LGID;
        (*pbpList) << strIP;
        (*pbpList) << pInfo->m_u4Port;
    }
}
Example #17
0
bool CCommandAccount::SaveCommandData_Mutex( uint16 u2CommandID, uint64 u8CommandCost, uint8 u1PacketType /*= PACKET_TCP*/, uint32 u4PacketSize /*= 0*/, uint32 u4CommandSize /*= 0*/, uint8 u1CommandType /*= COMMAND_TYPE_IN*/, ACE_Time_Value tvTime /*= ACE_OS::gettimeofday()*/ )
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

	//统计数据到达时间,是否已经超越了限定的阀值,如果超越了,写入日志。
	if(m_u8PacketTimeout < u8CommandCost)
	{
		//记录超时的命令
		_CommandTimeOut objCommandTimeOut;
		objCommandTimeOut.m_u2CommandID   = u2CommandID;
		objCommandTimeOut.m_u4TimeOutTime = (uint32)(u8CommandCost);  //转换为毫秒
		m_vecCommandTimeOut.push_back(objCommandTimeOut);
		AppLogManager::instance()->WriteLog(LOG_SYSTEM_PACKETTIME, "u2CommandID=%d, Timeout=[%d].", u2CommandID, (uint32)u8CommandCost);
	}

	//如果流量开关打开,则记录流量(单位是分钟)
	if(m_u1Flow == 1)
	{
		ACE_Time_Value tvNow = ACE_OS::gettimeofday();
		ACE_Date_Time dtNowTime(tvNow);
		uint8 u1Minute = (uint8)dtNowTime.minute();
		if(m_u1Minute != u1Minute)
		{
			m_u4PrvFlowIn  = m_u4FlowIn;
			m_u4PrvFlowOut = m_u4FlowOut;

			if(u1CommandType == COMMAND_TYPE_IN)
			{
				m_u4FlowIn  = u4PacketSize;
				m_u4FlowOut = 0;
			}
			else
			{
				m_u4FlowIn  = 0;
				m_u4FlowOut = u4PacketSize;
			}

			m_u1Minute         = u1Minute;  
		}
		else
		{
			if(u1CommandType == COMMAND_TYPE_IN)
			{
				m_u4FlowIn += u4PacketSize;
			}
			else
			{
				m_u4FlowOut += u4PacketSize;
			}
		}
	}

	//如果统计开关打开,才开始记录统计信息
	if(m_u1CommandAccount == 0)
	{
		return true;
	}

	//查找并添加
	mapCommandDataList::iterator f = m_mapCommandDataList.find(u2CommandID);
	if(f != m_mapCommandDataList.end())
	{
		//如果已经存在,则直接添加
		_CommandData* pCommandData = (_CommandData* )f->second;
		if(pCommandData != NULL)
		{
			pCommandData->m_u4CommandCount++;
			pCommandData->m_u8CommandCost += u8CommandCost;
			pCommandData->m_u1PacketType  = u1PacketType;
			pCommandData->m_u4PacketSize  += u4PacketSize;
			pCommandData->m_u4CommandSize += u4CommandSize;
			pCommandData->m_tvCommandTime = tvTime;
		}
		else
		{
			return false;
		}
	}
	else
	{
		//添加新的命令统计信息
		_CommandData* pCommandData =  new _CommandData();
		if(pCommandData != NULL)
		{
			pCommandData->m_u2CommandID   = u2CommandID;
			pCommandData->m_u1CommandType = u1CommandType;
			pCommandData->m_u8CommandCost = u8CommandCost;
			pCommandData->m_u1PacketType  = u1PacketType;
			pCommandData->m_u4PacketSize  += u4PacketSize;
			pCommandData->m_u4CommandSize += u4CommandSize;
			pCommandData->m_tvCommandTime = tvTime;

			m_mapCommandDataList.insert(mapCommandDataList::value_type(u2CommandID, pCommandData));
		}
		else
		{
			return false;
		}
	}
	return true;
}
Example #18
0
int32 CSendMessagePool::GetFreeCount()
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

    return m_objHashHandleList.Get_Used_Count();
}
int CMakePacketPool::GetUsedCount()
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

	return (int)m_mapPacketUsed.size();
}
Example #20
0
char* ClistManager::Get_MD5_Data()
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

    return (char* )m_szMD5;
}
Example #21
0
int CPacketParsePool::GetFreeCount()
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);
    return  CObjectPoolManager<CPacketParse, ACE_Recursive_Thread_Mutex>::GetFreeCount();
}
Example #22
0
uint32 ClistManager::Get_LG_Count()
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);

    return (uint32)m_vecLGInfo.size();
}
Example #23
0
CPacketParse* CPacketParsePool::Create(const char* pFileName, uint32 u4Line)
{
    ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);
    return CObjectPoolManager<CPacketParse, ACE_Recursive_Thread_Mutex>::Create(pFileName, u4Line);
}
Example #24
0
int CMessagePool::GetFreeCount()
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

	return (int)m_mapMessageFree.size();
}
Example #25
0
int CPacketParsePool::GetFreeCount()
{
	ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);

	return (int)m_mapPacketFree.size();
}