From d65af4c62145e9c069dad2dd6d068622cb76d015 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 21 May 2023 20:23:51 +0300 Subject: [PATCH] _enet timeout --- Source/Engine/Networking/Drivers/ENetDriver.cpp | 10 ++++++++-- Source/Engine/Networking/NetworkConfig.h | 6 ++++++ Source/Engine/Networking/NetworkManager.cpp | 1 + Source/Engine/Networking/NetworkSettings.h | 6 ++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Networking/Drivers/ENetDriver.cpp b/Source/Engine/Networking/Drivers/ENetDriver.cpp index d664dd9c5..c6808acc5 100644 --- a/Source/Engine/Networking/Drivers/ENetDriver.cpp +++ b/Source/Engine/Networking/Drivers/ENetDriver.cpp @@ -134,6 +134,9 @@ bool ENetDriver::Connect() return false; } + // Change the maximum timeout for the peer + enet_peer_timeout(_peer, ENET_PEER_TIMEOUT_LIMIT, ENET_PEER_TIMEOUT_MINIMUM, _config.ConnectionTimeout * 1000); + return true; } @@ -141,7 +144,7 @@ void ENetDriver::Disconnect() { if (_peer) { - enet_peer_disconnect_now(_peer, 0); + enet_peer_disconnect(_peer, 0); _peer = nullptr; LOG(Info, "Disconnected"); } @@ -153,7 +156,7 @@ void ENetDriver::Disconnect(const NetworkConnection& connection) ENetPeer* peer; if (_peerMap.TryGet(connectionId, peer)) { - enet_peer_disconnect_now(peer, 0); + enet_peer_disconnect(peer, 0); _peerMap.Remove(connectionId); } else @@ -214,6 +217,7 @@ void ENetDriver::SendMessage(const NetworkChannelType channelType, const Network { ASSERT(!IsServer()); SendPacketToPeer(_peer, channelType, message); + enet_host_flush(_host); } void ENetDriver::SendMessage(NetworkChannelType channelType, const NetworkMessage& message, NetworkConnection target) @@ -223,6 +227,7 @@ void ENetDriver::SendMessage(NetworkChannelType channelType, const NetworkMessag if (_peerMap.TryGet(target.ConnectionId, peer) && peer && peer->state == ENET_PEER_STATE_CONNECTED) { SendPacketToPeer(peer, channelType, message); + enet_host_flush(_host); } } @@ -235,6 +240,7 @@ void ENetDriver::SendMessage(const NetworkChannelType channelType, const Network if (_peerMap.TryGet(target.ConnectionId, peer) && peer && peer->state == ENET_PEER_STATE_CONNECTED) { SendPacketToPeer(peer, channelType, message); + enet_host_flush(_host); } } } diff --git a/Source/Engine/Networking/NetworkConfig.h b/Source/Engine/Networking/NetworkConfig.h index e9827e536..196d71000 100644 --- a/Source/Engine/Networking/NetworkConfig.h +++ b/Source/Engine/Networking/NetworkConfig.h @@ -51,6 +51,12 @@ API_STRUCT(Namespace="FlaxEngine.Networking") struct FLAXENGINE_API NetworkConfi API_FIELD() uint16 ConnectionsLimit = 32; + /// + /// The timeout in seconds for the peer to disconnect. + /// + API_FIELD() + uint16 ConnectionTimeout = 30; + /// /// Address used to connect to or listen at. /// diff --git a/Source/Engine/Networking/NetworkManager.cpp b/Source/Engine/Networking/NetworkManager.cpp index b9bb0125a..79e2ee151 100644 --- a/Source/Engine/Networking/NetworkManager.cpp +++ b/Source/Engine/Networking/NetworkManager.cpp @@ -187,6 +187,7 @@ bool StartPeer() LOG(Error, "Unknown Network Driver type {0}", String(settings.NetworkDriver)); return true; } + networkConfig.ConnectionTimeout = settings.Timeout; networkConfig.NetworkDriver = ScriptingObject::NewObject(networkDriverType); NetworkManager::Peer = NetworkPeer::CreatePeer(networkConfig); if (!NetworkManager::Peer) diff --git a/Source/Engine/Networking/NetworkSettings.h b/Source/Engine/Networking/NetworkSettings.h index c861114f9..1a85ca978 100644 --- a/Source/Engine/Networking/NetworkSettings.h +++ b/Source/Engine/Networking/NetworkSettings.h @@ -32,6 +32,12 @@ public: API_FIELD(Attributes="EditorOrder(100), Limit(0, 1000), EditorDisplay(\"General\", \"Network FPS\")") float NetworkFPS = 60.0f; + /// + /// The timeout in seconds for the peer to disconnect. + /// + API_FIELD(Attributes="EditorOrder(200), Limit(0, 32768), EditorDisplay(\"General\")") + int32 Timeout = 30; + /// /// Address of the server (server/host always runs on localhost). Only IPv4 is supported. ///