From d9e34b6cfc94c2f123ff118e627f6ca245e10349 Mon Sep 17 00:00:00 2001 From: Magnus Auvinen Date: Mon, 20 Oct 2008 19:59:03 +0000 Subject: improved the snapshot handling to handle packet reorders and fixed a crash. --- src/engine/client/ec_client.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/engine/client') diff --git a/src/engine/client/ec_client.c b/src/engine/client/ec_client.c index 23790068..5c91fd32 100644 --- a/src/engine/client/ec_client.c +++ b/src/engine/client/ec_client.c @@ -49,7 +49,7 @@ NETCLIENT *net; extern void client_serverbrowse_set(NETADDR *addr, int request, int token, SERVER_INFO *info); extern void client_serverbrowse_save(); -static int snapshot_part; +static unsigned snapshot_parts; static int64 local_start_time; static int debug_font; @@ -484,6 +484,7 @@ static void client_on_enter_game() snapshots[SNAP_PREV] = 0; snapstorage_purge_all(&snapshot_storage); recived_snapshots = 0; + snapshot_parts = 0; current_predtick = 0; current_recv_tick = 0; } @@ -1050,13 +1051,19 @@ static void client_process_packet(NETCHUNK *packet) } } - if(snapshot_part == part && game_tick > current_recv_tick) + if(game_tick >= current_recv_tick) { + if(game_tick != current_recv_tick) + { + snapshot_parts = 0; + current_recv_tick = game_tick; + } + /* TODO: clean this up abit */ mem_copy((char*)snapshot_incomming_data + part*MAX_SNAPSHOT_PACKSIZE, data, part_size); - snapshot_part++; + snapshot_parts |= 1<