diff options
| -rw-r--r-- | config.h | 2 | ||||
| -rw-r--r-- | lang/cs.lang | 5 | ||||
| -rw-r--r-- | lang/en.lang | 5 | ||||
| -rw-r--r-- | lang/fr.lang | 5 | ||||
| -rw-r--r-- | lang/sk.lang | 7 | ||||
| -rw-r--r-- | src/screen/screen_browser.c | 109 | ||||
| -rw-r--r-- | src/server/publicServer.c | 2 |
7 files changed, 102 insertions, 33 deletions
@@ -6,6 +6,6 @@ #define DEBUG_CLIENT_RECV */ -#define TUXANCI_NG_VERSION "svn86" +#define TUXANCI_NG_VERSION "svn88" #define DESTDIR "/usr/local/" diff --git a/lang/cs.lang b/lang/cs.lang index 40da386..5b1cb9e 100644 --- a/lang/cs.lang +++ b/lang/cs.lang @@ -15,7 +15,9 @@ HEAD fontfile="DejaVuSans.ttf" fontsize="16" OK Ok BACK Zpět NEXT Další -BROWSER Vyhledávač + +# browser +REFRESH Obnovit # error message ERROR_BAD_VERSION Máte verzi klienta, kterou server nepodporuje. @@ -41,3 +43,4 @@ SERVER Vytvoření serveru CLIENT Síťová hra IP_ADDR IP adresa serveru: NET_PORT Síťový port: +BROWSER Vyhledávač
\ No newline at end of file diff --git a/lang/en.lang b/lang/en.lang index 5a35ae8..2fbfaca 100644 --- a/lang/en.lang +++ b/lang/en.lang @@ -15,7 +15,9 @@ HEAD fontfile="DejaVuSans.ttf" fontsize="16" OK Ok BACK Back NEXT Next -BROWSER Browser + +# browser +REFRESH Refresh # error message ERROR_BAD_VERSION Version of your client isn't supported by the server. @@ -34,6 +36,7 @@ NAME_PLAYER1 Player 1: NAME_PLAYER2 Player 2: MUSIC Music: SOUND Sound: +BROWSER Browser # settings - game type NONE Local game diff --git a/lang/fr.lang b/lang/fr.lang index cc98631..84a1326 100644 --- a/lang/fr.lang +++ b/lang/fr.lang @@ -16,7 +16,9 @@ HEAD fontfile="DejaVuSans.ttf" fontsize="16" OK Ok BACK Précédent NEXT Suivant -BROWSER Browser + +# browser +REFRESH Refresh # error message ERROR_BAD_VERSION Version of your client isn't supported by the server. @@ -34,3 +36,4 @@ NAME_PLAYER1 Joueur de droite : NAME_PLAYER2 Joueur de gauche : MUSIC Musique : SOUND Son : +BROWSER Browser
\ No newline at end of file diff --git a/lang/sk.lang b/lang/sk.lang index d2ecade..bd710c4 100644 --- a/lang/sk.lang +++ b/lang/sk.lang @@ -15,7 +15,9 @@ HEAD fontfile="DejaVuSans.ttf" fontsize="16" OK Ok BACK Späť NEXT Ďalej -BROWSER Browser + +# browser +REFRESH Refresh # error message ERROR_BAD_VERSION Mate verziu clienta, ktoru server nepodporuje. @@ -34,10 +36,11 @@ NAME_PLAYER1 Meno Hraca 1: NAME_PLAYER2 Meno Hraca 2: MUSIC Hudba: SOUND Zvuk: +BROWSER Browser # settings - game type NONE žiadne SERVER server CLIENT client IP_ADDR IP adresa: -NET_PORT Sieotvy port: +NET_PORT Sieotvy port:
\ No newline at end of file diff --git a/src/screen/screen_browser.c b/src/screen/screen_browser.c index a27209a..0eb82af 100644 --- a/src/screen/screen_browser.c +++ b/src/screen/screen_browser.c @@ -48,6 +48,7 @@ static widget_image_t *image_backgorund; static widget_button_t *button_play; static widget_button_t *button_back; +static widget_button_t *button_refresh; static widget_label_t *label_server; @@ -55,25 +56,12 @@ static widget_select_t *select_server; static server_t server_list; +/* function prototypes */ static int LoadServers (); +static int RefreshServers (); static server_t *server_getcurr (); -static int net_ip_convert (unsigned ip, char *ip_addr) -{ - if (!ip_addr) - return -1; - - unsigned char a = (unsigned char) ip; - unsigned char b = (unsigned char) (ip >> 8); - unsigned char c = (unsigned char) (ip >> 16); - unsigned char d = (unsigned char) (ip >> 24); - - sprintf (ip_addr, "%d.%d.%d.%d", a, b, c, d); - - return 0; -} - void startScreenBrowser() { #ifndef NO_SOUND @@ -93,6 +81,7 @@ void drawScreenBrowser() drawWidgetButton(button_play); drawWidgetButton(button_back); + drawWidgetButton(button_refresh); } void eventScreenBrowser() @@ -101,6 +90,7 @@ void eventScreenBrowser() eventWidgetButton(button_play); eventWidgetButton(button_back); + eventWidgetButton(button_refresh); } void stopScreenBrowser() @@ -153,12 +143,14 @@ static void eventWidget(void *p) /* server je offline */ if (!server->state) return; -#ifdef SUPPORT_NET_UNIX_UDP - struct sockaddr_in srv; - srv.sin_addr.s_addr = server->ip; -#endif + + struct in_addr srv; + srv.s_addr = server->ip; + + char *address = (char *) inet_ntoa (srv); + setSettingGameType (NET_GAME_TYPE_CLIENT); - setSettingIP(inet_ntoa (srv.sin_addr)); + setSettingIP(address); setSettingPort(server->port); setScreen("world"); @@ -168,6 +160,11 @@ static void eventWidget(void *p) { setScreen("gameType"); } + + if( button == button_refresh ) + { + RefreshServers (); + } } server_t *server_getcurr () @@ -248,14 +245,23 @@ int server_getinfo (server_t *server) while (1) { int sel = select (mySocket + 1, &myset, NULL, NULL, &tv); - if (sel == 0) + if (sel == 0) { + free (str); + close (mySocket); return -2; + } - if (sel == -1) + if (sel == -1) { + free (str); + close (mySocket); return -2; + } - if ((ret = recv(mySocket, str, 256, 0)) == -1) + if ((ret = recv(mySocket, str, 256, 0)) == -1) { + free (str); + close (mySocket); return -1; + } if (ret > 0) break; @@ -438,7 +444,7 @@ static int LoadServers () unsigned i = 0; char list[256]; - char address[16]; + struct in_addr srv; typedef struct { unsigned port; @@ -460,8 +466,10 @@ static int LoadServers () ctx->arena = 0; int ret = server_getinfo (ctx); - - net_ip_convert (ctx->ip, address); + + srv.s_addr = ctx->ip; + + char *address = (char *) inet_ntoa (srv); if (ret == 1) { sprintf (list, "%s (%s) - %s:%d - %s - %d/%d - %dms", ctx->name ? ctx->name : "Unknown", ctx->version, address, ctx->port, @@ -489,6 +497,51 @@ static int LoadServers () return 1; } +static int RefreshServers () +{ + destroyListItem(select_server->list, free); + select_server->list = newList(); + + struct in_addr srv; + + server_t *server; + for (server = server_list.next; server != &server_list; server = server->next) { + if (server->name) + free (server->name); + + if (server->version) + free (server->version); + + if (server->arena) + free (server->arena); + + server->name = 0; + server->version = 0; + server->arena = 0; + + char list[256]; + + int ret = server_getinfo (server); + + srv.s_addr = server->ip; + + char *address = (char *) inet_ntoa (srv); + + if (ret == 1) { + sprintf (list, "%s (%s) - %s:%d - %s - %d/%d - %dms", server->name ? server->name : "Unknown", server->version, + address, server->port, server->arena ? server->arena : "Unknown", server->clients, server->maxclients, server->ping); + } else if (ret == -2) + sprintf (list, "%s:%d - Timeout", address, server->port); + else + sprintf (list, "%s:%d - Offline", address, server->port); + + addToWidgetSelect(select_server, list); + + } + + return 1; +} + void initScreenBrowser() { SDL_Surface *image; @@ -497,7 +550,8 @@ void initScreenBrowser() image_backgorund = newWidgetImage(0, 0, image); button_back = newWidgetButton(getMyText("BACK"), 100, WINDOW_SIZE_Y-100, eventWidget); - button_play = newWidgetButton(getMyText("PLAY"), WINDOW_SIZE_X-200, WINDOW_SIZE_Y-100, eventWidget);; + button_play = newWidgetButton(getMyText("PLAY"), WINDOW_SIZE_X-200, WINDOW_SIZE_Y-100, eventWidget); + button_refresh = newWidgetButton(getMyText("REFRESH"), WINDOW_SIZE_X/2-50, WINDOW_SIZE_Y-100, eventWidget); label_server = newWidgetLabel("Server list", 50, 145, WIDGET_LABEL_LEFT); @@ -516,6 +570,7 @@ void quitScreenBrowser() destroyWidgetButton(button_play); destroyWidgetButton(button_back); + destroyWidgetButton(button_refresh); destroyWidgetLabel(label_server); destroyWidgetSelect(select_server); } diff --git a/src/server/publicServer.c b/src/server/publicServer.c index 1bbd0e7..c69857a 100644 --- a/src/server/publicServer.c +++ b/src/server/publicServer.c @@ -128,6 +128,8 @@ static int registerPublicServer() /* send request for server list */ int r = send (s, str, 9, 0); + free (str); + if (r == -1) { close(s); return -1; |