tcp_content.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00014 #ifndef NETWORK_CORE_CONTENT_H
00015 #define NETWORK_CORE_CONTENT_H
00016
00017 #include "os_abstraction.h"
00018 #include "tcp.h"
00019 #include "packet.h"
00020 #include "../../debug.h"
00021
00022 #ifdef ENABLE_NETWORK
00023
00025 enum ContentType {
00026 CONTENT_TYPE_BEGIN = 1,
00027 CONTENT_TYPE_BASE_GRAPHICS = 1,
00028 CONTENT_TYPE_NEWGRF = 2,
00029 CONTENT_TYPE_AI = 3,
00030 CONTENT_TYPE_AI_LIBRARY = 4,
00031 CONTENT_TYPE_SCENARIO = 5,
00032 CONTENT_TYPE_HEIGHTMAP = 6,
00033 CONTENT_TYPE_BASE_SOUNDS = 7,
00034 CONTENT_TYPE_BASE_MUSIC = 8,
00035 CONTENT_TYPE_END,
00036 };
00037
00039 enum PacketContentType {
00040 PACKET_CONTENT_CLIENT_INFO_LIST,
00041 PACKET_CONTENT_CLIENT_INFO_ID,
00042 PACKET_CONTENT_CLIENT_INFO_EXTID,
00043 PACKET_CONTENT_CLIENT_INFO_EXTID_MD5,
00044 PACKET_CONTENT_SERVER_INFO,
00045 PACKET_CONTENT_CLIENT_CONTENT,
00046 PACKET_CONTENT_SERVER_CONTENT,
00047 PACKET_CONTENT_END
00048 };
00049
00050 #define DECLARE_CONTENT_RECEIVE_COMMAND(type) virtual bool NetworkPacketReceive_## type ##_command(Packet *p)
00051 #define DEF_CONTENT_RECEIVE_COMMAND(cls, type) bool cls ##NetworkContentSocketHandler::NetworkPacketReceive_ ## type ## _command(Packet *p)
00052
00053 enum ContentID {
00054 INVALID_CONTENT_ID = UINT32_MAX
00055 };
00056
00058 struct ContentInfo {
00059 enum State {
00060 UNSELECTED,
00061 SELECTED,
00062 AUTOSELECTED,
00063 ALREADY_HERE,
00064 DOES_NOT_EXIST,
00065 INVALID
00066 };
00067
00068 ContentType type;
00069 ContentID id;
00070 uint32 filesize;
00071 char filename[48];
00072 char name[32];
00073 char version[16];
00074 char url[96];
00075 char description[512];
00076 uint32 unique_id;
00077 byte md5sum[16];
00078 uint8 dependency_count;
00079 ContentID *dependencies;
00080 uint8 tag_count;
00081 char (*tags)[32];
00082 State state;
00083 bool upgrade;
00084
00086 ContentInfo();
00087
00089 ~ContentInfo();
00090
00091 void TransferFrom(ContentInfo *other);
00092
00097 size_t Size() const;
00098
00103 bool IsSelected() const;
00104
00109 bool IsValid() const;
00110 };
00111
00113 class NetworkContentSocketHandler : public NetworkTCPSocketHandler {
00114 protected:
00115 NetworkAddress client_addr;
00116 virtual void Close();
00117
00123 DECLARE_CONTENT_RECEIVE_COMMAND(PACKET_CONTENT_CLIENT_INFO_LIST);
00124
00130 DECLARE_CONTENT_RECEIVE_COMMAND(PACKET_CONTENT_CLIENT_INFO_ID);
00131
00142 DECLARE_CONTENT_RECEIVE_COMMAND(PACKET_CONTENT_CLIENT_INFO_EXTID);
00143
00155 DECLARE_CONTENT_RECEIVE_COMMAND(PACKET_CONTENT_CLIENT_INFO_EXTID_MD5);
00156
00171 DECLARE_CONTENT_RECEIVE_COMMAND(PACKET_CONTENT_SERVER_INFO);
00172
00178 DECLARE_CONTENT_RECEIVE_COMMAND(PACKET_CONTENT_CLIENT_CONTENT);
00179
00188 DECLARE_CONTENT_RECEIVE_COMMAND(PACKET_CONTENT_SERVER_CONTENT);
00189
00196 bool HandlePacket(Packet *p);
00197 public:
00203 NetworkContentSocketHandler(SOCKET s = INVALID_SOCKET, const NetworkAddress &address = NetworkAddress()) :
00204 NetworkTCPSocketHandler(s),
00205 client_addr(address)
00206 {
00207 }
00208
00210 virtual ~NetworkContentSocketHandler() { this->Close(); }
00211
00213 void Recv_Packets();
00214 };
00215
00216 #endif
00217
00218 #endif