#ifndef PACKETUTILS_H #define PACKETUTILS_H #include #include #include enum class eConnectionType : uint16_t; namespace PacketUtils { template void WriteHeader(RakNet::BitStream& bitStream, eConnectionType connectionType, T internalPacketID) { bitStream.Write(MessageID(ID_USER_PACKET_ENUM)); bitStream.Write(connectionType); bitStream.Write(internalPacketID); bitStream.Write(uint8_t(0)); } uint16_t ReadPacketU16(uint32_t startLoc, Packet* packet); uint32_t ReadPacketU32(uint32_t startLoc, Packet* packet); uint64_t ReadPacketU64(uint32_t startLoc, Packet* packet); int64_t ReadPacketS64(uint32_t startLoc, Packet* packet); std::string ReadString(uint32_t startLoc, Packet* packet, bool wide, uint32_t maxLen = 33); void WritePacketString(const std::string& string, uint32_t maxSize, RakNet::BitStream* bitStream); void WriteString(RakNet::BitStream& bitStream, const std::string& s, uint32_t maxSize); void WriteWString(RakNet::BitStream& bitStream, const std::string& string, uint32_t maxSize); void WriteWString(RakNet::BitStream& bitStream, const std::u16string& string, uint32_t maxSize); void WritePacketWString(const std::string& string, uint32_t maxSize, RakNet::BitStream* bitStream); void SavePacket(const std::string& filename, const char* data, size_t length); }; #endif // PACKETUTILS_H