Skip to content

Commit 6248db9

Browse files
authored
refactor(netpacket): Simplify packet serialization code by using packed structs (TheSuperHackers#1680)
1 parent 8727e1e commit 6248db9

2 files changed

Lines changed: 321 additions & 803 deletions

File tree

Core/GameEngine/Include/GameNetwork/NetPacketStructs.h

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,47 @@ struct NetPacketGameCommand {
299299
// Variable fields: game message arguments
300300
};
301301

302+
////////////////////////////////////////////////////////////////////////////////
303+
// Variable-Length Packet Headers for FillBufferWithXXX serialization
304+
// These structs include the textLength field for direct buffer overlay
305+
////////////////////////////////////////////////////////////////////////////////
306+
307+
// Chat command header (includes textLength for serialization)
308+
// Fixed fields: T + type, F + frame, R + relay, P + playerID, C + commandID, D + textLength
309+
struct NetPacketChatCommandHeader {
310+
NetPacketCommandTypeField commandType;
311+
NetPacketFrameField frame;
312+
NetPacketRelayField relay;
313+
NetPacketPlayerIdField playerId;
314+
NetPacketCommandIdField commandId;
315+
NetPacketDataFieldHeader dataHeader;
316+
UnsignedByte textLength;
317+
// Variable fields: WideChar text[textLength] + Int playerMask
318+
};
319+
320+
// Disconnect chat command header (includes textLength for serialization)
321+
// Fixed fields: T + type, R + relay, P + playerID, D + textLength
322+
struct NetPacketDisconnectChatCommandHeader {
323+
NetPacketCommandTypeField commandType;
324+
NetPacketRelayField relay;
325+
NetPacketPlayerIdField playerId;
326+
NetPacketDataFieldHeader dataHeader;
327+
UnsignedByte textLength;
328+
// Variable fields: WideChar text[textLength]
329+
};
330+
331+
// Game command header (for serialization)
332+
// Fixed fields: T + type, F + frame, R + relay, P + playerID, C + commandID, D
333+
struct NetPacketGameCommandHeader {
334+
NetPacketCommandTypeField commandType;
335+
NetPacketFrameField frame;
336+
NetPacketRelayField relay;
337+
NetPacketPlayerIdField playerId;
338+
NetPacketCommandIdField commandId;
339+
NetPacketDataFieldHeader dataHeader;
340+
// Variable fields: GameMessage type + argument types + argument data
341+
};
342+
302343
// Wrapper command packet (fixed size - contains metadata about wrapped command)
303344
// Fields: T + type, R + relay, P + playerID, C + commandID, D + metadata
304345
struct NetPacketWrapperCommand {
@@ -380,34 +421,34 @@ struct NetPacketTimeOutGameStartMessage {
380421
};
381422

382423
// Disconnect frame command packet
383-
// Fields: T + type, P + playerID, C + commandID, R + relay, D + disconnectFrame
424+
// Fields: T + type, R + relay, P + playerID, C + commandID, D + disconnectFrame
384425
struct NetPacketDisconnectFrameCommand {
385426
NetPacketCommandTypeField commandType;
427+
NetPacketRelayField relay;
386428
NetPacketPlayerIdField playerId;
387429
NetPacketCommandIdField commandId;
388-
NetPacketRelayField relay;
389430
NetPacketDataFieldHeader dataHeader;
390431
UnsignedInt disconnectFrame;
391432
};
392433

393434
// Disconnect screen off command packet
394-
// Fields: T + type, P + playerID, C + commandID, R + relay, D + newFrame
435+
// Fields: T + type, R + relay, P + playerID, C + commandID, D + newFrame
395436
struct NetPacketDisconnectScreenOffCommand {
396437
NetPacketCommandTypeField commandType;
438+
NetPacketRelayField relay;
397439
NetPacketPlayerIdField playerId;
398440
NetPacketCommandIdField commandId;
399-
NetPacketRelayField relay;
400441
NetPacketDataFieldHeader dataHeader;
401442
UnsignedInt newFrame;
402443
};
403444

404445
// Frame resend request command packet
405-
// Fields: T + type, P + playerID, C + commandID, R + relay, D + frameToResend
446+
// Fields: T + type, R + relay, P + playerID, C + commandID, D + frameToResend
406447
struct NetPacketFrameResendRequestCommand {
407448
NetPacketCommandTypeField commandType;
449+
NetPacketRelayField relay;
408450
NetPacketPlayerIdField playerId;
409451
NetPacketCommandIdField commandId;
410-
NetPacketRelayField relay;
411452
NetPacketDataFieldHeader dataHeader;
412453
UnsignedInt frameToResend;
413454
};

0 commit comments

Comments
 (0)