From 99e8704735e6163b0746bba7c03d5ceefa3dffc3 Mon Sep 17 00:00:00 2001 From: Simon Lemay Date: Wed, 21 Jul 2021 12:05:52 -0400 Subject: [PATCH] Generate Connect events from accepted connections MLAPI appears to expect Connect events on servers when new clients connect (at least this is what's implemented in SIPTransport). UTP doesn't generate Connect events server-side, so we must generate them ourselves when accepting connections. --- .../Runtime/UTPTransport.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs b/com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs index dec230a11a..ab53839f2e 100644 --- a/com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs +++ b/com.unity.multiplayer.transport.utp/Runtime/UTPTransport.cs @@ -286,6 +286,23 @@ private IEnumerator StartRelayServer(SocketTask task) #endif } + private bool AcceptConnection() + { + var connection = m_Driver.Accept(); + + if (connection != default(NetworkConnection)) + { + InvokeOnTransportEvent(NetworkEvent.Connect, + ParseClientId(connection), + NetworkChannel.Internal, + default(ArraySegment), + Time.realtimeSinceStartup); + return true; + } + + return false; + } + private bool ProcessEvent() { var eventType = m_Driver.PopEvent(out var networkConnection, out var reader); @@ -344,6 +361,7 @@ private void Update() if (m_Driver.IsCreated) { m_Driver.ScheduleUpdate().Complete(); + while(AcceptConnection() && m_Driver.IsCreated); while(ProcessEvent() && m_Driver.IsCreated); }