breaking: clean up Server Disconnect code so it only calls Transport.Disconnect and the future Transport.OnDisconnected call handles the rest.

This commit is contained in:
vis2k 2021-05-10 21:41:15 +08:00
parent 45e481e65e
commit 04e184dfad
2 changed files with 15 additions and 7 deletions

View File

@ -173,12 +173,19 @@ internal void Update()
} }
/// <summary>Disconnects this connection.</summary> /// <summary>Disconnects this connection.</summary>
// IMPORTANT: calls Transport.Disconnect.
// Transport.OnDisconnected is then called at some point in the future.
public override void Disconnect() public override void Disconnect()
{ {
// set not ready and handle clientscene disconnect in any case // old UNET disconnect handling:
// (might be client or host mode here) //isReady = false;
isReady = false; // NetworkServer.OnTransportDisconnected removes conn so not needed!
// ask transport to disconnect
Transport.activeTransport.ServerDisconnect(connectionId); Transport.activeTransport.ServerDisconnect(connectionId);
// remove self from observing's observers
// TODO move to OnTransportDisconnected?
RemoveFromObservingsObservers(); RemoveFromObservingsObservers();
} }
} }

View File

@ -390,6 +390,7 @@ static void OnTransportConnected(int connectionId)
} }
} }
// TODO move this into OnTransportConnected later :/
internal static void OnConnected(NetworkConnectionToClient conn) internal static void OnConnected(NetworkConnectionToClient conn)
{ {
// Debug.Log("Server accepted client:" + conn); // Debug.Log("Server accepted client:" + conn);
@ -418,7 +419,8 @@ internal static void OnTransportDisconnected(int connectionId)
// Debug.Log("Server disconnect client:" + connectionId); // Debug.Log("Server disconnect client:" + connectionId);
if (connections.TryGetValue(connectionId, out NetworkConnectionToClient conn)) if (connections.TryGetValue(connectionId, out NetworkConnectionToClient conn))
{ {
conn.Disconnect(); // remove connection, call OnDisconnectEvent which is used by
// NetworkManager (calls NetworkManager.OnServerDisconnect)
RemoveConnection(connectionId); RemoveConnection(connectionId);
// Debug.Log("Server lost client:" + connectionId); // Debug.Log("Server lost client:" + connectionId);
@ -532,10 +534,9 @@ public static void DisconnectAllExternalConnections()
// copy is no performance problem. // copy is no performance problem.
foreach (NetworkConnectionToClient conn in connections.Values.ToList()) foreach (NetworkConnectionToClient conn in connections.Values.ToList())
{ {
// simply disconnect.
// Transport.OnDisconnected is called later.
conn.Disconnect(); conn.Disconnect();
// call OnDisconnected unless local player in host mode
if (conn.connectionId != NetworkConnection.LocalConnectionId)
OnDisconnected(conn);
} }
connections.Clear(); connections.Clear();
} }