00001
00002
00003
00004
00005
00006
00007
00008
00009
00014 #ifndef NETWORK_CORE_TCP_ADMIN_H
00015 #define NETWORK_CORE_TCP_ADMIN_H
00016
00017 #include "os_abstraction.h"
00018 #include "tcp.h"
00019 #include "../network_type.h"
00020 #include "../../core/pool_type.hpp"
00021
00022 #ifdef ENABLE_NETWORK
00023
00028 enum PacketAdminType {
00029 ADMIN_PACKET_ADMIN_JOIN,
00030 ADMIN_PACKET_ADMIN_QUIT,
00031 ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY,
00032 ADMIN_PACKET_ADMIN_POLL,
00033 ADMIN_PACKET_ADMIN_CHAT,
00034 ADMIN_PACKET_ADMIN_RCON,
00035
00036 ADMIN_PACKET_SERVER_FULL = 100,
00037 ADMIN_PACKET_SERVER_BANNED,
00038 ADMIN_PACKET_SERVER_ERROR,
00039 ADMIN_PACKET_SERVER_PROTOCOL,
00040 ADMIN_PACKET_SERVER_WELCOME,
00041 ADMIN_PACKET_SERVER_NEWGAME,
00042 ADMIN_PACKET_SERVER_SHUTDOWN,
00043
00044 ADMIN_PACKET_SERVER_DATE,
00045 ADMIN_PACKET_SERVER_CLIENT_JOIN,
00046 ADMIN_PACKET_SERVER_CLIENT_INFO,
00047 ADMIN_PACKET_SERVER_CLIENT_UPDATE,
00048 ADMIN_PACKET_SERVER_CLIENT_QUIT,
00049 ADMIN_PACKET_SERVER_CLIENT_ERROR,
00050 ADMIN_PACKET_SERVER_COMPANY_NEW,
00051 ADMIN_PACKET_SERVER_COMPANY_INFO,
00052 ADMIN_PACKET_SERVER_COMPANY_UPDATE,
00053 ADMIN_PACKET_SERVER_COMPANY_REMOVE,
00054 ADMIN_PACKET_SERVER_COMPANY_ECONOMY,
00055 ADMIN_PACKET_SERVER_COMPANY_STATS,
00056 ADMIN_PACKET_SERVER_CHAT,
00057 ADMIN_PACKET_SERVER_RCON,
00058 ADMIN_PACKET_SERVER_CONSOLE,
00059
00060 INVALID_ADMIN_PACKET = 0xFF,
00061 };
00062
00064 enum AdminStatus {
00065 ADMIN_STATUS_INACTIVE,
00066 ADMIN_STATUS_ACTIVE,
00067 ADMIN_STATUS_END
00068 };
00069
00071 enum AdminUpdateType {
00072 ADMIN_UPDATE_DATE,
00073 ADMIN_UPDATE_CLIENT_INFO,
00074 ADMIN_UPDATE_COMPANY_INFO,
00075 ADMIN_UPDATE_COMPANY_ECONOMY,
00076 ADMIN_UPDATE_COMPANY_STATS,
00077 ADMIN_UPDATE_CHAT,
00078 ADMIN_UPDATE_CONSOLE,
00079 ADMIN_UPDATE_END
00080 };
00081
00083 enum AdminUpdateFrequency {
00084 ADMIN_FREQUENCY_POLL = 0x01,
00085 ADMIN_FREQUENCY_DAILY = 0x02,
00086 ADMIN_FREQUENCY_WEEKLY = 0x04,
00087 ADMIN_FREQUENCY_MONTHLY = 0x08,
00088 ADMIN_FREQUENCY_QUARTERLY = 0x10,
00089 ADMIN_FREQUENCY_ANUALLY = 0x20,
00090 ADMIN_FREQUENCY_AUTOMATIC = 0x40,
00091 };
00092 DECLARE_ENUM_AS_BIT_SET(AdminUpdateFrequency)
00093
00094
00095 enum AdminCompanyRemoveReason {
00096 ADMIN_CRR_MANUAL,
00097 ADMIN_CRR_AUTOCLEAN,
00098 ADMIN_CRR_BANKRUPT
00099 };
00100
00101 #define DECLARE_ADMIN_RECEIVE_COMMAND(type) virtual NetworkRecvStatus NetworkPacketReceive_## type ##_command(Packet *p)
00102 #define DEF_ADMIN_RECEIVE_COMMAND(cls, type) NetworkRecvStatus cls ##NetworkAdminSocketHandler::NetworkPacketReceive_ ## type ## _command(Packet *p)
00103
00105 class NetworkAdminSocketHandler : public NetworkTCPSocketHandler {
00106 protected:
00107 char admin_name[NETWORK_CLIENT_NAME_LENGTH];
00108 char admin_version[NETWORK_REVISION_LENGTH];
00109 AdminStatus status;
00110
00117 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_JOIN);
00118
00122 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_QUIT);
00123
00129 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY);
00130
00138 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_POLL);
00139
00147 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_CHAT);
00148
00153 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_RCON);
00154
00158 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_FULL);
00159
00163 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_BANNED);
00164
00169 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_ERROR);
00170
00178 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_PROTOCOL);
00179
00192 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_WELCOME);
00193
00197 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_NEWGAME);
00198
00202 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_SHUTDOWN);
00203
00208 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_DATE);
00209
00214 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_JOIN);
00215
00225 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_INFO);
00226
00233 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_UPDATE);
00234
00239 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_QUIT);
00240
00246 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_ERROR);
00247
00252 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_NEW);
00253
00264 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_INFO);
00265
00279 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_UPDATE);
00280
00286 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_REMOVE);
00287
00301 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_ECONOMY);
00302
00317 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_STATS);
00318
00327 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CHAT);
00328
00334 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_RCON);
00335
00341 DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CONSOLE);
00342
00343 NetworkRecvStatus HandlePacket(Packet *p);
00344 public:
00345 NetworkRecvStatus CloseConnection(bool error = true);
00346
00347 NetworkAdminSocketHandler(SOCKET s);
00348 ~NetworkAdminSocketHandler();
00349
00350 NetworkRecvStatus ReceivePackets();
00351
00352 const char *ReceiveCommand(Packet *p, CommandPacket *cp);
00353 void SendCommand(Packet *p, const CommandPacket *cp);
00354 };
00355
00356 #endif
00357
00358 #endif