about summary refs log tree commit diff
path: root/src/engine/client/ec_client.c
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-10-17 21:16:23 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-10-17 21:16:23 +0000
commita91fecae920e1b6d9ca3dbdbf6251c11bd751d7c (patch)
treeb65cc2df8ee5ad78fb819c0f985497528c5521db /src/engine/client/ec_client.c
parenteb47aa385bb02d977c9ee759c2b7987951c16953 (diff)
downloadzcatch-a91fecae920e1b6d9ca3dbdbf6251c11bd751d7c.tar.gz
zcatch-a91fecae920e1b6d9ca3dbdbf6251c11bd751d7c.zip
fixed fetching of server info and corrected some spelling errors
Diffstat (limited to 'src/engine/client/ec_client.c')
-rw-r--r--src/engine/client/ec_client.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/engine/client/ec_client.c b/src/engine/client/ec_client.c
index 3a9390fc..e6d26e37 100644
--- a/src/engine/client/ec_client.c
+++ b/src/engine/client/ec_client.c
@@ -87,6 +87,7 @@ static int mapdownload_totalsize = -1;
 
 /* */
 static SERVER_INFO current_server_info = {0};
+static int64 current_server_info_requesttime = -1; /* >= 0 should request, == -1 got info */
 
 /* current time */
 static int current_tick = 0;
@@ -510,6 +511,7 @@ void client_connect(const char *server_address_str)
 	dbg_msg("client", "connecting to '%s'", server_address_str);
 
 	mem_zero(&current_server_info, sizeof(current_server_info));
+	current_server_info_requesttime = 0;
 	str_copy(buf, server_address_str, sizeof(buf));
 
 	for(k = 0; buf[k]; k++)
@@ -573,6 +575,12 @@ void client_disconnect()
 	client_disconnect_with_reason(0);
 }
 
+
+void client_serverinfo(SERVER_INFO *serverinfo)
+{
+	mem_copy(serverinfo, &current_server_info, sizeof(current_server_info));
+}
+
 static int client_load_data()
 {
 	debug_font = gfx_load_texture("debug_font.png", IMG_AUTO, TEXLOAD_NORESAMPLE);
@@ -838,6 +846,13 @@ static void client_process_packet(NETCHUNK *packet)
 				{
 					/* sort players */
 					qsort(info.players, info.num_players, sizeof(*info.players), player_score_comp);
+					
+					if(net_addr_comp(&server_address, &packet->address) == 0)
+					{
+						mem_copy(&current_server_info, &info, sizeof(current_server_info));
+						current_server_info_requesttime = -1;
+					}
+					
 					if(packet_type == 2)
 						client_serverbrowse_set(&packet->address, BROWSESET_TOKEN, token, &info);
 					else
@@ -1402,6 +1417,15 @@ static void client_update()
 			if(current_predtick > current_tick && current_predtick < current_tick+50)
 				modc_predict();
 		}
+		
+		/* fetch server info if we don't have it */
+		if(client_state() >= CLIENTSTATE_LOADING &&
+			current_server_info_requesttime >= 0 &&
+			time_get() > current_server_info_requesttime)
+		{
+			client_serverbrowse_request(&server_address);
+			current_server_info_requesttime = time_get()+time_freq()*2;
+		}
 	}
 
 	/* STRESS TEST: join the server again */