Network/ENet: Separate Connect event into OutgoingConnect and IncomingConnect

This commit is contained in:
Lynix 2017-05-19 16:31:29 +02:00
parent 1d44adf23a
commit 3ca179b954
4 changed files with 26 additions and 15 deletions

View File

@ -87,7 +87,7 @@ namespace Nz
int ReceiveIncomingCommands(ENetEvent* event);
void NotifyConnect(ENetPeer* peer, ENetEvent* event);
void NotifyConnect(ENetPeer* peer, ENetEvent* event, bool incoming);
void NotifyDisconnect(ENetPeer*, ENetEvent* event);
void SendAcknowledgements(ENetPeer* peer);

View File

@ -118,11 +118,6 @@ namespace Nz
/** no event occurred within the specified time limit */
None,
/** a connection request initiated by enet_host_connect has completed.
* The peer field contains the peer which successfully connected.
*/
Connect,
/** a peer has disconnected. This event is generated on a successful
* completion of a disconnect initiated by enet_peer_disconnect, if
* a peer has timed out, or if a connection request initialized by
@ -132,11 +127,20 @@ namespace Nz
*/
Disconnect,
/** a connection request initiated by enet_host_connect from this host has completed.
* The peer field contains the peer which successfully connected.
*/
OutgoingConnect,
/** a connection request initiated by enet_host_connect from another host has completed.
* The peer field contains the peer which successfully connected.
*/
IncomingConnect,
/** a packet has been received from a peer. The peer field specifies the
* peer which sent the packet. The channelID field specifies the channel
* number upon which the packet was received. The packet field contains
* the packet that was received; this packet must be destroyed with
* enet_packet_destroy after use.
* the packet that was received;
*/
Receive
};

View File

@ -352,10 +352,17 @@ namespace Nz
switch (peer.GetState())
{
case ENetPeerState::ConnectionPending:
peer.ChangeState(ENetPeerState::Connected);
event->type = ENetEventType::IncomingConnect;
event->peer = &peer;
event->data = peer.m_eventData;
return true;
case ENetPeerState::ConnectionSucceeded:
peer.ChangeState(ENetPeerState::Connected);
event->type = ENetEventType::Connect;
event->type = ENetEventType::OutgoingConnect;
event->peer = &peer;
event->data = peer.m_eventData;
return true;
@ -728,7 +735,7 @@ namespace Nz
return -1;
}
void ENetHost::NotifyConnect(ENetPeer* peer, ENetEvent* event)
void ENetHost::NotifyConnect(ENetPeer* peer, ENetEvent* event, bool incoming)
{
m_recalculateBandwidthLimits = true;
@ -736,12 +743,12 @@ namespace Nz
{
peer->ChangeState(ENetPeerState::Connected);
event->type = ENetEventType::Connect;
event->type = (incoming) ? ENetEventType::IncomingConnect : ENetEventType::OutgoingConnect;
event->peer = peer;
event->data = peer->m_eventData;
}
else
peer->DispatchState(peer->GetState() == ENetPeerState::Connecting ? ENetPeerState::ConnectionSucceeded : ENetPeerState::ConnectionPending);
peer->DispatchState((peer->GetState() == ENetPeerState::Connecting) ? ENetPeerState::ConnectionSucceeded : ENetPeerState::ConnectionPending);
}
void ENetHost::NotifyDisconnect(ENetPeer* peer, ENetEvent* event)

View File

@ -501,7 +501,7 @@ namespace Nz
if (commandNumber != ENetProtocolCommand_VerifyConnect)
return false;
m_host->NotifyConnect(this, event);
m_host->NotifyConnect(this, event, true);
break;
case ENetPeerState::Disconnecting:
@ -864,7 +864,7 @@ namespace Nz
NetToHost(command->verifyConnect.packetThrottleInterval) != m_packetThrottleInterval ||
NetToHost(command->verifyConnect.packetThrottleAcceleration) != m_packetThrottleAcceleration ||
NetToHost(command->verifyConnect.packetThrottleDeceleration) != m_packetThrottleDeceleration ||
command->verifyConnect.connectID != m_connectID)
command->verifyConnect.connectID != m_connectID)
{
m_eventData = 0;
@ -891,7 +891,7 @@ namespace Nz
m_incomingBandwidth = NetToHost(command->verifyConnect.incomingBandwidth);
m_outgoingBandwidth = NetToHost(command->verifyConnect.outgoingBandwidth);
m_host->NotifyConnect(this, event);
m_host->NotifyConnect(this, event, false);
return true;
}