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 ADMIN_PACKET_ADMIN_GAMESCRIPT,
00036 ADMIN_PACKET_ADMIN_PING,
00037
00038 ADMIN_PACKET_SERVER_FULL = 100,
00039 ADMIN_PACKET_SERVER_BANNED,
00040 ADMIN_PACKET_SERVER_ERROR,
00041 ADMIN_PACKET_SERVER_PROTOCOL,
00042 ADMIN_PACKET_SERVER_WELCOME,
00043 ADMIN_PACKET_SERVER_NEWGAME,
00044 ADMIN_PACKET_SERVER_SHUTDOWN,
00045
00046 ADMIN_PACKET_SERVER_DATE,
00047 ADMIN_PACKET_SERVER_CLIENT_JOIN,
00048 ADMIN_PACKET_SERVER_CLIENT_INFO,
00049 ADMIN_PACKET_SERVER_CLIENT_UPDATE,
00050 ADMIN_PACKET_SERVER_CLIENT_QUIT,
00051 ADMIN_PACKET_SERVER_CLIENT_ERROR,
00052 ADMIN_PACKET_SERVER_COMPANY_NEW,
00053 ADMIN_PACKET_SERVER_COMPANY_INFO,
00054 ADMIN_PACKET_SERVER_COMPANY_UPDATE,
00055 ADMIN_PACKET_SERVER_COMPANY_REMOVE,
00056 ADMIN_PACKET_SERVER_COMPANY_ECONOMY,
00057 ADMIN_PACKET_SERVER_COMPANY_STATS,
00058 ADMIN_PACKET_SERVER_CHAT,
00059 ADMIN_PACKET_SERVER_RCON,
00060 ADMIN_PACKET_SERVER_CONSOLE,
00061 ADMIN_PACKET_SERVER_CMD_NAMES,
00062 ADMIN_PACKET_SERVER_CMD_LOGGING,
00063 ADMIN_PACKET_SERVER_GAMESCRIPT,
00064 ADMIN_PACKET_SERVER_RCON_END,
00065 ADMIN_PACKET_SERVER_PONG,
00066
00067 INVALID_ADMIN_PACKET = 0xFF,
00068 };
00069
00071 enum AdminStatus {
00072 ADMIN_STATUS_INACTIVE,
00073 ADMIN_STATUS_ACTIVE,
00074 ADMIN_STATUS_END,
00075 };
00076
00078 enum AdminUpdateType {
00079 ADMIN_UPDATE_DATE,
00080 ADMIN_UPDATE_CLIENT_INFO,
00081 ADMIN_UPDATE_COMPANY_INFO,
00082 ADMIN_UPDATE_COMPANY_ECONOMY,
00083 ADMIN_UPDATE_COMPANY_STATS,
00084 ADMIN_UPDATE_CHAT,
00085 ADMIN_UPDATE_CONSOLE,
00086 ADMIN_UPDATE_CMD_NAMES,
00087 ADMIN_UPDATE_CMD_LOGGING,
00088 ADMIN_UPDATE_GAMESCRIPT,
00089 ADMIN_UPDATE_END,
00090 };
00091
00093 enum AdminUpdateFrequency {
00094 ADMIN_FREQUENCY_POLL = 0x01,
00095 ADMIN_FREQUENCY_DAILY = 0x02,
00096 ADMIN_FREQUENCY_WEEKLY = 0x04,
00097 ADMIN_FREQUENCY_MONTHLY = 0x08,
00098 ADMIN_FREQUENCY_QUARTERLY = 0x10,
00099 ADMIN_FREQUENCY_ANUALLY = 0x20,
00100 ADMIN_FREQUENCY_AUTOMATIC = 0x40,
00101 };
00102 DECLARE_ENUM_AS_BIT_SET(AdminUpdateFrequency)
00103
00104
00105 enum AdminCompanyRemoveReason {
00106 ADMIN_CRR_MANUAL,
00107 ADMIN_CRR_AUTOCLEAN,
00108 ADMIN_CRR_BANKRUPT,
00109
00110 ADMIN_CRR_END,
00111 };
00112
00114 class NetworkAdminSocketHandler : public NetworkTCPSocketHandler {
00115 protected:
00116 char admin_name[NETWORK_CLIENT_NAME_LENGTH];
00117 char admin_version[NETWORK_REVISION_LENGTH];
00118 AdminStatus status;
00119
00120 NetworkRecvStatus ReceiveInvalidPacket(PacketAdminType type);
00121
00130 virtual NetworkRecvStatus Receive_ADMIN_JOIN(Packet *p);
00131
00137 virtual NetworkRecvStatus Receive_ADMIN_QUIT(Packet *p);
00138
00146 virtual NetworkRecvStatus Receive_ADMIN_UPDATE_FREQUENCY(Packet *p);
00147
00157 virtual NetworkRecvStatus Receive_ADMIN_POLL(Packet *p);
00158
00168 virtual NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p);
00169
00176 virtual NetworkRecvStatus Receive_ADMIN_RCON(Packet *p);
00177
00184 virtual NetworkRecvStatus Receive_ADMIN_GAMESCRIPT(Packet *p);
00185
00192 virtual NetworkRecvStatus Receive_ADMIN_PING(Packet *p);
00193
00199 virtual NetworkRecvStatus Receive_SERVER_FULL(Packet *p);
00200
00206 virtual NetworkRecvStatus Receive_SERVER_BANNED(Packet *p);
00207
00214 virtual NetworkRecvStatus Receive_SERVER_ERROR(Packet *p);
00215
00225 virtual NetworkRecvStatus Receive_SERVER_PROTOCOL(Packet *p);
00226
00241 virtual NetworkRecvStatus Receive_SERVER_WELCOME(Packet *p);
00242
00248 virtual NetworkRecvStatus Receive_SERVER_NEWGAME(Packet *p);
00249
00255 virtual NetworkRecvStatus Receive_SERVER_SHUTDOWN(Packet *p);
00256
00263 virtual NetworkRecvStatus Receive_SERVER_DATE(Packet *p);
00264
00271 virtual NetworkRecvStatus Receive_SERVER_CLIENT_JOIN(Packet *p);
00272
00284 virtual NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet *p);
00285
00294 virtual NetworkRecvStatus Receive_SERVER_CLIENT_UPDATE(Packet *p);
00295
00302 virtual NetworkRecvStatus Receive_SERVER_CLIENT_QUIT(Packet *p);
00303
00311 virtual NetworkRecvStatus Receive_SERVER_CLIENT_ERROR(Packet *p);
00312
00319 virtual NetworkRecvStatus Receive_SERVER_COMPANY_NEW(Packet *p);
00320
00333 virtual NetworkRecvStatus Receive_SERVER_COMPANY_INFO(Packet *p);
00334
00350 virtual NetworkRecvStatus Receive_SERVER_COMPANY_UPDATE(Packet *p);
00351
00359 virtual NetworkRecvStatus Receive_SERVER_COMPANY_REMOVE(Packet *p);
00360
00377 virtual NetworkRecvStatus Receive_SERVER_COMPANY_ECONOMY(Packet *p);
00378
00395 virtual NetworkRecvStatus Receive_SERVER_COMPANY_STATS(Packet *p);
00396
00407 virtual NetworkRecvStatus Receive_SERVER_CHAT(Packet *p);
00408
00416 virtual NetworkRecvStatus Receive_SERVER_RCON(Packet *p);
00417
00425 virtual NetworkRecvStatus Receive_SERVER_CONSOLE(Packet *p);
00426
00444 virtual NetworkRecvStatus Receive_SERVER_CMD_NAMES(Packet *p);
00445
00466 virtual NetworkRecvStatus Receive_SERVER_CMD_LOGGING(Packet *p);
00467
00474 virtual NetworkRecvStatus Receive_SERVER_PONG(Packet *p);
00475
00482 virtual NetworkRecvStatus Receive_SERVER_RCON_END(Packet *p);
00483
00484 NetworkRecvStatus HandlePacket(Packet *p);
00485 public:
00486 NetworkRecvStatus CloseConnection(bool error = true);
00487
00488 NetworkAdminSocketHandler(SOCKET s);
00489 ~NetworkAdminSocketHandler();
00490
00491 NetworkRecvStatus ReceivePackets();
00492
00497 AdminStatus GetAdminStatus() const
00498 {
00499 return this->status;
00500 }
00501 };
00502
00503 #endif
00504
00505 #endif