summaryrefslogtreecommitdiff
path: root/src/account-server/serverhandler.cpp
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-09-16 11:10:06 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-09-16 11:10:06 +0000
commit88e3d219588052a8ab222ab4f6f2b27c9c29c1b2 (patch)
tree6b15bf0fe700d61b3aa451d0810a07a175b06774 /src/account-server/serverhandler.cpp
parentbe461a5ca51e10dad40c87385440f6ddae14fca0 (diff)
downloadmanaserv-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.cpp53
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)