From 88e3d219588052a8ab222ab4f6f2b27c9c29c1b2 Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Sun, 16 Sep 2007 11:10:06 +0000 Subject: Added global accounting of beings. --- src/account-server/serverhandler.cpp | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'src/account-server/serverhandler.cpp') diff --git a/src/account-server/serverhandler.cpp b/src/account-server/serverhandler.cpp index 87f99c81..39e63c6e 100644 --- a/src/account-server/serverhandler.cpp +++ b/src/account-server/serverhandler.cpp @@ -249,6 +249,32 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg) storage->banCharacter(id, duration); } break; + case GAMSG_STATISTICS: + { + while (msg.getUnreadLength()) + { + int mapId = msg.readShort(); + ServerStatistics::iterator i = server->maps.find(mapId); + if (i == server->maps.end()) + { + LOG_ERROR("Server " << server->address << ':' + << server->port << " should not be sending stati" + "stics for map " << mapId << '.'); + // Skip remaining data. + break; + } + MapStatistics &m = i->second; + m.nbThings = msg.readShort(); + m.nbMonsters = msg.readShort(); + int nb = msg.readShort(); + m.players.resize(nb); + for (int j = 0; j < nb; ++j) + { + m.players[j] = msg.readLong(); + } + } + } break; + #if 0 case GAMSG_GUILD_CREATE: { @@ -424,6 +450,33 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg) comp->send(result); } +void ServerHandler::dumpStatistics(std::ostream &os) const +{ + for (NetComputers::const_iterator i = clients.begin(), + i_end = clients.end(); i != i_end; ++i) + { + GameServer *server = static_cast< GameServer * >(*i); + if (!server->port) continue; + os << "address << "\" port=\"" + << server->port << "\">\n"; + + for (ServerStatistics::const_iterator j = server->maps.begin(), + j_end = server->maps.end(); j != j_end; ++j) + { + MapStatistics const &m = j->second; + os << "first << "\" nb_things=\"" << m.nbThings + << "\" nb_monsters=\"" << m.nbMonsters << "\">\n"; + for (std::vector< int >::const_iterator k = m.players.begin(), + k_end = m.players.end(); k != k_end; ++k) + { + os << "\n"; + } + os << "\n"; + } + os << "\n"; + } +} + #if 0 void ServerHandler::enterChannel(const std::string &name, CharacterData *player) -- cgit v1.2.3-60-g2f50