From f53637f19e07aa2bd2856834c48d912c801f2955 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 28 Jul 2015 14:16:09 -0700 Subject: [PATCH] Added SendQueue::getNextSeqNum --- libraries/networking/src/udt/SendQueue.cpp | 15 +++++++++++---- libraries/networking/src/udt/SendQueue.h | 9 +++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 84d34f4012..b69b643ec8 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -80,8 +80,10 @@ void SendQueue::stop() { _running = false; } -void SendQueue::sendPacket(const BasePacket& packet) { - _socket->writeUnreliablePacket(packet, _destination); +void SendQueue::sendPacket(const Packet& packet) { + if (_socket) { + _socket->writePacket(packet, _destination); + } } void SendQueue::ack(SequenceNumber ack) { @@ -121,6 +123,11 @@ void SendQueue::nak(std::list naks) { _naks.splice(_naks.end(), naks); // Add naks at the end } +SequenceNumber SendQueue::getNextSequenceNumber() { + _atomicCurrentSequenceNumber = (SequenceNumber::Type)++_currentSequenceNumber; + return _currentSequenceNumber; +} + void SendQueue::sendNextPacket() { if (!_running) { return; @@ -131,9 +138,9 @@ void SendQueue::sendNextPacket() { _lastSendTimestamp = sendTime; if (_nextPacket) { - _nextPacket->setSequenceNumber(++_currentSequenceNumber); + // Write packet's sequence number and send it off + _nextPacket->setSequenceNumber(getNextSequenceNumber()); sendPacket(*_nextPacket); - _atomicCurrentSequenceNumber.store((uint32_t) _currentSequenceNumber); // Insert the packet we have just sent in the sent list QWriteLocker locker(&_sentLock); diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index 60ad1d0101..9e9c5cc024 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -50,7 +50,6 @@ public: public slots: void start(); void stop(); - void sendPacket(const BasePacket& packet); void ack(SequenceNumber ack); void nak(std::list naks); @@ -66,15 +65,21 @@ private: SendQueue(SendQueue&& other) = delete; ~SendQueue(); + // Increments current sequence number and return it + SequenceNumber getNextSequenceNumber(); + + // Send a packet through the socket + void sendPacket(const Packet& packet); + mutable QReadWriteLock _packetsLock; // Protects the packets to be sent list. std::list> _packets; // List of packets to be sent std::unique_ptr _nextPacket; // Next packet to be sent Socket* _socket { nullptr }; // Socket to send packet on HifiSockAddr _destination; // Destination addr - SequenceNumber _currentSequenceNumber; // Last sequence number sent out SequenceNumber _lastAck; // Last ACKed sequence number + SequenceNumber _currentSequenceNumber; // Last sequence number sent out std::atomic _atomicCurrentSequenceNumber; // Atomic for last sequence number sent out std::unique_ptr _sendTimer; // Send timer