From eb6b04d6c2b72a7ef6b49fc147e1b522b130d8bf Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 26 Nov 2014 19:25:12 -0500 Subject: [PATCH] send packets of a longer message at the that time --- Streaming.cpp | 32 +++++++++++++++++++++++++++++--- Streaming.h | 1 + 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Streaming.cpp b/Streaming.cpp index 1aba822f..1c53c4d3 100644 --- a/Streaming.cpp +++ b/Streaming.cpp @@ -246,6 +246,7 @@ namespace stream size_t Stream::Send (const uint8_t * buf, size_t len) { bool isNoAck = m_LastReceivedSequenceNumber < 0; // first packet + std::vector packets; while (!m_IsOpen || len > 0) { Packet * p = new Packet (); @@ -309,9 +310,10 @@ namespace stream size += sentLen; // payload } p->len = size; - m_Service.post (std::bind (&Stream::SendPacket, this, p)); + packets.push_back (p); } - + if (packets.size () > 0) + m_Service.post (std::bind (&Stream::PostPackets, this, packets)); return len; } @@ -420,7 +422,31 @@ namespace stream else return false; } - + + void Stream::PostPackets (const std::vector packets) + { + if (m_IsOpen) + { + if (packets.size () > 0) + { + m_IsAckSendScheduled = false; + m_AckSendTimer.cancel (); + } + bool isEmpty = m_SentPackets.empty (); + for (auto it: packets) + m_SentPackets.insert (it); + SendPackets (packets); + if (isEmpty) + ScheduleResend (); + } + else + { + // delete + for (auto it: packets) + delete it; + } + } + void Stream::SendPackets (const std::vector& packets) { if (!m_RemoteLeaseSet) diff --git a/Streaming.h b/Streaming.h index 8c43b7c5..13e93690 100644 --- a/Streaming.h +++ b/Streaming.h @@ -112,6 +112,7 @@ namespace stream void SendQuickAck (); bool SendPacket (Packet * packet); + void PostPackets (const std::vector packets); void SendPackets (const std::vector& packets); void SavePacket (Packet * packet);