Implementing client confirmation logic again

This commit is contained in:
Rodrigo Alfonso
2023-02-12 06:05:58 -03:00
parent 9de9fc4f33
commit 9aa922e97f

View File

@@ -62,8 +62,8 @@
#define LINK_WIRELESS_MAX_PLAYERS 5
#define LINK_WIRELESS_MIN_PLAYERS 2
#define LINK_WIRELESS_DEFAULT_TIMEOUT 0xfffffffe // 8 // TODO: FIX
#define LINK_WIRELESS_DEFAULT_REMOTE_TIMEOUT 0xfffffffe // 10
#define LINK_WIRELESS_DEFAULT_TIMEOUT 8
#define LINK_WIRELESS_DEFAULT_REMOTE_TIMEOUT 10
#define LINK_WIRELESS_DEFAULT_INTERVAL 50
#define LINK_WIRELESS_DEFAULT_SEND_TIMER_ID 3
#define LINK_WIRELESS_BASE_FREQUENCY TM_FREQ_1024
@@ -615,6 +615,7 @@ class LinkWireless {
u32 lastConfirmationFromServer = 0;
u32 lastPacketIdFromClients[LINK_WIRELESS_MAX_PLAYERS];
int lastConfirmationFromClients[LINK_WIRELESS_MAX_PLAYERS];
u32 minLastConfirmationFromClients = 0;
};
struct MessageHeader {
@@ -989,24 +990,28 @@ class LinkWireless {
return false;
u32 confirmationData = confirmation.data[0];
int lastConfirmation =
sessionState.lastConfirmationFromClients[confirmation.playerId];
sessionState.lastConfirmationFromClients[confirmation.playerId] =
confirmationData;
if (lastConfirmation == -1 ||
sessionState.lastConfirmationFromClients[confirmation.playerId] !=
lastConfirmation)
removeConfirmedMessages(confirmationData); // TODO: FIX!
// TODO: USE > DIFF
// u32 min = 0xffffffff;
// for (u32 i = 0; i < (u32)(config.maxPlayers - 1); i++) {
// int confirmationData = sessionState.lastConfirmationFromClients[1 +
// i]; if (confirmationData > -1 && (u32)confirmationData < min)
// min = confirmationData;
// }
// if (min < 0xffffffff)
// removeConfirmedMessages(min);
if (sessionState.outgoingMessages.isEmpty())
return true;
u32 nextPendingPacketId = sessionState.outgoingMessages.peek()._packetId;
u32 diff = 0xffffffff;
int min = -1;
for (u32 i = 0; i < (u32)(config.maxPlayers - 1); i++) {
int confirmationData = sessionState.lastConfirmationFromClients[1 + i];
u32 clientDiff = abs(confirmationData - (int)nextPendingPacketId);
if (confirmationData > -1 && clientDiff < diff) {
diff = clientDiff;
min = confirmationData;
}
}
if (min > -1 && (u32)min != sessionState.minLastConfirmationFromClients) {
removeConfirmedMessages(min);
sessionState.minLastConfirmationFromClients = min;
}
}
return true;
@@ -1118,6 +1123,7 @@ class LinkWireless {
this->sessionState.lastPacketId = 0;
this->sessionState.lastPacketIdFromServer = 0;
this->sessionState.lastConfirmationFromServer = 0;
this->sessionState.minLastConfirmationFromClients = 0;
for (u32 i = 0; i < LINK_WIRELESS_MAX_PLAYERS; i++) {
this->sessionState.timeouts[i] = 0;
this->sessionState.lastPacketIdFromClients[i] = 0;