summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/screen/screen_browser.c112
1 files changed, 89 insertions, 23 deletions
diff --git a/src/screen/screen_browser.c b/src/screen/screen_browser.c
index 531047c..2b2c0b2 100644
--- a/src/screen/screen_browser.c
+++ b/src/screen/screen_browser.c
@@ -52,6 +52,11 @@ static widget_button_t *button_back;
static widget_button_t *button_refresh;
static widget_label_t *label_server;
+static widget_label_t *label_version;
+static widget_label_t *label_address;
+static widget_label_t *label_arena;
+static widget_label_t *label_players;
+static widget_label_t *label_ping;
static widget_select_t *select_server;
@@ -77,6 +82,11 @@ void drawScreenBrowser()
drawWidgetImage(image_backgorund);
drawWidgetLabel(label_server);
+ drawWidgetLabel(label_version);
+ drawWidgetLabel(label_address);
+ drawWidgetLabel(label_arena);
+ drawWidgetLabel(label_players);
+ drawWidgetLabel(label_ping);
drawWidgetSelect(select_server);
@@ -411,16 +421,15 @@ static int LoadServers ()
}
struct timeval tv;
- // Mno�ina
+
fd_set myset;
- // Mno�ina obsahuje n�hodn� data. Odstran�m je.
+
FD_ZERO(&myset);
- // Zapln�n� mno�iny sokety
FD_SET(s, &myset);
- // Vypln�m �asov� �daj (nap��klad na 3 minuty)
- tv.tv_sec = 3;// Po�et sekund
- tv.tv_usec = 0;// Po�et mikrosekund
- // Zavol�m select (V Linuxu mus�m m�t nastavenou prom�nnou max.)
+
+ tv.tv_sec = 3;
+ tv.tv_usec = 0;
+
int ret = select (s+1, NULL, &myset, NULL, &tv);
if (ret == -1)
@@ -432,9 +441,7 @@ static int LoadServers ()
/* send request for server list */
send (s, "l", 1, 0);
- // Mno�ina obsahuje n�hodn� data. Odstran�m je.
FD_ZERO(&myset);
- // Zapln�n� mno�iny sokety
FD_SET(s, &myset);
ret = select (s+1, &myset, NULL, NULL, &tv);
@@ -485,14 +492,38 @@ static int LoadServers ()
char *address = (char *) inet_ntoa (srv);
+ memset (list, ' ', 254);
+ list[255] = '\0';
+
if (ret == 1) {
- sprintf (list, "%s (%s) - %s:%d - %s - %d/%d - %dms", ctx->name ? ctx->name : "Unknown", ctx->version, address, ctx->port,
- ctx->arena ? ctx->arena : "Unknown", ctx->clients, ctx->maxclients, ctx->ping);
- } else if (ret == -2)
- sprintf (list, "%s:%d - Timeout", address, ctx->port);
- else
- sprintf (list, "%s:%d - Offline", address, ctx->port);
+ /*sprintf (list, "%s (%s) - %s:%d - %s - %d/%d - %dms", ctx->name ? ctx->name : "Unknown", ctx->version, address, ctx->port,
+ ctx->arena ? ctx->arena : "Unknown", ctx->clients, ctx->maxclients, ctx->ping);*/
+
+ if (ctx->name)
+ memcpy (list, ctx->name, strlen (ctx->name));
+ else
+ memcpy (list, "Unknown", 7);
+
+ memcpy (list+30, ctx->version, strlen (ctx->version));
+
+ unsigned a_len = strlen (address);
+ memcpy (list+38, address, a_len);
+ memcpy (list+38+a_len, ":", 1);
+
+ sprintf (buf, "%d", ctx->port);
+
+ memcpy (list+39+a_len, buf, strlen (buf));
+
+ memcpy (list+60, ctx->arena, strlen (ctx->arena));
+
+ sprintf (buf, "%d/%d", ctx->clients, ctx->maxclients);
+
+ memcpy (list+75, buf, strlen (buf));
+
+ sprintf (buf, "%dms", ctx->ping);
+ memcpy (list+83, buf, strlen (buf));
+ }
addToWidgetSelect(select_server, list);
@@ -534,6 +565,7 @@ static int RefreshServers ()
server->arena = 0;
char list[256];
+ char buf[32];
int ret = server_getinfo (server);
@@ -542,12 +574,34 @@ static int RefreshServers ()
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);
+ memset (list, ' ', 254);
+ list[255] = '\0';
+
+ if (server->name)
+ memcpy (list, server->name, strlen (server->name));
+ else
+ memcpy (list, "Unknown", 7);
+
+ memcpy (list+30, server->version, strlen (server->version));
+
+ unsigned a_len = strlen (address);
+ memcpy (list+38, address, a_len);
+ memcpy (list+38+a_len, ":", 1);
+
+ sprintf (buf, "%d", server->port);
+
+ memcpy (list+39+a_len, buf, strlen (buf));
+
+ memcpy (list+60, server->arena, strlen (server->arena));
+
+ sprintf (buf, "%d/%d", server->clients, server->maxclients);
+
+ memcpy (list+75, buf, strlen (buf));
+
+ sprintf (buf, "%dms", server->ping);
+
+ memcpy (list+83, buf, strlen (buf));
+ }
addToWidgetSelect(select_server, list);
@@ -567,9 +621,14 @@ void initScreenBrowser()
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);
+ label_server = newWidgetLabel(getMyText("SERVER"), 120, 145, WIDGET_LABEL_LEFT);
+ label_version = newWidgetLabel(getMyText("VERSION"), 290, 145, WIDGET_LABEL_LEFT);
+ label_address = newWidgetLabel(getMyText("ADDRESS"), 400, 145, WIDGET_LABEL_LEFT);
+ label_arena = newWidgetLabel(getMyText("ARENA"), 550, 145, WIDGET_LABEL_LEFT);
+ label_players = newWidgetLabel(getMyText("CLIENTS"), 645, 145, WIDGET_LABEL_LEFT);
+ label_ping = newWidgetLabel(getMyText("PING"), 720, 145, WIDGET_LABEL_LEFT);
- select_server = newWidgetSelect(label_server->x, label_server->y+40, eventWidget);
+ select_server = newWidgetSelect(50, label_server->y+40, eventWidget);
registerScreen( newScreen("browser", startScreenBrowser, eventScreenBrowser,
drawScreenBrowser, stopScreenBrowser) );
@@ -585,7 +644,14 @@ void quitScreenBrowser()
destroyWidgetButton(button_play);
destroyWidgetButton(button_back);
destroyWidgetButton(button_refresh);
+
destroyWidgetLabel(label_server);
+ destroyWidgetLabel(label_version);
+ destroyWidgetLabel(label_address);
+ destroyWidgetLabel(label_arena);
+ destroyWidgetLabel(label_players);
+ destroyWidgetLabel(label_ping);
+
destroyWidgetSelect(select_server);
}