|
|
|
@ -43,8 +43,6 @@
|
|
|
|
|
bool _ddc_fastforward = true;
|
|
|
|
|
#endif /* DEBUG_DUMP_COMMANDS */
|
|
|
|
|
|
|
|
|
|
DECLARE_POSTFIX_INCREMENT(ClientID)
|
|
|
|
|
|
|
|
|
|
assert_compile(NetworkClientInfoPool::MAX_SIZE == NetworkClientSocketPool::MAX_SIZE);
|
|
|
|
|
|
|
|
|
|
NetworkClientInfoPool _networkclientinfo_pool("NetworkClientInfo");
|
|
|
|
@ -94,8 +92,6 @@ static SocketList _listensockets;
|
|
|
|
|
|
|
|
|
|
/* The amount of clients connected */
|
|
|
|
|
static byte _network_clients_connected = 0;
|
|
|
|
|
/* The identifier counter for new clients (is never decreased) */
|
|
|
|
|
static ClientID _network_client_id = CLIENT_ID_FIRST;
|
|
|
|
|
|
|
|
|
|
/* Some externs / forwards */
|
|
|
|
|
extern void StateGameLoop();
|
|
|
|
@ -483,31 +479,19 @@ void ParseConnectionString(const char **company, const char **port, char *connec
|
|
|
|
|
* Used both by the server and the client */
|
|
|
|
|
static NetworkClientSocket *NetworkAllocClient(SOCKET s)
|
|
|
|
|
{
|
|
|
|
|
if (_network_server) {
|
|
|
|
|
/* Can we handle a new client? */
|
|
|
|
|
if (_network_clients_connected >= MAX_CLIENTS) return NULL;
|
|
|
|
|
if (_network_game_info.clients_on >= _settings_client.network.max_clients) return NULL;
|
|
|
|
|
|
|
|
|
|
/* Register the login */
|
|
|
|
|
_network_clients_connected++;
|
|
|
|
|
if (!_network_server) {
|
|
|
|
|
return new ClientNetworkGameSocketHandler(s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NetworkClientSocket *cs = new NetworkClientSocket(INVALID_CLIENT_ID);
|
|
|
|
|
cs->sock = s;
|
|
|
|
|
cs->last_frame = _frame_counter;
|
|
|
|
|
cs->last_frame_server = _frame_counter;
|
|
|
|
|
/* Can we handle a new client? */
|
|
|
|
|
if (_network_clients_connected >= MAX_CLIENTS) return NULL;
|
|
|
|
|
if (_network_game_info.clients_on >= _settings_client.network.max_clients) return NULL;
|
|
|
|
|
|
|
|
|
|
if (_network_server) {
|
|
|
|
|
cs->client_id = _network_client_id++;
|
|
|
|
|
NetworkClientInfo *ci = new NetworkClientInfo(cs->client_id);
|
|
|
|
|
cs->SetInfo(ci);
|
|
|
|
|
ci->client_playas = COMPANY_INACTIVE_CLIENT;
|
|
|
|
|
ci->join_date = _date;
|
|
|
|
|
|
|
|
|
|
SetWindowDirty(WC_CLIENT_LIST, 0);
|
|
|
|
|
}
|
|
|
|
|
/* Register the login */
|
|
|
|
|
_network_clients_connected++;
|
|
|
|
|
|
|
|
|
|
return cs;
|
|
|
|
|
SetWindowDirty(WC_CLIENT_LIST, 0);
|
|
|
|
|
return new ServerNetworkGameSocketHandler(s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Close a connection */
|
|
|
|
|