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 ADMIN_PACKET_SERVER_CMD_NAMES,
00060 ADMIN_PACKET_SERVER_CMD_LOGGING,
00061
00062 INVALID_ADMIN_PACKET = 0xFF,
00063 };
00064
00066 enum AdminStatus {
00067 ADMIN_STATUS_INACTIVE,
00068 ADMIN_STATUS_ACTIVE,
00069 ADMIN_STATUS_END
00070 };
00071
00073 enum AdminUpdateType {
00074 ADMIN_UPDATE_DATE,
00075 ADMIN_UPDATE_CLIENT_INFO,
00076 ADMIN_UPDATE_COMPANY_INFO,
00077 ADMIN_UPDATE_COMPANY_ECONOMY,
00078 ADMIN_UPDATE_COMPANY_STATS,
00079 ADMIN_UPDATE_CHAT,
00080 ADMIN_UPDATE_CONSOLE,
00081 ADMIN_UPDATE_CMD_NAMES,
00082 ADMIN_UPDATE_CMD_LOGGING,
00083 ADMIN_UPDATE_END
00084 };
00085
00087 enum AdminUpdateFrequency {
00088 ADMIN_FREQUENCY_POLL = 0x01,
00089 ADMIN_FREQUENCY_DAILY = 0x02,
00090 ADMIN_FREQUENCY_WEEKLY = 0x04,
00091 ADMIN_FREQUENCY_MONTHLY = 0x08,
00092 ADMIN_FREQUENCY_QUARTERLY = 0x10,
00093 ADMIN_FREQUENCY_ANUALLY = 0x20,
00094 ADMIN_FREQUENCY_AUTOMATIC = 0x40,
00095 };
00096 DECLARE_ENUM_AS_BIT_SET(AdminUpdateFrequency)
00097
00098
00099 enum AdminCompanyRemoveReason {
00100 ADMIN_CRR_MANUAL,
00101 ADMIN_CRR_AUTOCLEAN,
00102 ADMIN_CRR_BANKRUPT,
00103
00104 ADMIN_CRR_END
00105 };
00106
00108 class NetworkAdminSocketHandler : public NetworkTCPSocketHandler {
00109 protected:
00110 char admin_name[NETWORK_CLIENT_NAME_LENGTH];
00111 char admin_version[NETWORK_REVISION_LENGTH];
00112 AdminStatus status;
00113
00114 NetworkRecvStatus ReceiveInvalidPacket(PacketAdminType type);
00115
00124 virtual NetworkRecvStatus Receive_ADMIN_JOIN(Packet *p);
00125
00131 virtual NetworkRecvStatus Receive_ADMIN_QUIT(Packet *p);
00132
00140 virtual NetworkRecvStatus Receive_ADMIN_UPDATE_FREQUENCY(Packet *p);
00141
00151 virtual NetworkRecvStatus Receive_ADMIN_POLL(Packet *p);
00152
00162 virtual NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p);
00163
00170 virtual NetworkRecvStatus Receive_ADMIN_RCON(Packet *p);
00171
00177 virtual NetworkRecvStatus Receive_SERVER_FULL(Packet *p);
00178
00184 virtual NetworkRecvStatus Receive_SERVER_BANNED(Packet *p);
00185
00192 virtual NetworkRecvStatus Receive_SERVER_ERROR(Packet *p);
00193
00203 virtual NetworkRecvStatus Receive_SERVER_PROTOCOL(Packet *p);
00204
00219 virtual NetworkRecvStatus Receive_SERVER_WELCOME(Packet *p);
00220
00226 virtual NetworkRecvStatus Receive_SERVER_NEWGAME(Packet *p);
00227
00233 virtual NetworkRecvStatus Receive_SERVER_SHUTDOWN(Packet *p);
00234
00241 virtual NetworkRecvStatus Receive_SERVER_DATE(Packet *p);
00242
00249 virtual NetworkRecvStatus Receive_SERVER_CLIENT_JOIN(Packet *p);
00250
00262 virtual NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet *p);
00263
00272 virtual NetworkRecvStatus Receive_SERVER_CLIENT_UPDATE(Packet *p);
00273
00280 virtual NetworkRecvStatus Receive_SERVER_CLIENT_QUIT(Packet *p);
00281
00289 virtual NetworkRecvStatus Receive_SERVER_CLIENT_ERROR(Packet *p);
00290
00297 virtual NetworkRecvStatus Receive_SERVER_COMPANY_NEW(Packet *p);
00298
00311 virtual NetworkRecvStatus Receive_SERVER_COMPANY_INFO(Packet *p);
00312
00328 virtual NetworkRecvStatus Receive_SERVER_COMPANY_UPDATE(Packet *p);
00329
00337 virtual NetworkRecvStatus Receive_SERVER_COMPANY_REMOVE(Packet *p);
00338
00355 virtual NetworkRecvStatus Receive_SERVER_COMPANY_ECONOMY(Packet *p);
00356
00373 virtual NetworkRecvStatus Receive_SERVER_COMPANY_STATS(Packet *p);
00374
00385 virtual NetworkRecvStatus Receive_SERVER_CHAT(Packet *p);
00386
00394 virtual NetworkRecvStatus Receive_SERVER_RCON(Packet *p);
00395
00403 virtual NetworkRecvStatus Receive_SERVER_CONSOLE(Packet *p);
00404
00422 virtual NetworkRecvStatus Receive_SERVER_CMD_NAMES(Packet *p);
00423
00444 virtual NetworkRecvStatus Receive_SERVER_CMD_LOGGING(Packet *p);
00445
00446 NetworkRecvStatus HandlePacket(Packet *p);
00447 public:
00448 NetworkRecvStatus CloseConnection(bool error = true);
00449
00450 NetworkAdminSocketHandler(SOCKET s);
00451 ~NetworkAdminSocketHandler();
00452
00453 NetworkRecvStatus ReceivePackets();
00454
00459 AdminStatus GetAdminStatus() const
00460 {
00461 return this->status;
00462 }
00463 };
00464
00465 #endif
00466
00467 #endif