Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef NETWORK_ADMIN_H
00013 #define NETWORK_ADMIN_H
00014
00015 #ifdef ENABLE_NETWORK
00016
00017 #include "network_internal.h"
00018 #include "core/tcp_listen.h"
00019 #include "core/tcp_admin.h"
00020
00021 extern AdminIndex _redirect_console_to_admin;
00022
00023 class ServerNetworkAdminSocketHandler;
00025 typedef Pool<ServerNetworkAdminSocketHandler, AdminIndex, 2, MAX_ADMINS, PT_NADMIN> NetworkAdminSocketPool;
00026 extern NetworkAdminSocketPool _networkadminsocket_pool;
00027
00029 class ServerNetworkAdminSocketHandler : public NetworkAdminSocketPool::PoolItem<&_networkadminsocket_pool>, public NetworkAdminSocketHandler, public TCPListenHandler<ServerNetworkAdminSocketHandler, ADMIN_PACKET_SERVER_FULL, ADMIN_PACKET_SERVER_BANNED> {
00030 protected:
00031 virtual NetworkRecvStatus Receive_ADMIN_JOIN(Packet *p);
00032 virtual NetworkRecvStatus Receive_ADMIN_QUIT(Packet *p);
00033 virtual NetworkRecvStatus Receive_ADMIN_UPDATE_FREQUENCY(Packet *p);
00034 virtual NetworkRecvStatus Receive_ADMIN_POLL(Packet *p);
00035 virtual NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p);
00036 virtual NetworkRecvStatus Receive_ADMIN_RCON(Packet *p);
00037 virtual NetworkRecvStatus Receive_ADMIN_GAMESCRIPT(Packet *p);
00038 virtual NetworkRecvStatus Receive_ADMIN_PING(Packet *p);
00039
00040 NetworkRecvStatus SendProtocol();
00041 NetworkRecvStatus SendPong(uint32 d1);
00042 public:
00043 AdminUpdateFrequency update_frequency[ADMIN_UPDATE_END];
00044 uint32 realtime_connect;
00045 NetworkAddress address;
00046
00047 ServerNetworkAdminSocketHandler(SOCKET s);
00048 ~ServerNetworkAdminSocketHandler();
00049
00050 NetworkRecvStatus SendError(NetworkErrorCode error);
00051 NetworkRecvStatus SendWelcome();
00052 NetworkRecvStatus SendNewGame();
00053 NetworkRecvStatus SendShutdown();
00054
00055 NetworkRecvStatus SendDate();
00056 NetworkRecvStatus SendClientJoin(ClientID client_id);
00057 NetworkRecvStatus SendClientInfo(const NetworkClientSocket *cs, const NetworkClientInfo *ci);
00058 NetworkRecvStatus SendClientUpdate(const NetworkClientInfo *ci);
00059 NetworkRecvStatus SendClientQuit(ClientID client_id);
00060 NetworkRecvStatus SendClientError(ClientID client_id, NetworkErrorCode error);
00061 NetworkRecvStatus SendCompanyNew(CompanyID company_id);
00062 NetworkRecvStatus SendCompanyInfo(const Company *c);
00063 NetworkRecvStatus SendCompanyUpdate(const Company *c);
00064 NetworkRecvStatus SendCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr);
00065 NetworkRecvStatus SendCompanyEconomy();
00066 NetworkRecvStatus SendCompanyStats();
00067
00068 NetworkRecvStatus SendChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, int64 data);
00069 NetworkRecvStatus SendRcon(uint16 colour, const char *command);
00070 NetworkRecvStatus SendConsole(const char *origin, const char *command);
00071 NetworkRecvStatus SendGameScript(const char *json);
00072 NetworkRecvStatus SendCmdNames();
00073 NetworkRecvStatus SendCmdLogging(ClientID client_id, const CommandPacket *cp);
00074 NetworkRecvStatus SendRconEnd(const char *command);
00075
00076 static void Send();
00077 static void AcceptConnection(SOCKET s, const NetworkAddress &address);
00078 static bool AllowConnection();
00079 static void WelcomeAll();
00080
00085 static const char *GetName()
00086 {
00087 return "admin";
00088 }
00089 };
00090
00096 #define FOR_ALL_ADMIN_SOCKETS_FROM(var, start) FOR_ALL_ITEMS_FROM(ServerNetworkAdminSocketHandler, adminsocket_index, var, start)
00097
00102 #define FOR_ALL_ADMIN_SOCKETS(var) FOR_ALL_ADMIN_SOCKETS_FROM(var, 0)
00103
00108 #define FOR_ALL_ACTIVE_ADMIN_SOCKETS(var) \
00109 FOR_ALL_ADMIN_SOCKETS(var) \
00110 if (var->GetAdminStatus() == ADMIN_STATUS_ACTIVE)
00111
00112 void NetworkAdminClientInfo(const NetworkClientSocket *cs, bool new_client = false);
00113 void NetworkAdminClientUpdate(const NetworkClientInfo *ci);
00114 void NetworkAdminClientQuit(ClientID client_id);
00115 void NetworkAdminClientError(ClientID client_id, NetworkErrorCode error_code);
00116 void NetworkAdminCompanyInfo(const Company *company, bool new_company);
00117 void NetworkAdminCompanyUpdate(const Company *company);
00118 void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr);
00119
00120 void NetworkAdminChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, int64 data = 0, bool from_admin = false);
00121 void NetworkAdminUpdate(AdminUpdateFrequency freq);
00122 void NetworkServerSendAdminRcon(AdminIndex admin_index, TextColour colour_code, const char *string);
00123 void NetworkAdminConsole(const char *origin, const char *string);
00124 void NetworkAdminGameScript(const char *json);
00125 void NetworkAdminCmdLogging(const NetworkClientSocket *owner, const CommandPacket *cp);
00126
00127 #endif
00128 #endif