mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-23 12:35:11 +00:00
Added exponential backoff to reliable packets
This commit is contained in:
parent
275d6444b1
commit
eaaab8850f
1 changed files with 14 additions and 1 deletions
|
@ -1,11 +1,14 @@
|
|||
#include <stdio.h>
|
||||
#include "../network.h"
|
||||
#include "pc/debuglog.h"
|
||||
|
||||
#define RELIABLE_RESEND_RATE 0.10f
|
||||
#define MAX_RESEND_ATTEMPTS 20
|
||||
|
||||
struct PacketLinkedList {
|
||||
struct Packet p;
|
||||
clock_t lastSend;
|
||||
int sendAttempts;
|
||||
struct PacketLinkedList* prev;
|
||||
struct PacketLinkedList* next;
|
||||
};
|
||||
|
@ -65,6 +68,7 @@ void network_remember_reliable(struct Packet* p) {
|
|||
node->p = *p;
|
||||
node->p.sent = true;
|
||||
node->lastSend = clock();
|
||||
node->sendAttempts = 1;
|
||||
node->prev = NULL;
|
||||
node->next = NULL;
|
||||
|
||||
|
@ -87,10 +91,19 @@ void network_update_reliable(void) {
|
|||
struct PacketLinkedList* node = head;
|
||||
while (node != NULL) {
|
||||
float elapsed = (clock() - node->lastSend) / CLOCKS_PER_SEC;
|
||||
if (elapsed > RELIABLE_RESEND_RATE) {
|
||||
float maxElapsed = (node->sendAttempts * node->sendAttempts * RELIABLE_RESEND_RATE) / ((float)MAX_RESEND_ATTEMPTS);
|
||||
if (elapsed > maxElapsed) {
|
||||
// resend
|
||||
network_send(&node->p);
|
||||
node->lastSend = clock();
|
||||
node->sendAttempts++;
|
||||
if (node->sendAttempts >= MAX_RESEND_ATTEMPTS) {
|
||||
struct PacketLinkedList* next = node->next;
|
||||
remove_node_from_list(node);
|
||||
node = next;
|
||||
LOG_ERROR("giving up on reliable packet");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
node = node->next;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue