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); int ReceiveIncomingCommands(ENetEvent* event);
void NotifyConnect(ENetPeer* peer, ENetEvent* event); void NotifyConnect(ENetPeer* peer, ENetEvent* event, bool incoming);
void NotifyDisconnect(ENetPeer*, ENetEvent* event); void NotifyDisconnect(ENetPeer*, ENetEvent* event);
void SendAcknowledgements(ENetPeer* peer); void SendAcknowledgements(ENetPeer* peer);

View File

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

View File

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

View File

@ -501,7 +501,7 @@ namespace Nz
if (commandNumber != ENetProtocolCommand_VerifyConnect) if (commandNumber != ENetProtocolCommand_VerifyConnect)
return false; return false;
m_host->NotifyConnect(this, event); m_host->NotifyConnect(this, event, true);
break; break;
case ENetPeerState::Disconnecting: case ENetPeerState::Disconnecting:
@ -891,7 +891,7 @@ namespace Nz
m_incomingBandwidth = NetToHost(command->verifyConnect.incomingBandwidth); m_incomingBandwidth = NetToHost(command->verifyConnect.incomingBandwidth);
m_outgoingBandwidth = NetToHost(command->verifyConnect.outgoingBandwidth); m_outgoingBandwidth = NetToHost(command->verifyConnect.outgoingBandwidth);
m_host->NotifyConnect(this, event); m_host->NotifyConnect(this, event, false);
return true; return true;
} }