From 853c11d301cd5ad662b1c73b58f2581f0e49997a Mon Sep 17 00:00:00 2001 From: dominik Date: Sat, 18 Dec 2004 18:58:03 +0000 Subject: (svn r1162) The server list can now be automatically filled from the config file. Add a section [servers] with the addresses each in a new line. Those will be checked upon OpenTTD startup. --- network.c | 28 ++++++++++++++++++++++++++++ network.h | 3 +++ network_gui.c | 18 +----------------- settings.c | 18 +++++++++--------- 4 files changed, 41 insertions(+), 26 deletions(-) diff --git a/network.c b/network.c index c8b36eb65..bbee653ba 100644 --- a/network.c +++ b/network.c @@ -707,6 +707,7 @@ void NetworkClose(void) void NetworkInitialize(void) { ClientState *cs; + uint i; _local_command_queue = NULL; @@ -730,6 +731,12 @@ void NetworkInitialize(void) InitPlayerRandoms(); NetworkUDPInitialize(); + + // add all servers from the config file to our list + for (i=0; i != lengthof(_network_server_list); i++) { + if (_network_server_list[i] == NULL) break; + AddServer(_network_server_list[i]); + } } // Query a server to fetch his game-info @@ -766,6 +773,27 @@ void NetworkQueryServer(const byte* host, unsigned short port, bool game_info) NetworkDisconnect(); } +// validates an address entered as a string and adds the server to +// the list +void AddServer(byte *b) +{ + if (*b != '\0') { + const byte *port = NULL; + const byte *player = NULL; + uint16 rport; + + ttd_strlcpy(_network_default_ip, b, lengthof(_network_default_ip)); + rport = NETWORK_DEFAULT_PORT; + + ParseConnectionString(&player, &port, b); + + if (player != NULL) _network_playas = atoi(player); + if (port != NULL) rport = atoi(port); + + NetworkQueryServer(b, rport, true); + } +} + // Used by clients, to connect to a server bool NetworkClientConnectGame(const byte* host, unsigned short port) { diff --git a/network.h b/network.h index 8439997d3..fe02bb42b 100644 --- a/network.h +++ b/network.h @@ -131,6 +131,8 @@ VARDEF NetworkClientInfo _network_client_info[MAX_CLIENT_INFO]; VARDEF char _network_player_name[NETWORK_NAME_LENGTH]; VARDEF char _network_default_ip[NETWORK_HOSTNAME_LENGTH]; +#define MAX_SAVED_SERVERS 10 +VARDEF char *_network_server_list[MAX_SAVED_SERVERS]; VARDEF uint16 _network_own_client_index; VARDEF char _network_unique_id[NETWORK_NAME_LENGTH]; // Our own unique ID @@ -191,5 +193,6 @@ VARDEF byte _network_playas; // an id to play as.. void ParseConnectionString(const byte **player, const byte **port, byte *connection_string); void NetworkUpdateClientInfo(uint16 client_index); +void AddServer(byte *b); #endif /* NETWORK_H */ diff --git a/network_gui.c b/network_gui.c index 06216126a..dfc989a3b 100644 --- a/network_gui.c +++ b/network_gui.c @@ -317,22 +317,7 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e) break; case WE_ON_EDIT_TEXT: { - byte *b = e->edittext.str; - if (*b != 0) { - const byte *port = NULL; - const byte *player = NULL; - uint16 rport; - - ttd_strlcpy(_network_default_ip, b, lengthof(_network_default_ip)); - rport = NETWORK_DEFAULT_PORT; - - ParseConnectionString(&player, &port, b); - - if (player != NULL) _network_playas = atoi(player); - if (port != NULL) rport = atoi(port); - - NetworkQueryServer(b, rport, true); - } + AddServer(e->edittext.str); } break; case WE_CREATE: { @@ -387,7 +372,6 @@ void ShowNetworkGameWindow() Window *w; DeleteWindowById(WC_NETWORK_WINDOW, 0); -// NetworkLobbyInit(); w = AllocateWindowDesc(&_network_game_window_desc); ttd_strlcpy(_edit_str_buf, _network_player_name, MAX_QUERYSTR_LEN); w->vscroll.cap = 8; diff --git a/settings.c b/settings.c index fa1c7d69d..35cffb08e 100644 --- a/settings.c +++ b/settings.c @@ -122,7 +122,7 @@ static IniGroup *ini_group_alloc(IniFile *ini, const char *grpt, int len) IniGroup *grp = pool_alloc(&ini->pool, sizeof(IniGroup)); grp->ini = ini; grp->name = pool_strdup(&ini->pool, grpt, len); - if(!strcmp(grp->name, "newgrf")) + if(!strcmp(grp->name, "newgrf") || !strcmp(grp->name, "servers") ) grp->type = IGT_LIST; else grp->type = IGT_VARIABLES; @@ -906,20 +906,19 @@ static void HandleSettingDescs(IniFile *ini, SettingDescProc *proc) proc(ini, debug_settings, "debug"); } -static void LoadGrfSettings(IniFile *ini) +// loads all items from a *grpname section into the **list +static void LoadList(IniFile *ini, const char *grpname, char **list, int len) { - IniGroup *group = ini_getgroup(ini, "newgrf", -1); + IniGroup *group = ini_getgroup(ini, grpname, -1); IniItem *item; int i; if (!group) return; - item = group->item; - for(i=0; i!=lengthof(_newgrf_files); i++) { - if (!item) - break; - _newgrf_files[i] = strdup(item->value); + for ( i=0; i != len; i++) { + if (item == NULL) break; + list[i] = strdup(item->value); item = item->next; } } @@ -928,7 +927,8 @@ void LoadFromConfig() { IniFile *ini = ini_load(_config_file); HandleSettingDescs(ini, load_setting_desc); - LoadGrfSettings(ini); + LoadList(ini, "newgrf", _newgrf_files, lengthof(_newgrf_files)); + LoadList(ini, "servers", _network_server_list, lengthof(_network_server_list)); ini_free(ini); } -- cgit v1.2.3-54-g00ecf