00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef NETWORK_INTERNAL_H
00013 #define NETWORK_INTERNAL_H
00014
00015 #include "network.h"
00016 #include "network_func.h"
00017 #include "network_base.h"
00018 #include "core/os_abstraction.h"
00019 #include "core/core.h"
00020 #include "core/config.h"
00021 #include "core/packet.h"
00022 #include "core/tcp_game.h"
00023
00024 #include "../command_type.h"
00025
00026 #ifdef ENABLE_NETWORK
00027
00028 #ifdef RANDOM_DEBUG
00029
00038 #define ENABLE_NETWORK_SYNC_EVERY_FRAME
00039
00044 #define NETWORK_SEND_DOUBLE_SEED
00045 #endif
00046
00047 enum MapPacket {
00048 MAP_PACKET_START,
00049 MAP_PACKET_NORMAL,
00050 MAP_PACKET_END,
00051 };
00052
00053
00054 enum NetworkJoinStatus {
00055 NETWORK_JOIN_STATUS_CONNECTING,
00056 NETWORK_JOIN_STATUS_AUTHORIZING,
00057 NETWORK_JOIN_STATUS_WAITING,
00058 NETWORK_JOIN_STATUS_DOWNLOADING,
00059 NETWORK_JOIN_STATUS_PROCESSING,
00060 NETWORK_JOIN_STATUS_REGISTERING,
00061
00062 NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO,
00063 NETWORK_JOIN_STATUS_END,
00064 };
00065
00067 enum NetworkLanguage {
00068 NETLANG_ANY = 0,
00069 NETLANG_ENGLISH,
00070 NETLANG_GERMAN,
00071 NETLANG_FRENCH,
00072 NETLANG_BRAZILIAN,
00073 NETLANG_BULGARIAN,
00074 NETLANG_CHINESE,
00075 NETLANG_CZECH,
00076 NETLANG_DANISH,
00077 NETLANG_DUTCH,
00078 NETLANG_ESPERANTO,
00079 NETLANG_FINNISH,
00080 NETLANG_HUNGARIAN,
00081 NETLANG_ICELANDIC,
00082 NETLANG_ITALIAN,
00083 NETLANG_JAPANESE,
00084 NETLANG_KOREAN,
00085 NETLANG_LITHUANIAN,
00086 NETLANG_NORWEGIAN,
00087 NETLANG_POLISH,
00088 NETLANG_PORTUGUESE,
00089 NETLANG_ROMANIAN,
00090 NETLANG_RUSSIAN,
00091 NETLANG_SLOVAK,
00092 NETLANG_SLOVENIAN,
00093 NETLANG_SPANISH,
00094 NETLANG_SWEDISH,
00095 NETLANG_TURKISH,
00096 NETLANG_UKRAINIAN,
00097 NETLANG_AFRIKAANS,
00098 NETLANG_CROATIAN,
00099 NETLANG_CATALAN,
00100 NETLANG_ESTONIAN,
00101 NETLANG_GALICIAN,
00102 NETLANG_GREEK,
00103 NETLANG_LATVIAN,
00104 NETLANG_COUNT
00105 };
00106
00107 extern uint32 _frame_counter_server;
00108 extern uint32 _frame_counter_max;
00109 extern uint32 _frame_counter;
00110
00111 extern uint32 _last_sync_frame;
00112
00113
00114 extern NetworkAddressList _broadcast_list;
00115
00116 extern uint32 _sync_seed_1;
00117 #ifdef NETWORK_SEND_DOUBLE_SEED
00118 extern uint32 _sync_seed_2;
00119 #endif
00120 extern uint32 _sync_frame;
00121 extern bool _network_first_time;
00122
00123 extern NetworkJoinStatus _network_join_status;
00124 extern uint8 _network_join_waiting;
00125 extern uint32 _network_join_bytes;
00126 extern uint32 _network_join_bytes_total;
00127
00128 extern uint8 _network_reconnect;
00129
00130 extern bool _network_udp_server;
00131 extern uint16 _network_udp_broadcast;
00132
00133 extern uint8 _network_advertise_retries;
00134
00135 extern CompanyMask _network_company_passworded;
00136
00137 void NetworkTCPQueryServer(NetworkAddress address);
00138
00139 void GetBindAddresses(NetworkAddressList *addresses, uint16 port);
00140 void NetworkAddServer(const char *b);
00141 void NetworkRebuildHostList();
00142 void UpdateNetworkGameWindow(bool unselect);
00143
00144 bool IsNetworkCompatibleVersion(const char *version);
00145
00146
00150 struct CommandPacket : CommandContainer {
00151 CommandPacket *next;
00152 CompanyByte company;
00153 uint32 frame;
00154 bool my_cmd;
00155 };
00156
00157 void NetworkAddCommandQueue(CommandPacket cp, NetworkClientSocket *cs = NULL);
00158 void NetworkExecuteLocalCommandQueue();
00159 void NetworkFreeLocalCommandQueue();
00160
00161
00162 void NetworkCloseClient(NetworkClientSocket *cs, bool error);
00163 void NetworkTextMessage(NetworkAction action, ConsoleColour colour, bool self_send, const char *name, const char *str = "", int64 data = 0);
00164 void NetworkGetClientName(char *clientname, size_t size, const NetworkClientSocket *cs);
00165 uint NetworkCalculateLag(const NetworkClientSocket *cs);
00166 byte NetworkGetCurrentLanguageIndex();
00167 NetworkClientSocket *NetworkFindClientStateFromClientID(ClientID client_id);
00168 StringID GetNetworkErrorMsg(NetworkErrorCode err);
00169 bool NetworkFindName(char new_name[NETWORK_CLIENT_NAME_LENGTH]);
00170
00171
00172 #define DEF_CLIENT_RECEIVE_COMMAND(type) NetworkRecvStatus NetworkPacketReceive_ ## type ## _command(Packet *p)
00173 #define DEF_CLIENT_SEND_COMMAND(type) void NetworkPacketSend_ ## type ## _command()
00174 #define DEF_CLIENT_SEND_COMMAND_PARAM(type) void NetworkPacketSend_ ## type ## _command
00175 #define DEF_SERVER_RECEIVE_COMMAND(type) NetworkRecvStatus NetworkPacketReceive_ ## type ## _command(NetworkClientSocket *cs, Packet *p)
00176 #define DEF_SERVER_SEND_COMMAND(type) void NetworkPacketSend_ ## type ## _command(NetworkClientSocket *cs)
00177 #define DEF_SERVER_SEND_COMMAND_PARAM(type) void NetworkPacketSend_ ## type ## _command
00178
00179 #define SEND_COMMAND(type) NetworkPacketSend_ ## type ## _command
00180 #define RECEIVE_COMMAND(type) NetworkPacketReceive_ ## type ## _command
00181
00182 #endif
00183 #endif