Skip to content

Commit bfbe0b6

Browse files
committed
Add missing FillBufferWithWrapperCommand function for wrapper message serialization
1 parent d4801c9 commit bfbe0b6

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

Core/GameEngine/Include/GameNetwork/NetPacket.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ class NetPacket : public MemoryPoolObject
6969
UnsignedInt getAddr();
7070
UnsignedShort getPort();
7171

72-
protected:
72+
// Made public for testing purposes
7373
static UnsignedInt GetBufferSizeNeededForCommand(NetCommandMsg *msg);
7474
static void FillBufferWithCommand(UnsignedByte *buffer, NetCommandRef *msg);
7575

76+
protected:
77+
7678
// These functions return the size of the command without any compression, repetition, etc.
7779
// i.e. All of the required fields are taken into account when returning the size.
7880
static UnsignedInt GetGameCommandSize(NetCommandMsg *msg);
@@ -125,6 +127,7 @@ class NetPacket : public MemoryPoolObject
125127
static void FillBufferWithDisconnectFrameMessage(UnsignedByte *buffer, NetCommandRef *msg);
126128
static void FillBufferWithDisconnectScreenOffMessage(UnsignedByte *buffer, NetCommandRef *msg);
127129
static void FillBufferWithFrameResendRequestMessage(UnsignedByte *buffer, NetCommandRef *msg);
130+
static void FillBufferWithWrapperCommand(UnsignedByte *buffer, NetCommandRef *msg);
128131

129132
Bool addFrameCommand(NetCommandRef *msg);
130133
Bool isRoomForFrameMessage(NetCommandRef *msg);

Core/GameEngine/Source/GameNetwork/NetPacket.cpp

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,9 @@ void NetPacket::FillBufferWithCommand(UnsignedByte *buffer, NetCommandRef *ref)
363363
case NETCOMMANDTYPE_FRAMERESENDREQUEST:
364364
FillBufferWithFrameResendRequestMessage(buffer, ref);
365365
break;
366+
case NETCOMMANDTYPE_WRAPPER:
367+
FillBufferWithWrapperCommand(buffer, ref);
368+
break;
366369
default:
367370
DEBUG_CRASH(("Unknown NETCOMMANDTYPE %d", msg->getNetCommandType()));
368371
break;
@@ -1469,6 +1472,75 @@ void NetPacket::FillBufferWithFrameResendRequestMessage(UnsignedByte *buffer, Ne
14691472
offset += sizeof(frameToResend);
14701473
}
14711474

1475+
void NetPacket::FillBufferWithWrapperCommand(UnsignedByte *buffer, NetCommandRef *msg) {
1476+
NetWrapperCommandMsg *cmdMsg = static_cast<NetWrapperCommandMsg *>(msg->getCommand());
1477+
UnsignedInt offset = 0;
1478+
1479+
// command type
1480+
buffer[offset] = NetPacketFieldTypes::CommandType;
1481+
++offset;
1482+
buffer[offset] = cmdMsg->getNetCommandType();
1483+
offset += sizeof(UnsignedByte);
1484+
1485+
// relay
1486+
buffer[offset] = NetPacketFieldTypes::Relay;
1487+
++offset;
1488+
buffer[offset] = msg->getRelay();
1489+
offset += sizeof(UnsignedByte);
1490+
1491+
// player ID
1492+
buffer[offset] = NetPacketFieldTypes::PlayerId;
1493+
++offset;
1494+
buffer[offset] = cmdMsg->getPlayerID();
1495+
offset += sizeof(UnsignedByte);
1496+
1497+
// command ID
1498+
buffer[offset] = NetPacketFieldTypes::CommandId;
1499+
++offset;
1500+
UnsignedShort newID = cmdMsg->getID();
1501+
memcpy(buffer + offset, &newID, sizeof(newID));
1502+
offset += sizeof(newID);
1503+
1504+
// data
1505+
buffer[offset] = NetPacketFieldTypes::Data;
1506+
++offset;
1507+
1508+
// wrapped command ID
1509+
UnsignedShort wrappedCommandID = cmdMsg->getWrappedCommandID();
1510+
memcpy(buffer + offset, &wrappedCommandID, sizeof(wrappedCommandID));
1511+
offset += sizeof(wrappedCommandID);
1512+
1513+
// chunk number
1514+
UnsignedInt chunkNumber = cmdMsg->getChunkNumber();
1515+
memcpy(buffer + offset, &chunkNumber, sizeof(chunkNumber));
1516+
offset += sizeof(chunkNumber);
1517+
1518+
// number of chunks
1519+
UnsignedInt numChunks = cmdMsg->getNumChunks();
1520+
memcpy(buffer + offset, &numChunks, sizeof(numChunks));
1521+
offset += sizeof(numChunks);
1522+
1523+
// total length of data for all chunks
1524+
UnsignedInt totalDataLength = cmdMsg->getTotalDataLength();
1525+
memcpy(buffer + offset, &totalDataLength, sizeof(totalDataLength));
1526+
offset += sizeof(totalDataLength);
1527+
1528+
// data length for this chunk
1529+
UnsignedInt dataLength = cmdMsg->getDataLength();
1530+
memcpy(buffer + offset, &dataLength, sizeof(dataLength));
1531+
offset += sizeof(dataLength);
1532+
1533+
// the offset into the data of this chunk
1534+
UnsignedInt dataOffset = cmdMsg->getDataOffset();
1535+
memcpy(buffer + offset, &dataOffset, sizeof(dataOffset));
1536+
offset += sizeof(dataOffset);
1537+
1538+
// the data for this chunk
1539+
UnsignedByte *data = cmdMsg->getData();
1540+
memcpy(buffer + offset, data, dataLength);
1541+
offset += dataLength;
1542+
}
1543+
14721544

14731545
/**
14741546
* Constructor

0 commit comments

Comments
 (0)