mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 23:36:41 +02:00
Reset ACK in ctor
This commit is contained in:
parent
b2beeae6b1
commit
702d2c34a5
3 changed files with 15 additions and 11 deletions
|
@ -116,14 +116,11 @@ SendQueue& Connection::getSendQueue() {
|
||||||
|
|
||||||
if (!_hasReceivedHandshakeACK) {
|
if (!_hasReceivedHandshakeACK) {
|
||||||
// First time creating a send queue for this connection
|
// First time creating a send queue for this connection
|
||||||
_sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1);
|
_sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1, _hasReceivedHandshakeACK);
|
||||||
_lastReceivedACK = _sendQueue->getCurrentSequenceNumber();
|
_lastReceivedACK = _sendQueue->getCurrentSequenceNumber();
|
||||||
} else {
|
} else {
|
||||||
// Connection already has a handshake from a previous send queue
|
// Connection already has a handshake from a previous send queue
|
||||||
_sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK);
|
_sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK, _hasReceivedHandshakeACK);
|
||||||
// This connection has already gone through the handshake
|
|
||||||
// bypass it in the send queue
|
|
||||||
_sendQueue->handshakeACK();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef UDT_CONNECTION_DEBUG
|
#ifdef UDT_CONNECTION_DEBUG
|
||||||
|
|
|
@ -61,10 +61,10 @@ private:
|
||||||
Mutex2& _mutex2;
|
Mutex2& _mutex2;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<SendQueue> SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber) {
|
std::unique_ptr<SendQueue> SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) {
|
||||||
Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*");
|
Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*");
|
||||||
|
|
||||||
auto queue = std::unique_ptr<SendQueue>(new SendQueue(socket, destination, currentSequenceNumber));
|
auto queue = std::unique_ptr<SendQueue>(new SendQueue(socket, destination, currentSequenceNumber, hasReceivedHandshakeACK));
|
||||||
|
|
||||||
// Setup queue private thread
|
// Setup queue private thread
|
||||||
QThread* thread = new QThread;
|
QThread* thread = new QThread;
|
||||||
|
@ -83,14 +83,21 @@ std::unique_ptr<SendQueue> SendQueue::create(Socket* socket, HifiSockAddr destin
|
||||||
return queue;
|
return queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber) :
|
SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) :
|
||||||
_socket(socket),
|
_socket(socket),
|
||||||
_destination(dest)
|
_destination(dest)
|
||||||
{
|
{
|
||||||
// set our member variables from current sequence number
|
// set our member variables from current sequence number
|
||||||
_currentSequenceNumber = currentSequenceNumber;
|
_currentSequenceNumber = currentSequenceNumber;
|
||||||
_atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber);
|
_atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber);
|
||||||
_lastACKSequenceNumber = uint32_t(_currentSequenceNumber) - 1;
|
|
||||||
|
if (hasReceivedHandshakeACK) {
|
||||||
|
_lastACKSequenceNumber = uint32_t(_currentSequenceNumber);
|
||||||
|
} else {
|
||||||
|
_lastACKSequenceNumber = uint32_t(_currentSequenceNumber - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
_hasReceivedHandshakeACK = hasReceivedHandshakeACK;
|
||||||
|
|
||||||
// default the last receiver response to the current time
|
// default the last receiver response to the current time
|
||||||
_lastReceiverResponse = QDateTime::currentMSecsSinceEpoch();
|
_lastReceiverResponse = QDateTime::currentMSecsSinceEpoch();
|
||||||
|
|
|
@ -50,7 +50,7 @@ public:
|
||||||
Stopped
|
Stopped
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::unique_ptr<SendQueue> create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber);
|
static std::unique_ptr<SendQueue> create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK);
|
||||||
|
|
||||||
virtual ~SendQueue();
|
virtual ~SendQueue();
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ private slots:
|
||||||
void run();
|
void run();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber);
|
SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK);
|
||||||
SendQueue(SendQueue& other) = delete;
|
SendQueue(SendQueue& other) = delete;
|
||||||
SendQueue(SendQueue&& other) = delete;
|
SendQueue(SendQueue&& other) = delete;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue