Network/ENetHost: Optimize acknowledgements handling

This commit is contained in:
Lynix 2017-02-15 08:27:15 +01:00
parent 890b06bfcb
commit 8225ad3b41
2 changed files with 6 additions and 6 deletions

View File

@ -178,13 +178,13 @@ namespace Nz
ENetHost* m_host; ENetHost* m_host;
IpAddress m_address; /**< Internet address of the peer */ IpAddress m_address; /**< Internet address of the peer */
std::array<UInt32, unsequencedWindow> m_unsequencedWindow; std::array<UInt32, unsequencedWindow> m_unsequencedWindow;
std::list<Acknowledgement> m_acknowledgements;
std::list<IncomingCommmand> m_dispatchedCommands; std::list<IncomingCommmand> m_dispatchedCommands;
std::list<OutgoingCommand> m_outgoingReliableCommands; std::list<OutgoingCommand> m_outgoingReliableCommands;
std::list<OutgoingCommand> m_outgoingUnreliableCommands; std::list<OutgoingCommand> m_outgoingUnreliableCommands;
std::list<OutgoingCommand> m_sentReliableCommands; std::list<OutgoingCommand> m_sentReliableCommands;
std::list<OutgoingCommand> m_sentUnreliableCommands; std::list<OutgoingCommand> m_sentUnreliableCommands;
std::size_t m_totalWaitingData; std::size_t m_totalWaitingData;
std::vector<Acknowledgement> m_acknowledgements;
std::vector<Channel> m_channels; std::vector<Channel> m_channels;
MemoryPool m_packetPool; MemoryPool m_packetPool;
ENetPeerState m_state; ENetPeerState m_state;

View File

@ -770,8 +770,8 @@ namespace Nz
void ENetHost::SendAcknowledgements(ENetPeer* peer) void ENetHost::SendAcknowledgements(ENetPeer* peer)
{ {
auto currentAcknowledgement = peer->m_acknowledgements.begin(); auto it = peer->m_acknowledgements.begin();
while (currentAcknowledgement != peer->m_acknowledgements.end()) for (; it != peer->m_acknowledgements.end(); ++it)
{ {
if (m_commandCount >= m_commands.size() || m_bufferCount >= m_buffers.size() || peer->GetMtu() - m_packetSize < sizeof(ENetProtocolAcknowledge)) if (m_commandCount >= m_commands.size() || m_bufferCount >= m_buffers.size() || peer->GetMtu() - m_packetSize < sizeof(ENetProtocolAcknowledge))
{ {
@ -779,7 +779,7 @@ namespace Nz
break; break;
} }
ENetPeer::Acknowledgement& acknowledgement = *currentAcknowledgement; ENetPeer::Acknowledgement& acknowledgement = *it;
ENetProtocol& command = m_commands[m_commandCount]; ENetProtocol& command = m_commands[m_commandCount];
NetBuffer& buffer = m_buffers[m_bufferCount]; NetBuffer& buffer = m_buffers[m_bufferCount];
@ -800,11 +800,11 @@ namespace Nz
if ((acknowledgement.command.header.command & ENetProtocolCommand_Mask) == ENetProtocolCommand_Disconnect) if ((acknowledgement.command.header.command & ENetProtocolCommand_Mask) == ENetProtocolCommand_Disconnect)
peer->DispatchState(ENetPeerState::Zombie); peer->DispatchState(ENetPeerState::Zombie);
currentAcknowledgement = peer->m_acknowledgements.erase(currentAcknowledgement);
++m_bufferCount; ++m_bufferCount;
++m_commandCount; ++m_commandCount;
} }
peer->m_acknowledgements.erase(peer->m_acknowledgements.begin(), it);
} }
bool ENetHost::SendReliableOutgoingCommands(ENetPeer* peer) bool ENetHost::SendReliableOutgoingCommands(ENetPeer* peer)