Network/ENetPacket: Fix acknowledge callback on fragmented packets

This commit is contained in:
SirLynix 2024-02-22 20:12:34 +01:00
parent 62702ec481
commit f71d149785
2 changed files with 31 additions and 21 deletions

View File

@ -38,6 +38,7 @@ namespace Nz
NetPacket data;
std::size_t poolIndex;
std::size_t referenceCount = 0;
UInt32 remainingFragments; // for ack
NazaraSignal(OnAcknowledged);
};

View File

@ -224,6 +224,8 @@ namespace Nz
startSequenceNumber = HostToNet<UInt16>(channel.outgoingReliableSequenceNumber + 1);
}
packetRef->remainingFragments = fragmentCount;
for (UInt32 fragmentNumber = 0, fragmentOffset = 0; fragmentOffset < packetSize; ++fragmentNumber, fragmentOffset += fragmentLength)
{
if (packetSize - fragmentOffset < fragmentLength)
@ -247,6 +249,9 @@ namespace Nz
return true;
}
else
{
packetRef->remainingFragments = 1;
ENetProtocol command;
command.header.channelID = channelId;
@ -271,6 +276,7 @@ namespace Nz
return true;
}
}
void ENetPeer::ThrottleConfigure(UInt32 interval, UInt32 acceleration, UInt32 deceleration)
{
@ -1031,6 +1037,9 @@ namespace Nz
if (currentCommand->packet && wasSent)
{
m_reliableDataInTransit -= currentCommand->fragmentLength;
assert(currentCommand->packet->remainingFragments > 0);
if (--currentCommand->packet->remainingFragments == 0)
currentCommand->packet->OnAcknowledged();
}