From 1e7b1a7615a1cf17c4198a51cb3487b71bef487e Mon Sep 17 00:00:00 2001 From: MysterD Date: Tue, 10 Aug 2021 21:06:10 -0700 Subject: [PATCH] Drop all reliable packets that are going to someone that disconnected --- src/pc/network/network_player.c | 1 + src/pc/network/packets/packet.h | 1 + src/pc/network/packets/packet_reliable.c | 12 ++++++++++++ 3 files changed, 14 insertions(+) diff --git a/src/pc/network/network_player.c b/src/pc/network/network_player.c index de7cc6ad..9a79ba15 100644 --- a/src/pc/network/network_player.c +++ b/src/pc/network/network_player.c @@ -313,6 +313,7 @@ u8 network_player_disconnected(u8 globalIndex) { np->currLevelSyncValid = false; np->currAreaSyncValid = false; gNetworkSystem->clear_id(i); + network_forget_all_reliable_from(i); for (int j = 0; j < MAX_SYNC_OBJECTS; j++) { gSyncObjects[j].rxEventId[i] = 0; } LOG_INFO("player disconnected, local %d, global %d", i, globalIndex); diff --git a/src/pc/network/packets/packet.h b/src/pc/network/packets/packet.h index 9fecd672..9d444457 100644 --- a/src/pc/network/packets/packet.h +++ b/src/pc/network/packets/packet.h @@ -103,6 +103,7 @@ void packet_set_ordered_data(struct Packet* packet); // packet_reliable.c void network_forget_all_reliable(void); +void network_forget_all_reliable_from(u8 localIndex); void network_send_ack(struct Packet* p); void network_receive_ack(struct Packet* p); void network_remember_reliable(struct Packet* p); diff --git a/src/pc/network/packets/packet_reliable.c b/src/pc/network/packets/packet_reliable.c index a95b7784..7b89b943 100644 --- a/src/pc/network/packets/packet_reliable.c +++ b/src/pc/network/packets/packet_reliable.c @@ -38,6 +38,18 @@ void network_forget_all_reliable(void) { while (head != NULL) { remove_node_from_list(head); } } +void network_forget_all_reliable_from(u8 localIndex) { + if (localIndex == 0) { return; } + struct PacketLinkedList* node = head; + while (node != NULL) { + struct PacketLinkedList* next = node->next; + if (node->p.localIndex == localIndex) { + remove_node_from_list(node); + } + node = next; + } +} + void network_send_ack(struct Packet* p) { // grab seq num u16 seqId = 0;