From 6c0215952d3dbdbe8b1f29b45f8ded2f38a853fd Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 4 Feb 2016 14:40:40 +0100 Subject: [PATCH] Network/NetPacket: Add Resize method and fix buffer size Former-commit-id: 465864559149ef62279038c24649d73c75f38037 --- include/Nazara/Network/NetPacket.hpp | 8 +++++--- include/Nazara/Network/NetPacket.inl | 16 ++++++++++++---- src/Nazara/Network/NetPacket.cpp | 8 ++++++-- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/include/Nazara/Network/NetPacket.hpp b/include/Nazara/Network/NetPacket.hpp index 1f950606b..83815b0fe 100644 --- a/include/Nazara/Network/NetPacket.hpp +++ b/include/Nazara/Network/NetPacket.hpp @@ -22,7 +22,7 @@ namespace Nz public: inline NetPacket(); - inline NetPacket(UInt16 netCode, std::size_t sizeHint = 0); + inline NetPacket(UInt16 netCode, std::size_t minSize = 0); inline NetPacket(UInt16 netCode, const void* ptr, std::size_t size); NetPacket(const NetPacket&) = delete; NetPacket(NetPacket&&) = default; @@ -36,9 +36,11 @@ namespace Nz virtual const void* OnSend(std::size_t* newSize) const; inline void Reset(); - inline void Reset(UInt16 netCode, std::size_t sizeHint = 0); + inline void Reset(UInt16 netCode, std::size_t minSize = 0); inline void Reset(UInt16 netCode, const void* ptr, std::size_t size); + inline void Resize(std::size_t newSize); + inline void SetNetCode(UInt16 netCode); NetPacket& operator=(const NetPacket&) = delete; @@ -53,7 +55,7 @@ namespace Nz void OnEmptyStream() override; void FreeStream(); - void InitStream(std::size_t sizeHint, UInt64 cursorPos, UInt32 openMode); + void InitStream(std::size_t minSize, UInt64 cursorPos, UInt32 openMode); static bool Initialize(); static void Uninitialize(); diff --git a/include/Nazara/Network/NetPacket.inl b/include/Nazara/Network/NetPacket.inl index 198354732..1fdf6c6ee 100644 --- a/include/Nazara/Network/NetPacket.inl +++ b/include/Nazara/Network/NetPacket.inl @@ -14,9 +14,9 @@ namespace Nz { } - inline NetPacket::NetPacket(UInt16 netCode, std::size_t sizeHint) + inline NetPacket::NetPacket(UInt16 netCode, std::size_t minSize) { - Reset(netCode, sizeHint); + Reset(netCode, minSize); } inline NetPacket::NetPacket(UInt16 netCode, const void* ptr, std::size_t size) @@ -26,6 +26,7 @@ namespace Nz inline NetPacket::~NetPacket() { + FlushBits(); //< Needs to be done here as the stream will be freed before ByteStream calls it FreeStream(); } @@ -53,9 +54,9 @@ namespace Nz FreeStream(); } - inline void NetPacket::Reset(UInt16 netCode, std::size_t sizeHint) + inline void NetPacket::Reset(UInt16 netCode, std::size_t minSize) { - InitStream(HeaderSize + sizeHint, HeaderSize, OpenMode_ReadWrite); + InitStream(HeaderSize + minSize, HeaderSize, OpenMode_ReadWrite); m_netCode = netCode; } @@ -68,6 +69,13 @@ namespace Nz m_netCode = netCode; } + inline void NetPacket::Resize(std::size_t newSize) + { + NazaraAssert(m_buffer, "Invalid buffer"); + + m_buffer->Resize(newSize); + } + inline void NetPacket::SetNetCode(UInt16 netCode) { m_netCode = netCode; diff --git a/src/Nazara/Network/NetPacket.cpp b/src/Nazara/Network/NetPacket.cpp index f9e305e14..e0c5b3df8 100644 --- a/src/Nazara/Network/NetPacket.cpp +++ b/src/Nazara/Network/NetPacket.cpp @@ -66,8 +66,10 @@ namespace Nz s_availableBuffers.emplace_back(std::make_pair(size, std::move(m_buffer))); } - void NetPacket::InitStream(std::size_t sizeHint, UInt64 cursorPos, UInt32 openMode) + void NetPacket::InitStream(std::size_t minSize, UInt64 cursorPos, UInt32 openMode) { + NazaraAssert(minSize >= cursorPos, "Cannot init stream with a smaller size than wanted cursor pos"); + { Nz::LockGuard lock(*s_availableBuffersMutex); @@ -83,7 +85,9 @@ namespace Nz if (!m_buffer) m_buffer = std::make_unique(); - m_buffer->Resize(static_cast(cursorPos)); + if (m_buffer->GetSize() < minSize) + m_buffer->Resize(minSize); + m_memoryStream.SetBuffer(m_buffer.get(), openMode); m_memoryStream.SetCursorPos(cursorPos); SetStream(&m_memoryStream);