本文整理汇总了C++中ServerSocket::getClient方法的典型用法代码示例。如果您正苦于以下问题:C++ ServerSocket::getClient方法的具体用法?C++ ServerSocket::getClient怎么用?C++ ServerSocket::getClient使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ServerSocket
的用法示例。
在下文中一共展示了ServerSocket::getClient方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void ConsoleProfiler::onTimer1000()
{
ServerSocket* logicServer = GameServer::getInstance()->getLogicServer();
ServerSocket* consoleServer = GameServer::getInstance()->getConsoleServer();
DBQueue* dbQueue = GameServer::getInstance()->getDBQueue();
ByteArray packet;
MessageHead head;
head.command = CMD_CONSOLE_SUBSCRIBE;
head.pack(packet);
ConsoleSubscribeMessage msg;
msg.memoryPeak = Profiler::getPeakRSS();
msg.memoryUsed = Profiler::getCurrentRSS();
msg.numDBRequests = dbQueue->getQueueLength();
msg.numOnline = logicServer->numOnlines();
#ifdef _WIN32
msg.ioDataPoolSize = logicServer->getIODataPoolSize();
msg.ioDataPostedSize = logicServer->getIODataPostedSize();
#endif
msg.pack(packet);
head.packSize = packet.getSize();
packet.position = 0;
head.pack(packet);
auto iter = allSubscribe.begin();
while (iter != allSubscribe.end())
{
long long clientID = *iter;
auto client = consoleServer->getClient(clientID);
if (!client)
{
iter = allSubscribe.erase(iter);
}
else
{
client->send(packet);
client->flush();
++iter;
}
}
}
示例2: IOCPRecvThread
//thread for receiving data from client
unsigned int ServerSocket::IOCPRecvThread(LPVOID lpParam)
{
ServerSocket* pServer = (ServerSocket*)lpParam;
BOOL bRet;
DWORD dwByteCountBak=0;
OVERLAPPED_PLUS* ov = NULL;
OP_CODE opCode = OP_NORMAL;
ServerSocketClient* pClient = NULL;
stOpParam* pParam = NULL;
bool bWriteFlag = false, bConnectSuccess = false;
while(1)
{
bRet = GetQueuedCompletionStatus(pServer->m_completionPort, &dwByteCountBak, (ULONG_PTR*)(&opCode), (LPOVERLAPPED*)&ov, INFINITE);
//关闭线程
if(opCode == OP_QUIT)
break;
//有些操作需要先获取客户端
if(opCode != OP_ADDCLIENT && opCode != OP_MAINTENANCE && opCode != OP_TIMETRACE)
{
if(ov != NULL)
{
pClient = pServer->getClient(ov->ClientId);
if(!pClient)
{
free(ov);
continue;
}
}
else
continue;
}
//出错处理
if(bRet == FALSE)
{
printWSAError("GetQueuedCompletionStatus() failed");
//pClient->onNetFail( 出错处理
continue;
}
//这个之后再写吧……
if(opCode == OP_TIMETRACE)
{
}
//设置客户端连接类型
else if(opCode == OP_SETCONNECTTYPE)
{
pParam = (stOpParam*)ov->WsaBuf.buf;
pClient->setConnectType(pParam->val);
}
else if(opCode == OP_ADDCLIENT)
pServer->addClient(ADD_CLIENT_NUM);
//else if(opCode == OP_MAINTENANCE)
// //pServer->OP_MAINTENANCE(); //维护所有客户端
//else if(opCode == OP_SEND)
// //pClient->sendPacket((OVERLAPPED_PLUS*)ov) //发送数据处理
else if(opCode == OP_RESTART)
{
free(ov);
//pClient->restart(); //客户端重新连接
}
else if(opCode == OP_NORMAL)
{
if(dwByteCountBak == 0)
{
printWSAError("dwByteCountBak == 0, is error");
//pClient->onNetFail( 出错处理
continue;
}
bWriteFlag = ov->bCtxWrite;
if(bWriteFlag)
{
//pClient->handleSend() 发送处理
}
else
{
bConnectSuccess = true;
if(pClient->getState() == ServerSocketClient::SSF_ACCEPTING)
bConnectSuccess = pClient->handleConnect(ov, dwByteCountBak);
if (bConnectSuccess)
pClient->onReceive(ov->WsaBuf.buf, dwByteCountBak);
}
}
else
{
printf("无效opCode=%d", opCode);
}
// 为下一个重叠调用建立单I/O操作数据
ZeroMemory(&(ov->overlapped), sizeof(OVERLAPPED)); // 清空内存
//.........这里部分代码省略.........