udp.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00071 #ifndef NETWORK_CORE_UDP_H
00072 #define NETWORK_CORE_UDP_H
00073
00074 #include "os_abstraction.h"
00075 #include "address.h"
00076 #include "core.h"
00077 #include "game.h"
00078 #include "packet.h"
00079 #include "../../debug.h"
00080
00081 #ifdef ENABLE_NETWORK
00082
00084 enum PacketUDPType {
00085 PACKET_UDP_CLIENT_FIND_SERVER,
00086 PACKET_UDP_SERVER_RESPONSE,
00087 PACKET_UDP_CLIENT_DETAIL_INFO,
00088 PACKET_UDP_SERVER_DETAIL_INFO,
00089 PACKET_UDP_SERVER_REGISTER,
00090 PACKET_UDP_MASTER_ACK_REGISTER,
00091 PACKET_UDP_CLIENT_GET_LIST,
00092 PACKET_UDP_MASTER_RESPONSE_LIST,
00093 PACKET_UDP_SERVER_UNREGISTER,
00094 PACKET_UDP_CLIENT_GET_NEWGRFS,
00095 PACKET_UDP_SERVER_NEWGRFS,
00096 PACKET_UDP_MASTER_SESSION_KEY,
00097 PACKET_UDP_END
00098 };
00099
00101 enum ServerListType {
00102 SLT_IPv4 = 0,
00103 SLT_IPv6 = 1,
00104 SLT_AUTODETECT,
00105
00106 SLT_END = SLT_AUTODETECT
00107 };
00108
00109 #define DECLARE_UDP_RECEIVE_COMMAND(type) virtual void NetworkPacketReceive_## type ##_command(Packet *p, NetworkAddress *client_addr)
00110 #define DEF_UDP_RECEIVE_COMMAND(cls, type) void cls ##NetworkUDPSocketHandler::NetworkPacketReceive_ ## type ## _command(Packet *p, NetworkAddress *client_addr)
00111
00113 class NetworkUDPSocketHandler : public NetworkSocketHandler {
00114 protected:
00116 NetworkAddressList bind;
00118 SocketList sockets;
00119
00120 NetworkRecvStatus CloseConnection(bool error = true);
00121
00122
00123
00124 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_FIND_SERVER);
00125 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_RESPONSE);
00126 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_DETAIL_INFO);
00127 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_DETAIL_INFO);
00128 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_REGISTER);
00129 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_ACK_REGISTER);
00130 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_GET_LIST);
00131 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_RESPONSE_LIST);
00132 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_UNREGISTER);
00133 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_GET_NEWGRFS);
00134 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_NEWGRFS);
00135 DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_SESSION_KEY);
00136
00137 void HandleUDPPacket(Packet *p, NetworkAddress *client_addr);
00138
00146 virtual void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config) { NOT_REACHED(); }
00147 public:
00148 NetworkUDPSocketHandler(NetworkAddressList *bind = NULL);
00149
00151 virtual ~NetworkUDPSocketHandler() { this->Close(); }
00152
00153 bool Listen();
00154 void Close();
00155
00156 void SendPacket(Packet *p, NetworkAddress *recv, bool all = false, bool broadcast = false);
00157 void ReceivePackets();
00158
00159 void Send_NetworkGameInfo(Packet *p, const NetworkGameInfo *info);
00160 void Recv_NetworkGameInfo(Packet *p, NetworkGameInfo *info);
00161 };
00162
00163 #endif
00164
00165 #endif