142 lines
3.4 KiB
C++
142 lines
3.4 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
//暂时作废
|
|||
|
|
|
|||
|
|
CCommonServer::CCommonServer() : Inherited()
|
|||
|
|
{
|
|||
|
|
/*m_SessionList.setLock(&m_SessionListLock);*/
|
|||
|
|
SetServiceName(_T("普通逻辑服务器Server"));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CCommonServer::~CCommonServer()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CCustomServerClientSocket* CCommonServer::CreateClientSocket(SOCKET nSocket, PSOCKADDR_IN pAddrIn)
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmTip, _T("接收普通逻辑服务器连接"));
|
|||
|
|
return new CCommonServerClient(this, nSocket, pAddrIn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CCommonServer::DestroyClientSocket(CCustomServerClientSocket *pClientSocket)
|
|||
|
|
{
|
|||
|
|
//m_CloseClientList.add(pClientSocket);
|
|||
|
|
OutputMsg(rmTip, _T("断开普通逻辑服务器连接"));
|
|||
|
|
Inherited::DestroyClientSocket(pClientSocket);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CCommonServer::DispatchInternalMessage(UINT uMsg, UINT64 uParam1, UINT64 uParam2, UINT64 uParam3,UINT64 uParam4)
|
|||
|
|
{
|
|||
|
|
/*switch(uMsg)
|
|||
|
|
{
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CCommonServer::ProcessClients()
|
|||
|
|
{
|
|||
|
|
Inherited::ProcessClients();
|
|||
|
|
ProcessClosedClients();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CCommonServer::SingleRun()
|
|||
|
|
{
|
|||
|
|
TICKCOUNT dwCurTick = _getTickCount();
|
|||
|
|
|
|||
|
|
////提交新开启的会话数据
|
|||
|
|
//if ( m_SessionList.appendCount() > 0 )
|
|||
|
|
//{
|
|||
|
|
// m_SessionList.flush();
|
|||
|
|
// TRACE(_T("当前会话数量:%d"), m_SessionList.count());
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//调用父类例行执行
|
|||
|
|
Inherited::SingleRun();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CCommonServer::ProcessClosedClients()
|
|||
|
|
{
|
|||
|
|
//INT_PTR i;
|
|||
|
|
//CDBDataClient *pClient;
|
|||
|
|
//TICKCOUNT dwCurTick = _getTickCount();
|
|||
|
|
|
|||
|
|
////必须降序循环,因为连接可能在循环中被移除
|
|||
|
|
//for (i = m_CloseClientList.count() - 1; i > -1; --i)
|
|||
|
|
//{
|
|||
|
|
// pClient = m_CloseClientList[i];
|
|||
|
|
// //连接被关闭后依然要调用Run函数,因为可能有重要的网络数据或逻辑数据没有处理完
|
|||
|
|
// pClient->Run();
|
|||
|
|
// //连接关闭5分钟后再释放连接对象
|
|||
|
|
// if ( dwCurTick - pClient->m_dwClosedTick >= 5 * 60 * 1000 )
|
|||
|
|
// {
|
|||
|
|
// m_CloseClientList.remove(i);
|
|||
|
|
// delete pClient;
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CCommonServer::OnRun()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CCommonServer::SendData(int nServerIndex, const void *pData, const size_t nLen)
|
|||
|
|
{
|
|||
|
|
static char szData[81960];
|
|||
|
|
if (nLen + sizeof(DATAHEADER) > sizeof(szData))
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError, _T("%s send too big packet(len=%d)"), __FUNCTION__, nLen);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// INT_PTR i, nSendCount = 0;
|
|||
|
|
CCommonServerClient *pClient;
|
|||
|
|
for (INT_PTR i = m_ClientList.count() - 1; i > -1; --i)
|
|||
|
|
{
|
|||
|
|
pClient = (CCommonServerClient *)m_ClientList[i];
|
|||
|
|
if (pClient && pClient->connected() && pClient->registed() && pClient->getClientType() == GameServer)
|
|||
|
|
{
|
|||
|
|
// 封装一个消息头进去
|
|||
|
|
/*PDATAHEADER pHeader;
|
|||
|
|
ZeroMemory(pHeader, sizeof(0));
|
|||
|
|
pHeader->tag = DEFAULT_TAG_VALUE;
|
|||
|
|
CopyMemory((void *)(pHeader+1), pData, nLen);
|
|||
|
|
pClient->AppendSendBuffer(pHeader, nLen + sizeof(DATAHEADER));*/
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
//BOOL CCommonServer::GetSession(const INT_PTR nSessionId, OUT PGAMESESSION pSession)
|
|||
|
|
//{
|
|||
|
|
// BOOL boResult = FALSE;
|
|||
|
|
// CSafeLock sl(&m_SessionListLock);
|
|||
|
|
//
|
|||
|
|
// PGAMESESSION pSessionPtr = GetSessionPtr(nSessionId, NULL);
|
|||
|
|
// if ( pSessionPtr )
|
|||
|
|
// {
|
|||
|
|
// *pSession = *pSessionPtr;
|
|||
|
|
// boResult = TRUE;
|
|||
|
|
// }
|
|||
|
|
//
|
|||
|
|
// return boResult;
|
|||
|
|
//}
|
|||
|
|
//
|
|||
|
|
//PGAMESESSION CCommonServer::GetSessionPtr(const INT_PTR nSessionId, PINT_PTR lpIndex)
|
|||
|
|
//{
|
|||
|
|
// INT_PTR i;
|
|||
|
|
// PGAMESESSION *pSessionList;
|
|||
|
|
//
|
|||
|
|
// pSessionList = m_SessionList;
|
|||
|
|
// for (i= m_SessionList.count() - 1; i > -1; --i)
|
|||
|
|
// {
|
|||
|
|
// if ( pSessionList[i]->nSessionID == nSessionId )
|
|||
|
|
// {
|
|||
|
|
// if (lpIndex) *lpIndex = i;
|
|||
|
|
// return pSessionList[i];
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
//
|
|||
|
|
// return NULL;
|
|||
|
|
//}
|