客户端发送消息到逻辑服务器的网关,再转发消息到db服务器,接着异步返回到逻辑服务器,再返回到客户端。
本文内容:
1、客户端到逻辑服务器的请求消息
2、从数据服务器返回到逻辑服务器的响应
1、客户端到逻辑服务器的请求消息
接收处理线程的例行函数
void* ExecSockDataMgr::RecvDataProcessRoutine(ExecSockDataMgr *pRunData)
{
......
//处理客户端发送的数据包
pRunData->ProcessUserRecvPacket( pSession, pPacket->getOffsetPtr(), (int)pPacket->getAvaliableLength() );
......
}
VOID ExecSockDataMgr::ProcessUserRecvPacket(PRUNGATEUSERSESSION pSession, char *pBuffer, int nBufferSize)
{
......//检查包头校验码和消息长度
DispatchUserRecvPacket(pSession, pSession->RecvBuf.lpBuffer + sizeof(*pPackHdr), pPackHdr->wPacketSize);
......
}
网关的消息请求
VOID CLogicGate::DispatchUserRecvPacket(PRUNGATEUSERSESSION pSession, char *pBuffer, uint32 nBufferSize)
{
......
case common::NetCmd::cQueryCharList:
{
if (pSession->btUserState != eGUSSelChar)
return;
HandleUserQueryChar(pSession);
}
break;
......
}
派送消息到逻辑服务器的db连接线程
VOID CLogicGate::HandleUserQueryChar(PRUNGATEUSERSESSION pSession)
{
common::SERVERUSERHANDLE UsrHdl;//服务器间通信的用户句柄
UsrHdl.llSocket = pSession->nSocket;
UsrHdl.wUserIndex = pSession->nIndex;
UsrHdl.nVerify = pSession->nVerifyIdx;
UsrHdl.wGateIndex = m_nGateIndex;
//派送到db线程的发送请求队列
g_DBManager->requestQueryChar(&UsrHdl, pSession->nAccountId);
}