diff options
author | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-09-16 11:10:06 +0000 |
---|---|---|
committer | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-09-16 11:10:06 +0000 |
commit | 88e3d219588052a8ab222ab4f6f2b27c9c29c1b2 (patch) | |
tree | 6b15bf0fe700d61b3aa451d0810a07a175b06774 /src/account-server/serverhandler.cpp | |
parent | be461a5ca51e10dad40c87385440f6ddae14fca0 (diff) | |
download | manaserv-88e3d219588052a8ab222ab4f6f2b27c9c29c1b2.tar.gz manaserv-88e3d219588052a8ab222ab4f6f2b27c9c29c1b2.tar.bz2 manaserv-88e3d219588052a8ab222ab4f6f2b27c9c29c1b2.tar.xz manaserv-88e3d219588052a8ab222ab4f6f2b27c9c29c1b2.zip |
Added global accounting of beings.
Diffstat (limited to 'src/account-server/serverhandler.cpp')
-rw-r--r-- | src/account-server/serverhandler.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
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 << "<gameserver address=\"" << server->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 << "<map id=\"" << j->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 << "<character id=\"" << *k << "\"/>\n"; + } + os << "</map>\n"; + } + os << "</gameserver>\n"; + } +} + #if 0 void ServerHandler::enterChannel(const std::string &name, CharacterData *player) |