Files
wnmj/Servers/服务器组件/协调服务器/AttemperEngineSink.cpp

970 lines
28 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "StdAfx.h"
#include "ServiceUnits.h"
#include "ControlPacket.h"
#include "AttemperEngineSink.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CAttemperEngineSink::CAttemperEngineSink()
{
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
m_wCollectItem=INVALID_WORD;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_pInitParameter=NULL;
m_pBindParameter=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pITimerEngine=NULL;
m_pITCPNetworkEngine=NULL;
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAttemperEngineSink::~CAttemperEngineSink()
{
}
//<2F>ӿڲ<D3BF>ѯ
VOID * CAttemperEngineSink::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
{
QUERYINTERFACE(IAttemperEngineSink,Guid,dwQueryVer);
QUERYINTERFACE_IUNKNOWNEX(IAttemperEngineSink,Guid,dwQueryVer);
return NULL;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool CAttemperEngineSink::OnAttemperEngineStart(IUnknownEx * pIUnknownEx)
{
//<2F>󶨲<EFBFBD><F3B6A8B2><EFBFBD>
m_pBindParameter=new tagBindParameter[m_pInitParameter->m_wMaxConnect];
ZeroMemory(m_pBindParameter,sizeof(tagBindParameter)*m_pInitParameter->m_wMaxConnect);
return true;
}
//ֹͣ<CDA3>¼<EFBFBD>
bool CAttemperEngineSink::OnAttemperEngineConclude(IUnknownEx * pIUnknownEx)
{
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
m_wCollectItem=INVALID_WORD;
m_WaitCollectItemArray.RemoveAll();
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_pITimerEngine=NULL;
m_pITCPNetworkEngine=NULL;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SafeDeleteArray(m_pBindParameter);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_GlobalInfoManager.ResetData();
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool CAttemperEngineSink::OnEventControl(WORD wIdentifier, VOID * pData, WORD wDataSize)
{
switch (wIdentifier)
{
case CT_MAINTAIN_SERVICE:
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize == sizeof(BYTE));
if (wDataSize != sizeof(BYTE)) return false;
BYTE cbFlag = *(BYTE*)pData;
return true;
}
case CT_SEND_SYSTEM_MESSAGE:
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize == sizeof(CMD_CM_SystemMessage));
if (wDataSize != sizeof(CMD_CM_SystemMessage)) return false;
CMD_CM_SystemMessage* pMessage = (CMD_CM_SystemMessage*)pData;
//<2F><><EFBFBD><EFBFBD>֪ͨ
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_MANAGER_SERVICE, SUB_CS_S_GAME_MESSAGE, pData, wDataSize, 0L);
return true;
}
}
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool CAttemperEngineSink::OnEventAttemperData(WORD wRequestID, VOID * pData, WORD wDataSize)
{
return false;
}
//ʱ<><CAB1><EFBFBD>¼<EFBFBD>
bool CAttemperEngineSink::OnEventTimer(DWORD dwTimerID, WPARAM wBindParam)
{
return false;
}
//Ӧ<><D3A6><EFBFBD>¼<EFBFBD>
bool CAttemperEngineSink::OnEventTCPNetworkBind(DWORD dwClientAddr, DWORD dwSocketID)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
ASSERT(LOWORD(dwSocketID)<m_pInitParameter->m_wMaxConnect);
if (LOWORD(dwSocketID)>=m_pInitParameter->m_wMaxConnect) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
pBindParameter->dwSocketID=dwSocketID;
pBindParameter->dwClientAddr=dwClientAddr;
pBindParameter->dwActiveTime=(DWORD)time(NULL);
return true;
}
//<2F><>ȡ<EFBFBD>¼<EFBFBD>
bool CAttemperEngineSink::OnEventTCPNetworkRead(TCP_Command Command, VOID * pData, WORD wDataSize, DWORD dwSocketID)
{
switch (Command.wMainCmdID)
{
case MDM_CS_REGISTER: //<2F><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
{
return OnTCPNetworkMainRegister(Command.wSubCmdID,pData,wDataSize,dwSocketID);
}
case MDM_CS_SERVICE_INFO: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
return OnTCPNetworkMainServiceInfo(Command.wSubCmdID,pData,wDataSize,dwSocketID);
}
case MDM_CS_USER_COLLECT: //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
{
return OnTCPNetworkMainUserCollect(Command.wSubCmdID,pData,wDataSize,dwSocketID);
}
case MDM_CS_REMOTE_SERVICE: //Զ<>̷<EFBFBD><CCB7><EFBFBD>
{
return OnTCPNetworkMainRemoteService(Command.wSubCmdID,pData,wDataSize,dwSocketID);
}
case MDM_CS_MANAGER_SERVICE: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return OnTCPNetworkMainManagerService(Command.wSubCmdID,pData,wDataSize,dwSocketID);
}
case MDM_CS_WEB_SERVICE: //<2F><>վ<EFBFBD><D5BE><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>
{
return OnTCPNetworkMainWebService(Command.wSubCmdID, pData, wDataSize, dwSocketID);
}
}
return false;
}
//<2F>ر<EFBFBD><D8B1>¼<EFBFBD>
bool CAttemperEngineSink::OnEventTCPNetworkShut(DWORD dwClientAddr, DWORD dwActiveTime, DWORD dwSocketID)
{
//<2F><>ȡ<EFBFBD><C8A1>Ϣ
WORD wBindIndex=LOWORD(dwSocketID);
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
if (pBindParameter->ServiceKind==ServiceKind_Game)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
//<2F><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
if (wBindIndex==m_wCollectItem)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_wCollectItem=INVALID_WORD;
//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
if (m_WaitCollectItemArray.GetCount()>0)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
INT_PTR nWaitCount=m_WaitCollectItemArray.GetCount();
m_wCollectItem=m_WaitCollectItemArray[nWaitCount-1];
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_WaitCollectItemArray.RemoveAt(nWaitCount-1);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
DWORD dwSocketID=(m_pBindParameter+m_wCollectItem)->dwSocketID;
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_USER_COLLECT,SUB_CS_S_COLLECT_REQUEST);
}
}
else
{
//ɾ<><C9BE><EFBFBD>ȴ<EFBFBD>
for (INT_PTR i=0;i<m_WaitCollectItemArray.GetCount();i++)
{
if (wBindIndex==m_WaitCollectItemArray[i])
{
m_WaitCollectItemArray.RemoveAt(i);
break;
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_CS_S_ServerRemove ServerRemove;
ZeroMemory(&ServerRemove,sizeof(ServerRemove));
//ɾ<><C9BE>֪ͨ
ServerRemove.wServerID=pBindParameter->wServiceID;
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_SERVICE_INFO,SUB_CS_S_SERVER_REMOVE,&ServerRemove,sizeof(ServerRemove),0L);
//ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_GlobalInfoManager.DeleteServerItem(pBindParameter->wServiceID);
}
//<2F><EFBFBD><E3B3A1><EFBFBD><EFBFBD>
if (pBindParameter->ServiceKind==ServiceKind_Plaza)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_GlobalInfoManager.DeletePlazaItem(pBindParameter->wServiceID);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
ZeroMemory(pBindParameter,sizeof(tagBindParameter));
return false;
}
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
bool CAttemperEngineSink::OnEventDataBase(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize)
{
return false;
}
//<2F>ر<EFBFBD><D8B1>¼<EFBFBD>
bool CAttemperEngineSink::OnEventTCPSocketShut(WORD wServiceID, BYTE cbShutReason)
{
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool CAttemperEngineSink::OnEventTCPSocketLink(WORD wServiceID, INT nErrorCode)
{
return false;
}
//<2F><>ȡ<EFBFBD>¼<EFBFBD>
bool CAttemperEngineSink::OnEventTCPSocketRead(WORD wServiceID, TCP_Command Command, VOID * pData, WORD wDataSize)
{
return true;
}
//ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CAttemperEngineSink::OnTCPNetworkMainRegister(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
{
switch (wSubCmdID)
{
case SUB_CS_C_REGISTER_PLAZA: //ע<><D7A2><EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize==sizeof(CMD_CS_C_RegisterPlaza));
if (wDataSize!=sizeof(CMD_CS_C_RegisterPlaza)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_CS_C_RegisterPlaza * pRegisterPlaza=(CMD_CS_C_RegisterPlaza *)pData;
//<2F><>Ч<EFBFBD>ж<EFBFBD>
if ((pRegisterPlaza->szServerName[0]==0)||(pRegisterPlaza->szServerAddr[0]==0))
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_CS_S_RegisterFailure RegisterFailure;
ZeroMemory(&RegisterFailure,sizeof(RegisterFailure));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
RegisterFailure.lErrorCode=0L;
lstrcpyn(RegisterFailure.szDescribeString,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD>"),CountArray(RegisterFailure.szDescribeString));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
WORD wStringSize=CountStringBuffer(RegisterFailure.szDescribeString);
WORD wSendSize=sizeof(RegisterFailure)-sizeof(RegisterFailure.szDescribeString)+wStringSize;
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_REGISTER,SUB_CS_S_REGISTER_FAILURE,&RegisterFailure,wSendSize);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
m_pITCPNetworkEngine->ShutDownSocket(dwSocketID);
return true;
}
//<2F><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
(m_pBindParameter+wBindIndex)->wServiceID=wBindIndex;
(m_pBindParameter+wBindIndex)->ServiceKind=ServiceKind_Plaza;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGamePlaza GamePlaza;
ZeroMemory(&GamePlaza,sizeof(GamePlaza));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GamePlaza.wPlazaID=wBindIndex;
lstrcpyn(GamePlaza.szServerName,pRegisterPlaza->szServerName,CountArray(GamePlaza.szServerName));
lstrcpyn(GamePlaza.szServerAddr,pRegisterPlaza->szServerAddr,CountArray(GamePlaza.szServerAddr));
//ע<>᷿<EFBFBD><E1B7BF>
m_GlobalInfoManager.ActivePlazaItem(wBindIndex,GamePlaza);
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
SendServerListItem(dwSocketID);
SendMatchListItem(dwSocketID);
//Ⱥ<><C8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pITCPNetworkEngine->AllowBatchSend(dwSocketID,true,0L);
return true;
}
case SUB_CS_C_REGISTER_SERVER: //ע<>᷿<EFBFBD><E1B7BF>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize==sizeof(CMD_CS_C_RegisterServer));
if (wDataSize!=sizeof(CMD_CS_C_RegisterServer)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_CS_C_RegisterServer * pRegisterServer=(CMD_CS_C_RegisterServer *)pData;
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
if (m_GlobalInfoManager.SearchServerItem(pRegisterServer->wServerID)!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_CS_S_RegisterFailure RegisterFailure;
ZeroMemory(&RegisterFailure,sizeof(RegisterFailure));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
RegisterFailure.lErrorCode=0L;
lstrcpyn(RegisterFailure.szDescribeString,TEXT("<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񣬷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"),CountArray(RegisterFailure.szDescribeString));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
WORD wStringSize=CountStringBuffer(RegisterFailure.szDescribeString);
WORD wSendSize=sizeof(RegisterFailure)-sizeof(RegisterFailure.szDescribeString)+wStringSize;
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_REGISTER,SUB_CS_S_REGISTER_FAILURE,&RegisterFailure,wSendSize);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
m_pITCPNetworkEngine->ShutDownSocket(dwSocketID);
return true;
}
//<2F><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
(m_pBindParameter+wBindIndex)->ServiceKind=ServiceKind_Game;
(m_pBindParameter+wBindIndex)->wServiceID=pRegisterServer->wServerID;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameServer GameServer;
ZeroMemory(&GameServer,sizeof(GameServer));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GameServer.wKindID=pRegisterServer->wKindID;
GameServer.wNodeID=pRegisterServer->wNodeID;
GameServer.wSortID=pRegisterServer->wSortID;
GameServer.wServerID=pRegisterServer->wServerID;
//GameServer.wServerKind=pRegisterServer->wServerKind;
GameServer.wServerType=pRegisterServer->wServerType;
GameServer.wServerPort=pRegisterServer->wServerPort;
GameServer.lCellScore=pRegisterServer->lCellScore;
GameServer.lEnterScore=pRegisterServer->lEnterScore;
GameServer.dwServerRule=pRegisterServer->dwServerRule;
GameServer.dwOnLineCount=pRegisterServer->dwOnLineCount;
GameServer.dwFullCount=pRegisterServer->dwFullCount;
lstrcpyn(GameServer.szServerName,pRegisterServer->szServerName,CountArray(GameServer.szServerName));
lstrcpyn(GameServer.szServerAddr,pRegisterServer->szServerAddr,CountArray(GameServer.szServerAddr));
//ע<>᷿<EFBFBD><E1B7BF>
m_GlobalInfoManager.ActiveServerItem(wBindIndex,GameServer);
//Ⱥ<><C8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_SERVICE_INFO,SUB_CS_S_SERVER_INSERT,&GameServer,sizeof(GameServer),0L);
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
SendServerListItem(dwSocketID);
SendMatchListItem(dwSocketID);
//Ⱥ<><C8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pITCPNetworkEngine->AllowBatchSend(dwSocketID,true,0L);
//<2F><><EFBFBD><EFBFBD>֪ͨ
if (m_wCollectItem==INVALID_WORD)
{
m_wCollectItem=wBindIndex;
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_USER_COLLECT,SUB_CS_S_COLLECT_REQUEST);
}
else m_WaitCollectItemArray.Add(wBindIndex);
return true;
}
case SUB_CS_C_REGISTER_MATCH: //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize==sizeof(CMD_CS_C_RegisterMatch));
if (wDataSize!=sizeof(CMD_CS_C_RegisterMatch)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_CS_C_RegisterMatch * pRegisterMatch=(CMD_CS_C_RegisterMatch *)pData;
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
CGlobalServerItem * pGlobalServerItem = m_GlobalInfoManager.SearchServerItem(pRegisterMatch->wServerID);
if(pGlobalServerItem==NULL) return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameMatch GameMatch;
ZeroMemory(&GameMatch,sizeof(GameMatch));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GameMatch.wServerID = pRegisterMatch->wServerID;
GameMatch.dwMatchID = pRegisterMatch->dwMatchID;
GameMatch.dwMatchNO = pRegisterMatch->dwMatchNO;
GameMatch.lMatchEnterScore = pRegisterMatch->lMatchEnterScore;
GameMatch.cbMatchType = pRegisterMatch->cbMatchType;
GameMatch.lMatchFee = pRegisterMatch->lMatchFee;
GameMatch.cbMatchFeeType = pRegisterMatch->cbMatchFeeType;
GameMatch.cbMemberOrder = pRegisterMatch->cbMemberOrder;
GameMatch.wRewardCount = pRegisterMatch->wRewardCount;
GameMatch.MatchEndTime = pRegisterMatch->MatchEndTime;
GameMatch.MatchStartTime = pRegisterMatch->MatchStartTime;
GameMatch.wStartUserCount = pRegisterMatch->wStartUserCount;
GameMatch.wMatchPlayCount = pRegisterMatch->wMatchPlayCount;
GameMatch.SignupStartTime = pRegisterMatch->SignupStartTime;
GameMatch.SignupEndTime = pRegisterMatch->SignupEndTime;
GameMatch.dwQuality = pRegisterMatch->dwQuality;
GameMatch.dwCycle = pRegisterMatch->dwCycle;
GameMatch.dwInviteCode = pRegisterMatch->dwInviteCode;
GameMatch.dwChannelID = pRegisterMatch->dwChannelID;
lstrcpyn(GameMatch.szMatchName,pRegisterMatch->szMatchName,CountArray(GameMatch.szMatchName));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CopyMemory(&pGlobalServerItem->m_GameMatch,&GameMatch,sizeof(pGlobalServerItem->m_GameMatch));
//Ⱥ<><C8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_SERVICE_INFO,SUB_CS_S_MATCH_INSERT,&GameMatch,sizeof(GameMatch),0L);
return true;
}
case SUB_CS_C_REGISTER_WEBGATE:
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize == sizeof(CMD_CS_C_RegisterWebGate));
if (wDataSize != sizeof(CMD_CS_C_RegisterWebGate)) return false;
CMD_CS_C_RegisterWebGate* pWebGate = (CMD_CS_C_RegisterWebGate*)pData;
return true;
}
}
return false;
}
//<2F><><EFBFBD><EFBFBD>״̬
bool CAttemperEngineSink::OnTCPNetworkMainServiceInfo(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
{
switch (wSubCmdID)
{
case SUB_CS_C_SERVER_ONLINE: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize==sizeof(CMD_CS_C_ServerOnLine));
if (wDataSize!=sizeof(CMD_CS_C_ServerOnLine)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_CS_C_ServerOnLine * pServerOnLine=(CMD_CS_C_ServerOnLine *)pData;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pBindParameter->ServiceKind==ServiceKind_Game);
if (pBindParameter->ServiceKind!=ServiceKind_Game) return false;
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
WORD wServerID=pBindParameter->wServiceID;
CGlobalServerItem * pGlobalServerItem=m_GlobalInfoManager.SearchServerItem(wServerID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pGlobalServerItem!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_CS_S_ServerOnLine ServerOnLine;
ZeroMemory(&ServerOnLine,sizeof(ServerOnLine));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
pGlobalServerItem->m_GameServer.dwOnLineCount=pServerOnLine->dwOnLineCount;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ServerOnLine.wServerID=wServerID;
ServerOnLine.dwOnLineCount=pServerOnLine->dwOnLineCount;
//<2F><><EFBFBD><EFBFBD>֪ͨ
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_SERVICE_INFO,SUB_CS_S_SERVER_ONLINE,&ServerOnLine,sizeof(ServerOnLine),0L);
}
return true;
}
case SUB_CS_C_SERVER_MODIFY: //<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize==sizeof(CMD_CS_C_ServerModify));
if (wDataSize!=sizeof(CMD_CS_C_ServerModify)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_CS_C_ServerModify * pServerModify=(CMD_CS_C_ServerModify *)pData;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pBindParameter->ServiceKind==ServiceKind_Game);
if (pBindParameter->ServiceKind!=ServiceKind_Game) return false;
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
ASSERT(m_GlobalInfoManager.SearchServerItem(pBindParameter->wServiceID)!=NULL);
CGlobalServerItem * pGlobalServerItem=m_GlobalInfoManager.SearchServerItem(pBindParameter->wServiceID);
//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
if (pGlobalServerItem!=NULL)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
pGlobalServerItem->m_GameServer.wSortID=pServerModify->wSortID;
pGlobalServerItem->m_GameServer.wKindID=pServerModify->wKindID;
pGlobalServerItem->m_GameServer.wNodeID=pServerModify->wNodeID;
pGlobalServerItem->m_GameServer.wServerPort=pServerModify->wServerPort;
pGlobalServerItem->m_GameServer.dwOnLineCount=pServerModify->dwOnLineCount;
pGlobalServerItem->m_GameServer.dwFullCount=pServerModify->dwFullCount;
lstrcpyn(pGlobalServerItem->m_GameServer.szServerName,pServerModify->szServerName,CountArray(pGlobalServerItem->m_GameServer.szServerName));
lstrcpyn(pGlobalServerItem->m_GameServer.szServerAddr,pServerModify->szServerAddr,CountArray(pGlobalServerItem->m_GameServer.szServerAddr));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_CS_S_ServerModify ServerModify;
ZeroMemory(&ServerModify,sizeof(ServerModify));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ServerModify.wKindID=pServerModify->wKindID;
ServerModify.wSortID=pServerModify->wSortID;
ServerModify.wNodeID=pServerModify->wNodeID;
ServerModify.wServerID=pBindParameter->wServiceID;
ServerModify.wServerPort=pServerModify->wServerPort;
ServerModify.dwOnLineCount=pServerModify->dwOnLineCount;
ServerModify.dwFullCount=pServerModify->dwFullCount;
lstrcpyn(ServerModify.szServerAddr,pServerModify->szServerAddr,CountArray(ServerModify.szServerAddr));
lstrcpyn(ServerModify.szServerName,pServerModify->szServerName,CountArray(ServerModify.szServerName));
//<2F><><EFBFBD><EFBFBD>֪ͨ
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_SERVICE_INFO,SUB_CS_S_SERVER_MODIFY,&ServerModify,sizeof(ServerModify),0L);
}
return true;
}
}
return false;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CAttemperEngineSink::OnTCPNetworkMainUserCollect(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
{
switch (wSubCmdID)
{
case SUB_CS_C_USER_ENTER: //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize==sizeof(CMD_CS_C_UserEnter));
if (wDataSize!=sizeof(CMD_CS_C_UserEnter)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_CS_C_UserEnter * pUserEnter=(CMD_CS_C_UserEnter *)pData;
pUserEnter->szNickName[CountArray(pUserEnter->szNickName)-1]=0;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pBindParameter->ServiceKind==ServiceKind_Game);
if (pBindParameter->ServiceKind!=ServiceKind_Game) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGlobalUserInfo GlobalUserInfo;
ZeroMemory(&GlobalUserInfo,sizeof(GlobalUserInfo));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
GlobalUserInfo.dwUserID=pUserEnter->dwUserID;
GlobalUserInfo.dwGameID=pUserEnter->dwGameID;
lstrcpyn(GlobalUserInfo.szNickName,pUserEnter->szNickName,CountArray(GlobalUserInfo.szNickName));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
GlobalUserInfo.cbGender=pUserEnter->cbGender;
GlobalUserInfo.cbMemberOrder=pUserEnter->cbMemberOrder;
GlobalUserInfo.cbMasterOrder=pUserEnter->cbMasterOrder;
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
m_GlobalInfoManager.ActiveUserItem(GlobalUserInfo,pBindParameter->wServiceID);
return true;
}
case SUB_CS_C_USER_LEAVE: //<2F>û<EFBFBD><C3BB>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize==sizeof(CMD_CS_C_UserLeave));
if (wDataSize!=sizeof(CMD_CS_C_UserLeave)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_CS_C_UserLeave * pUserLeave=(CMD_CS_C_UserLeave *)pData;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pBindParameter->ServiceKind==ServiceKind_Game);
if (pBindParameter->ServiceKind!=ServiceKind_Game) return false;
//ɾ<><C9BE><EFBFBD>û<EFBFBD>
m_GlobalInfoManager.DeleteUserItem(pUserLeave->dwUserID,pBindParameter->wServiceID);
return true;
}
case SUB_CS_C_USER_FINISH: //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD wBindIndex=LOWORD(dwSocketID);
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT((m_wCollectItem==wBindIndex)&&(pBindParameter->ServiceKind==ServiceKind_Game));
if ((m_wCollectItem!=wBindIndex)||(pBindParameter->ServiceKind!=ServiceKind_Game)) return false;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_wCollectItem=INVALID_WORD;
//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
if (m_WaitCollectItemArray.GetCount()>0)
{
//<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
INT_PTR nWaitCount=m_WaitCollectItemArray.GetCount();
m_wCollectItem=m_WaitCollectItemArray[nWaitCount-1];
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_WaitCollectItemArray.RemoveAt(nWaitCount-1);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
DWORD dwSocketID=(m_pBindParameter+m_wCollectItem)->dwSocketID;
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_USER_COLLECT,SUB_CS_S_COLLECT_REQUEST);
}
return true;
}
}
return false;
}
//Զ<>̷<EFBFBD><CCB7><EFBFBD>
bool CAttemperEngineSink::OnTCPNetworkMainRemoteService(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
{
switch (wSubCmdID)
{
case SUB_CS_C_SEARCH_CORRESPOND: //Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize==sizeof(CMD_CS_C_SearchCorrespond));
if (wDataSize!=sizeof(CMD_CS_C_SearchCorrespond)) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CMD_CS_C_SearchCorrespond * pSearchCorrespond=(CMD_CS_C_SearchCorrespond *)pData;
pSearchCorrespond->szNickName[CountArray(pSearchCorrespond->szNickName)-1]=0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_CS_S_SearchCorrespond SearchCorrespond;
ZeroMemory(&SearchCorrespond,sizeof(SearchCorrespond));
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
CGlobalUserItem * ResultUserItem[2];
ZeroMemory(ResultUserItem,sizeof(ResultUserItem));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
SearchCorrespond.dwSocketID=pSearchCorrespond->dwSocketID;
SearchCorrespond.dwClientAddr=pSearchCorrespond->dwClientAddr;
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
if (pSearchCorrespond->dwGameID!=0L)
{
ResultUserItem[0]=m_GlobalInfoManager.SearchUserItemByGameID(pSearchCorrespond->dwGameID);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
if (pSearchCorrespond->szNickName[0]!=0)
{
_tcslwr(pSearchCorrespond->szNickName);
ResultUserItem[1]=m_GlobalInfoManager.SearchUserItemByNickName(pSearchCorrespond->szNickName);
}
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
for (BYTE i=0;i<CountArray(ResultUserItem);i++)
{
if (ResultUserItem[i]!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wServerIndex=0;
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
do
{
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
CGlobalServerItem * pGlobalServerItem=ResultUserItem[i]->EnumServerItem(wServerIndex++);
//<2F><>ֹ<EFBFBD>ж<EFBFBD>
if (pGlobalServerItem==NULL) break;
if (SearchCorrespond.wUserCount>=CountArray(SearchCorrespond.UserRemoteInfo)) break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wIndex=SearchCorrespond.wUserCount++;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
SearchCorrespond.UserRemoteInfo[wIndex].cbGender=ResultUserItem[i]->GetGender();
SearchCorrespond.UserRemoteInfo[wIndex].cbMemberOrder=ResultUserItem[i]->GetMemberOrder();
SearchCorrespond.UserRemoteInfo[wIndex].cbMasterOrder=ResultUserItem[i]->GetMasterOrder();
//<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
SearchCorrespond.UserRemoteInfo[wIndex].dwUserID=ResultUserItem[i]->GetUserID();
SearchCorrespond.UserRemoteInfo[wIndex].dwGameID=ResultUserItem[i]->GetGameID();
lstrcpyn(SearchCorrespond.UserRemoteInfo[wIndex].szNickName,ResultUserItem[i]->GetNickName(),LEN_NICKNAME);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
SearchCorrespond.UserRemoteInfo[wIndex].wKindID=pGlobalServerItem->GetKindID();
SearchCorrespond.UserRemoteInfo[wIndex].wServerID=pGlobalServerItem->GetServerID();
lstrcpyn(SearchCorrespond.UserRemoteInfo[wIndex].szGameServer,pGlobalServerItem->m_GameServer.szServerName,LEN_SERVER);
} while (true);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wHeadSize=sizeof(SearchCorrespond)-sizeof(SearchCorrespond.UserRemoteInfo);
WORD wItemSize=sizeof(SearchCorrespond.UserRemoteInfo[0])*SearchCorrespond.wUserCount;
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_REMOTE_SERVICE,SUB_CS_S_SEARCH_CORRESPOND,&SearchCorrespond,wHeadSize+wItemSize);
return true;
}
}
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CAttemperEngineSink::OnTCPNetworkMainManagerService(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
{
switch (wSubCmdID)
{
case SUB_CS_C_SYSTEM_MESSAGE: //ϵͳ<CFB5><CDB3>Ϣ
{
//<2F><><EFBFBD><EFBFBD>֪ͨ
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_MANAGER_SERVICE,SUB_CS_S_SYSTEM_MESSAGE,pData,wDataSize,0L);
return true;
}
case SUB_CS_C_PROPERTY_TRUMPET: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
//<2F><><EFBFBD><EFBFBD>֪ͨ
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_MANAGER_SERVICE,SUB_CS_S_PROPERTY_TRUMPET,pData,wDataSize,0L);
return true;
}
}
return false;
}
//<2F><>վ<EFBFBD><D5BE><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>
bool CAttemperEngineSink::OnTCPNetworkMainWebService(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
{
switch (wSubCmdID)
{
case SUB_CS_C_SET_CHEAT_USER:
{
//<2F><><EFBFBD><EFBFBD>֪ͨ
m_pITCPNetworkEngine->SendDataBatch(MDM_CS_WEB_SERVICE, SUB_CS_S_SET_CHEAT_USER, pData, wDataSize, 0L);
return true;
}
case SUB_CS_C_SET_CARD_LIB:
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize == sizeof(CMD_CS_SetCardLib));
if (wDataSize != sizeof(CMD_CS_SetCardLib)) return false;
CMD_CS_SetCardLib* pCardLib = (CMD_CS_SetCardLib*)pData;
SendDataToKindGame(pCardLib->wKindID, MDM_CS_WEB_SERVICE, SUB_CS_S_SET_CARD_LIB, pData, wDataSize);
return true;
}
case SUB_CS_C_CARD_LIB_GLOBAL_CFG:
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize == sizeof(CMD_CS_CardLibGlobalCfg));
if (wDataSize != sizeof(CMD_CS_CardLibGlobalCfg)) return false;
CMD_CS_CardLibGlobalCfg* pCardLib = (CMD_CS_CardLibGlobalCfg*)pData;
SendDataToKindGame(pCardLib->wKindID, MDM_CS_WEB_SERVICE, SUB_CS_S_CARD_LIB_GLOBAL_CFG, pData, wDataSize);
return true;
}
default:
break;
}
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
bool CAttemperEngineSink::SendServerListItem(DWORD dwSocketID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wPacketSize=0L;
POSITION Position=NULL;
BYTE cbBuffer[SOCKET_TCP_PACKET];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_SERVICE_INFO,SUB_CS_S_SERVER_INFO);
//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
do
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ((wPacketSize+sizeof(tagGameServer))>sizeof(cbBuffer))
{
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_SERVICE_INFO,SUB_CS_S_SERVER_INSERT,cbBuffer,wPacketSize);
wPacketSize=0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
tagGameServer * pGameServer=(tagGameServer *)(cbBuffer+wPacketSize);
CGlobalServerItem * pGlobalServerItem=m_GlobalInfoManager.EnumServerItem(Position);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pGlobalServerItem!=NULL)
{
wPacketSize+=sizeof(tagGameServer);
CopyMemory(pGameServer,&pGlobalServerItem->m_GameServer,sizeof(tagGameServer));
}
} while (Position!=NULL);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (wPacketSize>0) m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_SERVICE_INFO,SUB_CS_S_SERVER_INSERT,cbBuffer,wPacketSize);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_SERVICE_INFO,SUB_CS_S_SERVER_FINISH);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
bool CAttemperEngineSink::SendMatchListItem(DWORD dwSocketID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wPacketSize=0L;
POSITION Position=NULL;
BYTE cbBuffer[SOCKET_TCP_PACKET];
//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
do
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ((wPacketSize+sizeof(tagGameServer))>sizeof(cbBuffer))
{
m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_SERVICE_INFO,SUB_CS_S_MATCH_INSERT,cbBuffer,wPacketSize);
wPacketSize=0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
tagGameMatch * pGameMatch=(tagGameMatch *)(cbBuffer+wPacketSize);
CGlobalServerItem * pGlobalServerItem=m_GlobalInfoManager.EnumServerItem(Position);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pGlobalServerItem!=NULL && pGlobalServerItem->IsMatchServer())
{
wPacketSize+=sizeof(tagGameMatch);
CopyMemory(pGameMatch,&pGlobalServerItem->m_GameMatch,sizeof(tagGameMatch));
}
} while (Position!=NULL);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (wPacketSize>0) m_pITCPNetworkEngine->SendData(dwSocketID,MDM_CS_SERVICE_INFO,SUB_CS_S_MATCH_INSERT,cbBuffer,wPacketSize);
return true;
}
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
bool CAttemperEngineSink::SendDataToKindGame(WORD wKindID, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
{
POSITION Position = NULL;
//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
do
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CGlobalServerItem * pServerItem = m_GlobalInfoManager.EnumServerItem(Position);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pServerItem == NULL || pServerItem->GetKindID() != wKindID)
{
continue;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD wBindIndex = pServerItem->GetIndex();
ASSERT(wBindIndex < m_pInitParameter->m_wMaxConnect);
if (wBindIndex >= m_pInitParameter->m_wMaxConnect)
{
continue;
}
tagBindParameter * pBindParameter = (m_pBindParameter + wBindIndex);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD dwSocketID = pBindParameter->dwSocketID;
m_pITCPNetworkEngine->SendData(dwSocketID, wMainCmdID, wSubCmdID, pData, wDataSize);
} while (Position != NULL);
return true;
}
//<2F><><EFBFBD><EFBFBD><E4B7A2>
bool CAttemperEngineSink::SendDataToGame(WORD wServerID, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
{
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
CGlobalServerItem * pGlobalServerItem=m_GlobalInfoManager.SearchServerItem(wServerID);
if (pGlobalServerItem==NULL) return false;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD wBindIndex=pGlobalServerItem->GetIndex();
tagBindParameter * pBindParameter=(m_pBindParameter+wBindIndex);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD dwSocketID=pBindParameter->dwSocketID;
m_pITCPNetworkEngine->SendData(dwSocketID,wMainCmdID,wSubCmdID,pData,wDataSize);
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CAttemperEngineSink::SendDataToUser(WORD wServerID, DWORD dwUserID, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
{
return true;
}
//////////////////////////////////////////////////////////////////////////////////