mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-25 22:22:48 +00:00
refactor: remove the packet macros, WriteHeader and PacketUtils
Nothing in the server writes or reads a packet by hand any more, so the helpers for doing so go: - CBITSTREAM, CMSGHEADER, CINSTREAM, CINSTREAM_SKIP_HEADER, SEND_PACKET, SEND_PACKET_BROADCAST and HEADER_SIZE leave dCommonVars.h; - the free BitStreamUtils::WriteHeader (LUBitStream::WriteHeader writes the same bytes) and the unused PacketUtils::SavePacket are deleted. The last raw reads are replaced: WorldServer builds its input stream directly, the master packet logs read the header with LUBitStream::ReadHeader instead of peeking at packet->data[1] and [3], and MessageInspector reads a sent game message's header with the new NetGameMsg::ReadPacketHeader (the counterpart of WritePacket) instead of memcmp/memcpy. packet->data[0] is still compared with RakNet's own connection IDs. The frozen oracles keep using the macros verbatim through the test-only tests/dGameTests/LegacyPacketMacros.h; the HeaderSkip tests, which only tested CINSTREAM_SKIP_HEADER, are removed. docs/PacketArchitecture.md: "where we are" now describes the final state and what still touches raw bytes (RakNet IDs, replica headers, behavior bit streams), and a new section collects the known wire discrepancies found during the conversion, with client addresses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,15 @@ namespace GameMessages {
|
||||
Serialize(bitStream); // write the message data
|
||||
}
|
||||
|
||||
bool NetGameMsg::ReadPacketHeader(RakNet::BitStream& bitStream, LWOOBJID& target, MessageType::Game& msgId) {
|
||||
LUBitStream header;
|
||||
if (!header.ReadHeader(bitStream)) return false;
|
||||
if (header.connectionType != ServiceType::CLIENT || header.internalPacketID != static_cast<uint32_t>(MessageType::Client::GAME_MSG)) return false;
|
||||
VALIDATE_READ(bitStream.Read(target));
|
||||
VALIDATE_READ(bitStream.Read(msgId));
|
||||
return true;
|
||||
}
|
||||
|
||||
void NetGameMsg::SendToClient(const SystemAddress& sysAddr) const {
|
||||
RakNet::BitStream bitStream;
|
||||
WritePacket(bitStream);
|
||||
|
||||
@@ -90,6 +90,10 @@ namespace GameMessages {
|
||||
// This is exactly what Send(sysAddr) puts on the wire; tests use it to compare bytes without a server.
|
||||
void WritePacket(RakNet::BitStream& bitStream) const;
|
||||
|
||||
// Reads what WritePacket writes before Serialize(): the CLIENT/GAME_MSG header, the target and the message ID.
|
||||
// Returns false if the stream is too short or holds a different kind of packet.
|
||||
static bool ReadPacketHeader(RakNet::BitStream& bitStream, LWOOBJID& target, MessageType::Game& msgId);
|
||||
|
||||
virtual void Serialize(RakNet::BitStream& bitStream) const {}
|
||||
virtual bool Deserialize(RakNet::BitStream& bitStream) { return true; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user