src/network/network.cpp
changeset 9451 0d6806ba5504
parent 9429 5657213ac57f
child 9481 25ed9b0c242a
equal deleted inserted replaced
9450:9e7d05b0b1e5 9451:0d6806ba5504
    45 bool _network_server;     ///< network-server is active
    45 bool _network_server;     ///< network-server is active
    46 bool _network_available;  ///< is network mode available?
    46 bool _network_available;  ///< is network mode available?
    47 bool _network_dedicated;  ///< are we a dedicated server?
    47 bool _network_dedicated;  ///< are we a dedicated server?
    48 bool _network_advertise;  ///< is the server advertising to the master server?
    48 bool _network_advertise;  ///< is the server advertising to the master server?
    49 bool _is_network_server;  ///< Does this client wants to be a network-server?
    49 bool _is_network_server;  ///< Does this client wants to be a network-server?
    50 NetworkGameInfo _network_game_info;
    50 NetworkServerGameInfo _network_game_info;
    51 NetworkPlayerInfo _network_player_info[MAX_PLAYERS];
    51 NetworkPlayerInfo _network_player_info[MAX_PLAYERS];
    52 NetworkClientInfo _network_client_info[MAX_CLIENT_INFO];
    52 NetworkClientInfo _network_client_info[MAX_CLIENT_INFO];
    53 uint16 _network_own_client_index;
    53 uint16 _network_own_client_index;
    54 uint16 _redirect_console_to_client;
    54 uint16 _redirect_console_to_client;
    55 bool _network_need_advertise;
    55 bool _network_need_advertise;
   622 	byte client_no = 0;
   622 	byte client_no = 0;
   623 
   623 
   624 	if (_network_server) {
   624 	if (_network_server) {
   625 		// Can we handle a new client?
   625 		// Can we handle a new client?
   626 		if (_network_clients_connected >= MAX_CLIENTS) return NULL;
   626 		if (_network_clients_connected >= MAX_CLIENTS) return NULL;
   627 		if (_network_game_info.clients_on >= _network_game_info.clients_max) return NULL;
   627 		if (_network_game_info.clients_on >= _settings_client.network.max_clients) return NULL;
   628 
   628 
   629 		// Register the login
   629 		// Register the login
   630 		client_no = _network_clients_connected++;
   630 		client_no = _network_clients_connected++;
   631 	}
   631 	}
   632 
   632 
  1017 
  1017 
  1018 static void NetworkInitGameInfo()
  1018 static void NetworkInitGameInfo()
  1019 {
  1019 {
  1020 	NetworkClientInfo *ci;
  1020 	NetworkClientInfo *ci;
  1021 
  1021 
  1022 	_network_game_info.clients_max    = _settings_client.network.max_clients;
  1022 	if (StrEmpty(_settings_client.network.server_name)) {
  1023 	_network_game_info.companies_max  = _settings_client.network.max_companies;
  1023 		snprintf(_settings_client.network.server_name, sizeof(_settings_client.network.server_name), "Unnamed Server");
  1024 	_network_game_info.spectators_max = _settings_client.network.max_spectators;
  1024 	}
  1025 	_network_game_info.server_lang    = _settings_client.network.server_lang;
  1025 
  1026 	ttd_strlcpy(_network_game_info.server_name, _settings_client.network.server_name, sizeof(_network_game_info.server_name));
  1026 	/* The server is a client too */
  1027 	ttd_strlcpy(_network_game_info.server_password, _settings_client.network.server_password, sizeof(_network_game_info.server_password));
  1027 	_network_game_info.clients_on = _network_dedicated ? 0 : 1;
  1028 	ttd_strlcpy(_network_game_info.rcon_password, _settings_client.network.rcon_password, sizeof(_network_game_info.rcon_password));
       
  1029 	if (StrEmpty(_network_game_info.server_name)) {
       
  1030 		snprintf(_network_game_info.server_name, sizeof(_network_game_info.server_name), "Unnamed Server");
       
  1031 	}
       
  1032 
       
  1033 	ttd_strlcpy(_network_game_info.server_revision, _openttd_revision, sizeof(_network_game_info.server_revision));
       
  1034 
       
  1035 	// The server is a client too ;)
       
  1036 	if (_network_dedicated) {
       
  1037 		_network_game_info.clients_on = 0;
       
  1038 		_network_game_info.companies_on = 0;
       
  1039 		_network_game_info.dedicated = true;
       
  1040 	} else {
       
  1041 		_network_game_info.clients_on = 1;
       
  1042 		_network_game_info.companies_on = 1;
       
  1043 		_network_game_info.dedicated = false;
       
  1044 	}
       
  1045 
       
  1046 	_network_game_info.spectators_on = 0;
       
  1047 
       
  1048 	_network_game_info.game_date = _date;
       
  1049 	_network_game_info.start_date = ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1);
  1028 	_network_game_info.start_date = ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1);
  1050 	_network_game_info.map_width = MapSizeX();
       
  1051 	_network_game_info.map_height = MapSizeY();
       
  1052 	_network_game_info.map_set = _settings_game.game_creation.landscape;
       
  1053 
       
  1054 	_network_game_info.use_password = !StrEmpty(_settings_client.network.server_password);
       
  1055 
  1029 
  1056 	// We use _network_client_info[MAX_CLIENT_INFO - 1] to store the server-data in it
  1030 	// We use _network_client_info[MAX_CLIENT_INFO - 1] to store the server-data in it
  1057 	//  The index is NETWORK_SERVER_INDEX ( = 1)
  1031 	//  The index is NETWORK_SERVER_INDEX ( = 1)
  1058 	ci = &_network_client_info[MAX_CLIENT_INFO - 1];
  1032 	ci = &_network_client_info[MAX_CLIENT_INFO - 1];
  1059 	memset(ci, 0, sizeof(*ci));
  1033 	memset(ci, 0, sizeof(*ci));
  1451 	snprintf(_settings_client.network.server_bind_ip, sizeof(_settings_client.network.server_bind_ip), "%s", inet_ntoa(*(struct in_addr *)&_network_server_bind_ip));
  1425 	snprintf(_settings_client.network.server_bind_ip, sizeof(_settings_client.network.server_bind_ip), "%s", inet_ntoa(*(struct in_addr *)&_network_server_bind_ip));
  1452 
  1426 
  1453 	/* Generate an unique id when there is none yet */
  1427 	/* Generate an unique id when there is none yet */
  1454 	if (StrEmpty(_settings_client.network.network_id)) NetworkGenerateUniqueId();
  1428 	if (StrEmpty(_settings_client.network.network_id)) NetworkGenerateUniqueId();
  1455 
  1429 
  1456 	{
  1430 	memset(&_network_game_info, 0, sizeof(_network_game_info));
  1457 		byte cl_max = _network_game_info.clients_max;
       
  1458 		byte cp_max = _network_game_info.companies_max;
       
  1459 		byte sp_max = _network_game_info.spectators_max;
       
  1460 		byte s_lang = _network_game_info.server_lang;
       
  1461 
       
  1462 		memset(&_network_game_info, 0, sizeof(_network_game_info));
       
  1463 		_network_game_info.clients_max = cl_max;
       
  1464 		_network_game_info.companies_max = cp_max;
       
  1465 		_network_game_info.spectators_max = sp_max;
       
  1466 		_network_game_info.server_lang = s_lang;
       
  1467 	}
       
  1468 
       
  1469 
  1431 
  1470 	NetworkInitialize();
  1432 	NetworkInitialize();
  1471 	DEBUG(net, 3, "[core] network online, multiplayer available");
  1433 	DEBUG(net, 3, "[core] network online, multiplayer available");
  1472 	NetworkFindIPs();
  1434 	NetworkFindIPs();
  1473 }
  1435 }