|
@@ -757,8 +757,7 @@ extern "C" {
|
|
|
|
|
|
/** 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 intialized by
|
|
|
- * enet_host_connect has timed out. The peer field contains the peer
|
|
|
+ * a peer has timed out. The peer field contains the peer
|
|
|
* which disconnected. The data field contains user supplied data
|
|
|
* describing the disconnection, or 0, if none is available.
|
|
|
*/
|
|
@@ -770,7 +769,13 @@ extern "C" {
|
|
|
* the packet that was received; this packet must be destroyed with
|
|
|
* enet_packet_destroy after use.
|
|
|
*/
|
|
|
- ENET_EVENT_TYPE_RECEIVE = 3
|
|
|
+ ENET_EVENT_TYPE_RECEIVE = 3,
|
|
|
+
|
|
|
+ /** a peer is disconnected because the host didn't receive the acknowledgment
|
|
|
+ * packet within certain maximum time out. The reason could be because of bad
|
|
|
+ * network connection or host crashed.
|
|
|
+ */
|
|
|
+ ENET_EVENT_TYPE_DISCONNECT_TIMEOUT = 4,
|
|
|
} ENetEventType;
|
|
|
|
|
|
/**
|
|
@@ -1545,6 +1550,27 @@ extern "C" {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ static void enet_protocol_notify_disconnect_timeout (ENetHost * host, ENetPeer * peer, ENetEvent * event) {
|
|
|
+ if (peer->state >= ENET_PEER_STATE_CONNECTION_PENDING) {
|
|
|
+ host->recalculateBandwidthLimits = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (peer->state != ENET_PEER_STATE_CONNECTING && peer->state < ENET_PEER_STATE_CONNECTION_SUCCEEDED) {
|
|
|
+ enet_peer_reset (peer);
|
|
|
+ }
|
|
|
+ else if (event != NULL) {
|
|
|
+ event->type = ENET_EVENT_TYPE_DISCONNECT_TIMEOUT;
|
|
|
+ event->peer = peer;
|
|
|
+ event->data = 0;
|
|
|
+
|
|
|
+ enet_peer_reset(peer);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ peer->eventData = 0;
|
|
|
+ enet_protocol_dispatch_state(host, peer, ENET_PEER_STATE_ZOMBIE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
static void enet_protocol_remove_sent_unreliable_commands(ENetPeer *peer) {
|
|
|
ENetOutgoingCommand *outgoingCommand;
|
|
|
|
|
@@ -2789,7 +2815,7 @@ extern "C" {
|
|
|
(outgoingCommand->roundTripTimeout >= outgoingCommand->roundTripTimeoutLimit &&
|
|
|
ENET_TIME_DIFFERENCE(host->serviceTime, peer->earliestTimeout) >= peer->timeoutMinimum))
|
|
|
) {
|
|
|
- enet_protocol_notify_disconnect(host, peer, event);
|
|
|
+ enet_protocol_notify_disconnect_timeout(host, peer, event);
|
|
|
return 1;
|
|
|
}
|
|
|
|