(svn r20971) -Add: company economy updates at intervals to remote admins (dihedral)

This commit is contained in:
rubidium
2010-10-17 17:38:16 +00:00
parent 56a65270fc
commit 064117be4a
4 changed files with 64 additions and 0 deletions

View File

@@ -43,6 +43,7 @@ static const AdminUpdateFrequency _admin_update_type_frequencies[] = {
ADMIN_FREQUENCY_POLL | ADMIN_FREQUENCY_DAILY | ADMIN_FREQUENCY_WEEKLY | ADMIN_FREQUENCY_MONTHLY | ADMIN_FREQUENCY_QUARTERLY | ADMIN_FREQUENCY_ANUALLY, ///< ADMIN_UPDATE_DATE
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
};
assert_compile(lengthof(_admin_update_type_frequencies) == ADMIN_UPDATE_END);
@@ -319,6 +320,40 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyRemove(CompanyID c
return NETWORK_RECV_STATUS_OKAY;
}
NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyEconomy()
{
const Company *company;
FOR_ALL_COMPANIES(company) {
/* Get the income. */
Money income = 0;
for (uint i = 0; i < lengthof(company->yearly_expenses[0]); i++) {
income -= company->yearly_expenses[0][i];
}
Packet *p = new Packet(ADMIN_PACKET_SERVER_COMPANY_ECONOMY);
p->Send_uint8(company->index);
/* Current information. */
p->Send_uint64(company->money);
p->Send_uint64(company->current_loan);
p->Send_uint64(income);
p->Send_uint16(company->cur_economy.delivered_cargo);
/* Send stats for the last 2 quarters. */
for (uint i = 0; i < 2; i++) {
p->Send_uint64(company->old_economy[i].company_value);
p->Send_uint16(company->old_economy[i].performance_history);
p->Send_uint16(company->old_economy[i].delivered_cargo);
}
this->Send_Packet(p);
}
return NETWORK_RECV_STATUS_OKAY;
}
/***********
* Receiving functions
************/
@@ -412,6 +447,11 @@ DEF_ADMIN_RECEIVE_COMMAND(Server, ADMIN_PACKET_ADMIN_POLL)
}
break;
case ADMIN_UPDATE_COMPANY_ECONOMY:
/* The admin is requesting economy info. */
this->SendCompanyEconomy();
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);
@@ -565,6 +605,10 @@ void NetworkAdminUpdate(AdminUpdateFrequency freq)
as->SendDate();
break;
case ADMIN_UPDATE_COMPANY_ECONOMY:
as->SendCompanyEconomy();
break;
default: NOT_REACHED();
}
}