// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include #include #include namespace Nz { inline NetPacket::NetPacket() : m_netCode(NetCode_Invalid) { } inline NetPacket::NetPacket(UInt16 netCode, std::size_t minCapacity) { Reset(netCode, minCapacity); } inline NetPacket::NetPacket(UInt16 netCode, const void* ptr, std::size_t size) { Reset(netCode, ptr, size); } inline NetPacket::NetPacket(NetPacket&& packet) : ByteStream(std::move(packet)), m_buffer(std::move(packet.m_buffer)), m_memoryStream(std::move(packet.m_memoryStream)), m_netCode(packet.m_netCode) { ///< Redirect memory stream to the moved buffer m_memoryStream.SetBuffer(m_buffer.get(), m_memoryStream.GetOpenMode()); SetStream(&m_memoryStream); } inline NetPacket::~NetPacket() { FlushBits(); //< Needs to be done here as the stream will be freed before ByteStream calls it FreeStream(); } inline const UInt8* NetPacket::GetConstData() const { NazaraAssert(m_buffer, "Invalid buffer"); return m_buffer->GetConstBuffer(); } inline UInt8* NetPacket::GetData() const { NazaraAssert(m_buffer, "Invalid buffer"); return m_buffer->GetBuffer(); } inline size_t NetPacket::GetDataSize() const { if (m_buffer) return m_buffer->GetSize() - HeaderSize; else return 0; } inline UInt16 NetPacket::GetNetCode() const { return m_netCode; } inline void NetPacket::Reset() { FreeStream(); } inline void NetPacket::Reset(UInt16 netCode, std::size_t minCapacity) { InitStream(HeaderSize + minCapacity, HeaderSize, OpenMode_ReadWrite); m_netCode = netCode; } inline void NetPacket::Reset(UInt16 netCode, const void* ptr, std::size_t size) { InitStream(HeaderSize + size, HeaderSize, OpenMode_ReadOnly); m_buffer->Resize(HeaderSize + size); std::memcpy(m_buffer->GetBuffer() + HeaderSize, ptr, size); 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; } inline NetPacket& Nz::NetPacket::operator=(NetPacket&& packet) { FreeStream(); ByteStream::operator=(std::move(packet)); m_buffer = std::move(packet.m_buffer); m_memoryStream = std::move(packet.m_memoryStream); m_netCode = packet.m_netCode; ///< Redirect memory stream to the moved buffer m_memoryStream.SetBuffer(m_buffer.get(), m_memoryStream.GetOpenMode()); SetStream(&m_memoryStream); return *this; } } #include