diff options
author | rubidium <rubidium@openttd.org> | 2010-10-17 17:38:41 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2010-10-17 17:38:41 +0000 |
commit | 459514afe4f550a08d98958745d6cd8311c53fdd (patch) | |
tree | c66c0a60dff633ff91971112d417079527a44574 /src/network/network_admin.cpp | |
parent | ca5d9f70024a513b4d5a6cfcddb3b250f591d630 (diff) | |
download | openttd-459514afe4f550a08d98958745d6cd8311c53fdd.tar.xz |
(svn r20972) -Add: company statistics updates at intervals to remote admins (dihedral)
Diffstat (limited to 'src/network/network_admin.cpp')
-rw-r--r-- | src/network/network_admin.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index ac33be65a..7a86a4892 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -44,6 +44,7 @@ static const AdminUpdateFrequency _admin_update_type_frequencies[] = { ADMIN_FREQUENCY_POLL | ADMIN_FREQUENCY_AUTOMATIC, ///< ADMIN_UPDATE_CLIENT_INFO ADMIN_FREQUENCY_POLL | ADMIN_FREQUENCY_AUTOMATIC, ///< ADMIN_UPDATE_COMPANY_INFO ADMIN_FREQUENCY_POLL | ADMIN_FREQUENCY_WEEKLY | ADMIN_FREQUENCY_MONTHLY | ADMIN_FREQUENCY_QUARTERLY | ADMIN_FREQUENCY_ANUALLY, ///< ADMIN_UPDATE_COMPANY_ECONOMY + ADMIN_FREQUENCY_POLL | ADMIN_FREQUENCY_WEEKLY | ADMIN_FREQUENCY_MONTHLY | ADMIN_FREQUENCY_QUARTERLY | ADMIN_FREQUENCY_ANUALLY, ///< ADMIN_UPDATE_COMPANY_STATS }; assert_compile(lengthof(_admin_update_type_frequencies) == ADMIN_UPDATE_END); @@ -354,6 +355,35 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyEconomy() return NETWORK_RECV_STATUS_OKAY; } +NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyStats() +{ + /* Fetch the latest version of the stats. */ + NetworkCompanyStats company_stats[MAX_COMPANIES]; + NetworkPopulateCompanyStats(company_stats); + + const Company *company; + + /* Go through all the companies. */ + FOR_ALL_COMPANIES(company) { + Packet *p = new Packet(ADMIN_PACKET_SERVER_COMPANY_STATS); + + /* Send the information. */ + p->Send_uint8(company->index); + + for (uint i = 0; i < NETWORK_VEH_END; i++) { + p->Send_uint16(company_stats->num_vehicle[i]); + } + + for (uint i = 0; i < NETWORK_VEH_END; i++) { + p->Send_uint16(company_stats->num_station[i]); + } + + this->Send_Packet(p); + } + + return NETWORK_RECV_STATUS_OKAY; +} + /*********** * Receiving functions ************/ @@ -452,6 +482,11 @@ DEF_ADMIN_RECEIVE_COMMAND(Server, ADMIN_PACKET_ADMIN_POLL) this->SendCompanyEconomy(); break; + case ADMIN_UPDATE_COMPANY_STATS: + /* the admin is requesting company stats. */ + this->SendCompanyStats(); + break; + default: /* An unsupported "poll" update type. */ DEBUG(net, 3, "[admin] Not supported poll %d (%d) from '%s' (%s).", type, d1, this->admin_name, this->admin_version); @@ -609,6 +644,10 @@ void NetworkAdminUpdate(AdminUpdateFrequency freq) as->SendCompanyEconomy(); break; + case ADMIN_UPDATE_COMPANY_STATS: + as->SendCompanyStats(); + break; + default: NOT_REACHED(); } } |