Files
mir_server/server/LogicServer/logicclient/CommonClient.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

86 lines
1.7 KiB
C++

#include "StdAfx.h"
using namespace jxSrvDef;
CCommonClient::CCommonClient()
{
SetClientName(_T("普通逻辑"));
m_vFreeList.setLock(&m_vFreeListLock);
}
CCommonClient::~CCommonClient()
{
m_vFreeList.flush();
for (INT_PTR i = 0; i < m_vFreeList.count(); i++)
{
CDataPacket* dp = m_vFreeList[i];
if(dp) {
dp->setPosition(0);
flushSendPacket(*dp);
}
}
m_vFreeList.clear();
}
VOID CCommonClient::OnDispatchRecvPacket(const jxSrvDef::INTERSRVCMD nCmd, CDataPacketReader &inPacket)
{
if (nCmd <= 0)
{
if(nCmd <0)
{
OutputMsg(rmWaning, _T("%s recv unknown msg[id=%d]"), __FUNCTION__, (int)nCmd);
}
return;
}
CDataPacket *outPacket = AllocSendPacket();
if (!outPacket)
{
OutputMsg(rmError, _T("%s Alloc Packet Failed"), __FUNCTION__);
return;
}
outPacket->writeBuf(inPacket.getOffsetPtr(), inPacket.getAvaliableLength());
GetGlobalLogicEngine()->GetNetWorkHandle()->PostInternalMessage(
SSM_COMMONLOGIC_2_LOGIC_DATA, // 公共服务器 -> 逻辑服务器
nCmd, // 消息ID
(INT_PTR)outPacket); // 消息数据
}
jxSrvDef::SERVERTYPE CCommonClient::getLocalServerType()
{
return jxSrvDef::GameServer;
}
LPCSTR CCommonClient::getLocalServerName()
{
return GetLogicServer()->getServerName();
}
int CCommonClient::getLocalServerIndex()
{
return GetLogicServer()->GetServerIndex();
}
CDataPacket* CCommonClient::AllocSendPacket()
{
if (m_vFreeList.count() <= 0)
{
m_vFreeList.flush();
}
if (m_vFreeList.count() <= 0)
{
allocSendPacketList(m_vFreeList,512);
}
CDataPacket* m_TempData = m_vFreeList.pop();
m_TempData->setLength(0);
return m_TempData;
}
void CCommonClient::FreeBackUserDataPacket(CDataPacket *pPacket)
{
m_vFreeList.append(pPacket);
}