diff --git a/include/Nazara/Core/ByteStream.hpp b/include/Nazara/Core/ByteStream.hpp index 2f1dba4b6..6c2069895 100644 --- a/include/Nazara/Core/ByteStream.hpp +++ b/include/Nazara/Core/ByteStream.hpp @@ -27,6 +27,8 @@ namespace Nz ByteStream(ByteStream&& stream) noexcept = default; virtual ~ByteStream(); + inline void ClearStream(); + inline Endianness GetDataEndianness() const; inline Nz::UInt64 GetSize() const; inline Stream* GetStream() const; diff --git a/include/Nazara/Core/ByteStream.inl b/include/Nazara/Core/ByteStream.inl index b0c4c8233..c52ec0274 100644 --- a/include/Nazara/Core/ByteStream.inl +++ b/include/Nazara/Core/ByteStream.inl @@ -30,6 +30,18 @@ namespace Nz NazaraWarning("Failed to flush bits at serializer destruction"); } + /*! + * \brief Reset stream + */ + inline void ByteStream::ClearStream() + { + // We don't want to lose some bits.. + FlushBits(); + + m_context.stream = nullptr; + m_ownedStream.reset(); + } + /*! * \brief Gets the stream endianness * \return Type of the endianness @@ -113,22 +125,15 @@ namespace Nz } /*! - * \brief Sets this with a stream + * \brief Changes stream * * \param stream Stream existing - * - * \remark Produces a NazaraAssert if stream is invalid */ - inline void ByteStream::SetStream(Stream* stream) { - NazaraAssert(stream, "Invalid stream"); - - // We don't want to lose some bits.. - FlushBits(); + ClearStream(); m_context.stream = stream; - m_ownedStream.reset(); } /*! diff --git a/include/Nazara/Network/NetPacket.inl b/include/Nazara/Network/NetPacket.inl index 7cd78b529..b2a4a5f60 100644 --- a/include/Nazara/Network/NetPacket.inl +++ b/include/Nazara/Network/NetPacket.inl @@ -56,8 +56,11 @@ namespace Nz m_netCode(packet.m_netCode) { ///< Redirect memory stream to the moved buffer - m_memoryStream.SetBuffer(m_buffer.get(), m_memoryStream.GetOpenMode()); - SetStream(&m_memoryStream); + if (m_buffer) + { + m_memoryStream.SetBuffer(m_buffer.get(), m_memoryStream.GetOpenMode()); + SetStream(&m_memoryStream); + } } /*! @@ -206,8 +209,13 @@ namespace Nz m_netCode = packet.m_netCode; ///< Redirect memory stream to the moved buffer - m_memoryStream.SetBuffer(m_buffer.get(), m_memoryStream.GetOpenMode()); - SetStream(&m_memoryStream); + if (m_buffer) + { + m_memoryStream.SetBuffer(m_buffer.get(), m_memoryStream.GetOpenMode()); + SetStream(&m_memoryStream); + } + else + SetStream(static_cast(nullptr)); return *this; }