mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 01:24:18 +00:00
added snapshot crc handling
This commit is contained in:
parent
0320d20a47
commit
ab37902543
|
@ -32,6 +32,7 @@ static NETADDR4 master_server;
|
|||
static NETADDR4 server_address;
|
||||
static int window_must_refocus = 0;
|
||||
static int snaploss = 0;
|
||||
static int snapcrcerrors = 0;
|
||||
|
||||
static int current_tick = 0;
|
||||
static float intratick = 0;
|
||||
|
@ -374,7 +375,7 @@ static void client_debug_render()
|
|||
static float frametime_avg = 0;
|
||||
frametime_avg = frametime_avg*0.9f + frametime*0.1f;
|
||||
char buffer[512];
|
||||
sprintf(buffer, "send: %6d recv: %6d snaploss: %4d latency: %4.0f %c gfxmem: %6dk fps: %3d",
|
||||
sprintf(buffer, "send: %6d recv: %6d snaploss: %d latency: %4.0f %c gfxmem: %6dk fps: %3d",
|
||||
(current.send_bytes-prev.send_bytes)*10,
|
||||
(current.recv_bytes-prev.recv_bytes)*10,
|
||||
snaploss,
|
||||
|
@ -527,9 +528,13 @@ static void client_process_packet(NETPACKET *packet)
|
|||
int num_parts = 1;
|
||||
int part = 0;
|
||||
int part_size = 0;
|
||||
int crc;
|
||||
|
||||
if(msg != NETMSG_SNAPEMPTY)
|
||||
{
|
||||
crc = msg_unpack_int();
|
||||
part_size = msg_unpack_int();
|
||||
}
|
||||
|
||||
if(snapshot_part == part && game_tick > current_tick)
|
||||
{
|
||||
|
@ -552,8 +557,6 @@ static void client_process_packet(NETPACKET *packet)
|
|||
// find delta
|
||||
if(delta_tick >= 0)
|
||||
{
|
||||
//void *delta_data;
|
||||
|
||||
int deltashot_size = snapstorage_get(&snapshot_storage, delta_tick, 0, &deltashot);
|
||||
|
||||
if(deltashot_size < 0)
|
||||
|
@ -590,6 +593,27 @@ static void client_process_packet(NETPACKET *packet)
|
|||
|
||||
unsigned char tmpbuffer3[MAX_SNAPSHOT_SIZE];
|
||||
int snapsize = snapshot_unpack_delta(deltashot, (SNAPSHOT*)tmpbuffer3, deltadata, deltasize);
|
||||
if(snapshot_crc((SNAPSHOT*)tmpbuffer3) != crc)
|
||||
{
|
||||
if(config.debug)
|
||||
dbg_msg("client", "snapshot crc error\n");
|
||||
snapcrcerrors++;
|
||||
if(snapcrcerrors > 25)
|
||||
{
|
||||
// to many errors, send reset
|
||||
msg_pack_start_system(NETMSG_SNAPACK, 0);
|
||||
msg_pack_int(-1);
|
||||
msg_pack_end();
|
||||
client_send_msg();
|
||||
snapcrcerrors = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(snapcrcerrors)
|
||||
snapcrcerrors--;
|
||||
}
|
||||
|
||||
// purge old snapshots
|
||||
int purgetick = delta_tick;
|
||||
|
|
|
@ -239,6 +239,7 @@ static void server_do_snap()
|
|||
|
||||
// finish snapshot
|
||||
int snapshot_size = snapbuild_finish(&builder, data);
|
||||
int crc = snapshot_crc((SNAPSHOT*)data);
|
||||
|
||||
// remove old snapshos
|
||||
// keep 1 seconds worth of snapshots
|
||||
|
@ -258,10 +259,7 @@ static void server_do_snap()
|
|||
{
|
||||
deltashot_size = snapstorage_get(&clients[i].snapshots, clients[i].last_acked_snapshot, 0, &deltashot);
|
||||
if(deltashot_size >= 0)
|
||||
//{
|
||||
delta_tick = clients[i].last_acked_snapshot;
|
||||
//deltashot = (SNAPSHOT *)delta_data;
|
||||
//}
|
||||
}
|
||||
|
||||
// create delta
|
||||
|
@ -291,6 +289,7 @@ static void server_do_snap()
|
|||
msg_pack_start_system(NETMSG_SNAP, 0);
|
||||
msg_pack_int(current_tick);
|
||||
msg_pack_int(current_tick-delta_tick); // compressed with
|
||||
msg_pack_int(crc);
|
||||
msg_pack_int(chunk);
|
||||
msg_pack_raw(&compdata[n*max_size], chunk);
|
||||
msg_pack_end();
|
||||
|
|
Loading…
Reference in a new issue