Skip to content

Commit 3e8c472

Browse files
authored
bugfix(network): Fix packet size setup mistakes (TheSuperHackers#2040)
1 parent dd50dba commit 3e8c472

2 files changed

Lines changed: 16 additions & 10 deletions

File tree

Core/GameEngine/Include/GameNetwork/NetPacketStructs.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -137,16 +137,14 @@ struct NetPacketPlayerLeaveCommand {
137137

138138
// Run ahead metrics command packet structure
139139
// Fields: T + type, R + relay, P + playerID, C + commandID, D + averageLatency + averageFps
140-
// TODO: averageFps should be UnsignedShort to match FillBufferWithRunAheadMetricsCommand, but
141-
// original GetRunAheadMetricsCommandSize incorrectly counted it as UnsignedByte
142140
struct NetPacketRunAheadMetricsCommand {
143141
NetPacketCommandTypeField commandType;
144142
NetPacketRelayField relay;
145143
NetPacketPlayerIdField playerId;
146144
NetPacketCommandIdField commandId;
147145
NetPacketDataFieldHeader dataHeader;
148146
Real averageLatency;
149-
UnsignedByte averageFps;
147+
UnsignedShort averageFps;
150148
};
151149

152150
////////////////////////////////////////////////////////////////////////////////
@@ -362,24 +360,22 @@ struct NetPacketProgressMessage {
362360
};
363361

364362
// Load complete message packet
365-
// Fields: T + type, R + relay, P + playerID, D
366-
// TODO: commandId field is missing. FillBufferWithLoadCompleteMessage writes it, but
367-
// original GetLoadCompleteMessageSize did not count it
363+
// Fields: T + type, R + relay, P + playerID, C + commandID, D
368364
struct NetPacketLoadCompleteMessage {
369365
NetPacketCommandTypeField commandType;
370366
NetPacketRelayField relay;
371367
NetPacketPlayerIdField playerId;
368+
NetPacketCommandIdField commandId;
372369
NetPacketDataFieldHeader dataHeader;
373370
};
374371

375372
// Timeout game start message packet
376-
// Fields: T + type, R + relay, P + playerID, D
377-
// TODO: commandId field is missing. FillBufferWithTimeOutGameStartMessage writes it, but
378-
// original GetTimeOutGameStartMessageSize did not count it
373+
// Fields: T + type, R + relay, P + playerID, C + commandID, D
379374
struct NetPacketTimeOutGameStartMessage {
380375
NetPacketCommandTypeField commandType;
381376
NetPacketRelayField relay;
382377
NetPacketPlayerIdField playerId;
378+
NetPacketCommandIdField commandId;
383379
NetPacketDataFieldHeader dataHeader;
384380
};
385381

Core/GameEngine/Source/GameNetwork/NetPacket.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2392,7 +2392,7 @@ Bool NetPacket::isRoomForWrapperMessage(NetCommandRef *msg) {
23922392
*/
23932393
Bool NetPacket::addTimeOutGameStartMessage(NetCommandRef *msg) {
23942394
Bool needNewCommandID = FALSE;
2395-
if (isRoomForLoadCompleteMessage(msg)) {
2395+
if (isRoomForTimeOutGameStartMessage(msg)) {
23962396
NetCommandMsg *cmdMsg = static_cast<NetCommandMsg *>(msg->getCommand());
23972397

23982398
// If necessary, put the NetCommandType into the packet.
@@ -2457,6 +2457,7 @@ Bool NetPacket::addTimeOutGameStartMessage(NetCommandRef *msg) {
24572457
*/
24582458
Bool NetPacket::isRoomForTimeOutGameStartMessage(NetCommandRef *msg) {
24592459
Int len = 0;
2460+
Bool needNewCommandID = FALSE;
24602461
NetCommandMsg *cmdMsg = static_cast<NetCommandMsg *>(msg->getCommand());
24612462
if (m_lastCommandType != cmdMsg->getNetCommandType()) {
24622463
++len;
@@ -2468,6 +2469,10 @@ Bool NetPacket::isRoomForTimeOutGameStartMessage(NetCommandRef *msg) {
24682469
if (m_lastPlayerID != cmdMsg->getPlayerID()) {
24692470
++len;
24702471
len += sizeof(UnsignedByte);
2472+
needNewCommandID = TRUE;
2473+
}
2474+
if (((m_lastCommandID + 1) != (UnsignedShort)(cmdMsg->getID())) || (needNewCommandID == TRUE)) {
2475+
len += sizeof(UnsignedByte) + sizeof(UnsignedShort);
24712476
}
24722477

24732478
++len; // for NetPacketFieldTypes::Data
@@ -2549,6 +2554,7 @@ Bool NetPacket::addLoadCompleteMessage(NetCommandRef *msg) {
25492554
*/
25502555
Bool NetPacket::isRoomForLoadCompleteMessage(NetCommandRef *msg) {
25512556
Int len = 0;
2557+
Bool needNewCommandID = FALSE;
25522558
NetCommandMsg *cmdMsg = static_cast<NetCommandMsg *>(msg->getCommand());
25532559
if (m_lastCommandType != cmdMsg->getNetCommandType()) {
25542560
++len;
@@ -2560,6 +2566,10 @@ Bool NetPacket::isRoomForLoadCompleteMessage(NetCommandRef *msg) {
25602566
if (m_lastPlayerID != cmdMsg->getPlayerID()) {
25612567
++len;
25622568
len += sizeof(UnsignedByte);
2569+
needNewCommandID = TRUE;
2570+
}
2571+
if (((m_lastCommandID + 1) != (UnsignedShort)(cmdMsg->getID())) || (needNewCommandID == TRUE)) {
2572+
len += sizeof(UnsignedByte) + sizeof(UnsignedShort);
25632573
}
25642574

25652575
++len; // for NetPacketFieldTypes::Data

0 commit comments

Comments
 (0)