|
 |
0da3a9 |
#ifndef UDPSENDQUEUE_H
|
|
 |
0da3a9 |
#define UDPSENDQUEUE_H
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
#include "common.h"
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
|
|
 |
873e9f |
|
|
 |
0da3a9 |
class Connection;
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
class UdpSendQueue {
|
|
 |
0da3a9 |
public:
|
|
 |
0da3a9 |
struct Entry {
|
|
 |
0da3a9 |
Entry *prev, *next;
|
|
 |
0da3a9 |
Time resendTime;
|
|
 |
0da3a9 |
unsigned int index;
|
|
 |
0da3a9 |
unsigned short size;
|
|
 |
0da3a9 |
unsigned char data[PACKET_SIZE];
|
|
 |
0da3a9 |
};
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
public:
|
|
 |
0da3a9 |
Connection &connection;
|
|
 |
0da3a9 |
private:
|
|
 |
0da3a9 |
Time nextSendTime;
|
|
 |
0da3a9 |
Time nextPartialSendTime;
|
|
 |
0da3a9 |
bool finalEntryAdded;
|
|
 |
0da3a9 |
unsigned int nextIndex;
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
Entry *freeFirst;
|
|
 |
0da3a9 |
Entry *busyFirst, *busyLast;
|
|
 |
0da3a9 |
Entry entries[PACKETS_COUNT];
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
Entry* allocEntry();
|
|
 |
c47604 |
void moveToEnd(Entry *e);
|
|
 |
0da3a9 |
void freeEntry(Entry *e);
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
public:
|
|
 |
0da3a9 |
explicit UdpSendQueue(Connection &connection);
|
|
 |
0da3a9 |
~UdpSendQueue();
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
void confirm(unsigned int index, const unsigned char *bits, unsigned int bitsCount);
|
|
 |
873e9f |
bool sendUdpSingle();
|
|
 |
873e9f |
int sendUdp();
|
|
 |
c47604 |
bool canSentToUdp() const;
|
|
 |
c47604 |
void whenWriteToUdp(Time &t) const;
|
|
 |
0da3a9 |
};
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
|
|
 |
0da3a9 |
#endif
|