From 5e49c84903b6398fbb70f4a69bba97fd084bdf49 Mon Sep 17 00:00:00 2001 From: Rodrigo Alfonso Date: Thu, 16 Jan 2025 01:56:57 -0300 Subject: [PATCH] LinkWireless: Improve timeout handling, so old confirmation numbers still trigger timeouts --- lib/LinkUniversal.hpp | 3 ++- lib/LinkWireless.hpp | 22 ++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/LinkUniversal.hpp b/lib/LinkUniversal.hpp index ddf9769..92c550b 100644 --- a/lib/LinkUniversal.hpp +++ b/lib/LinkUniversal.hpp @@ -183,7 +183,8 @@ class LinkUniversal { */ bool deactivate(bool turnOffWireless = true) { isEnabled = false; - linkCable.deactivate(); + if (linkCable.isActive()) + linkCable.deactivate(); bool success = linkWireless.deactivate(turnOffWireless); resetState(); return success; diff --git a/lib/LinkWireless.hpp b/lib/LinkWireless.hpp index 24cddfe..bcb65c0 100644 --- a/lib/LinkWireless.hpp +++ b/lib/LinkWireless.hpp @@ -1156,11 +1156,6 @@ class LinkWireless { u32 checksum = header.dataChecksum; bool isPing = data == MSG_PING; - sessionState.msgTimeouts[0] = 0; - sessionState.msgTimeouts[remotePlayerId] = 0; - sessionState.msgFlags[0] = true; - sessionState.msgFlags[remotePlayerId] = true; - if (checksum != buildChecksum(data)) continue; @@ -1168,16 +1163,19 @@ class LinkWireless { message.packetId = partialPacketId; message.data = data; message.playerId = remotePlayerId; - - if (!acceptMessage(message, isConfirmation, remotePlayerCount) || isPing) + if (!acceptMessage(message, isConfirmation, remotePlayerCount)) + continue; + if (config.retransmission && isConfirmation && + !handleConfirmation(message)) continue; - if (config.retransmission && isConfirmation) { - if (!handleConfirmation(message)) - continue; - } else { + sessionState.msgTimeouts[0] = 0; + sessionState.msgTimeouts[remotePlayerId] = 0; + sessionState.msgFlags[0] = true; + sessionState.msgFlags[remotePlayerId] = true; + + if (!isPing && !isConfirmation) sessionState.newIncomingMessages.push(message); - } } copyIncomingState(); }