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.
///