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 } |