mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 02:43:44 +00:00
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>
33 lines
973 B
C++
33 lines
973 B
C++
#include "BitStreamUtils.h"
|
|
#include "dServer.h"
|
|
#include "BitStream.h"
|
|
|
|
|
|
void LUBitStream::WriteHeader(RakNet::BitStream& bitStream) const {
|
|
bitStream.Write<MessageID>(ID_USER_PACKET_ENUM);
|
|
bitStream.Write(this->connectionType);
|
|
bitStream.Write(this->internalPacketID);
|
|
bitStream.Write<uint8_t>(0); // padding
|
|
}
|
|
|
|
bool LUBitStream::ReadHeader(RakNet::BitStream& bitStream) {
|
|
MessageID messageID;
|
|
bitStream.Read(messageID);
|
|
if (messageID != ID_USER_PACKET_ENUM) return false;
|
|
VALIDATE_READ(bitStream.Read(this->connectionType));
|
|
VALIDATE_READ(bitStream.Read(this->internalPacketID));
|
|
bitStream.IgnoreBytes(1);
|
|
return true;
|
|
}
|
|
|
|
void LUBitStream::WritePacket(RakNet::BitStream& bitStream) const {
|
|
this->WriteHeader(bitStream);
|
|
this->Serialize(bitStream);
|
|
}
|
|
|
|
void LUBitStream::Send(const SystemAddress& sysAddr) const {
|
|
RakNet::BitStream bitStream;
|
|
this->WritePacket(bitStream);
|
|
Game::server->Send(bitStream, sysAddr, sysAddr == UNASSIGNED_SYSTEM_ADDRESS);
|
|
}
|