コード例 #1
0
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;
		}
	}
}