-
Notifications
You must be signed in to change notification settings - Fork 1
/
ReliabilitySystem.h
72 lines (51 loc) · 1.49 KB
/
ReliabilitySystem.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#pragma once
#include "PacketQueue.h"
class ReliabilitySystem
{
public: //methods
//Default constructor
ReliabilitySystem(u32 maxSequence = 0xFFFFFFFF);
//Default destructor
~ReliabilitySystem() { }
//Reset reliability system
void Reset();
//Process packet sent event
void PacketSent(u32 size);
//Process packet received event
void PacketReceived(u32 sequence, u32 size);
//Update reliability system
void Update(s32 timeElapsedMs);
//Connect update signal to update slots
void ConnectSlots(CL_Signal_v1<s32> updateSignal);
//Process packet ack
void ProcessAck(u32 ack, u32 ackBits);
//Get packet's bit index based on ack
u32 GetBitIndex(u32 sequence, u32 ack);
//Generate next packet ack
u32 GenerateAckBits();
//Get local sequence
u32 GetLocalSequence() const { return m_localSequence; }
//Get remote sequence
u32 GetRemoteSequence() const { return m_remoteSequence; }
//Get max sequence
u32 GetMaxSequence() const { return m_maxSequence; }
//Get connection's round-trip time
u32 GetRoundTripTime() const { return m_rtt; }
private: //methods
//Advance queue times based on @timeElapsedMs
void AdvanceQueueTime(s32 timeElapsedMs);
//Update queues
void UpdateQueues();
private: //members
u32 m_maxSequence;
u32 m_localSequence;
u32 m_remoteSequence;
u32 m_rtt;
u32 m_rttMax;
std::vector<u32> m_acks;
PacketQueue m_sentQueue;
PacketQueue m_pendingAckQueue;
PacketQueue m_recvQueue;
PacketQueue m_ackedQueue;
CL_Slot m_updateSlot;
}; //class ReliabilitySystem