public override void Update() { if (HostID < 0) { return; } int connectionId, channelId, dataSize, bufferSize = NetworkMessage.MaxMessageSize; byte error; NetworkEventType evt; do { evt = NetworkTransport.ReceiveFromHost(HostID, out connectionId, out channelId, ReadBuffer, bufferSize, out dataSize, out error); switch (evt) { case NetworkEventType.Nothing: break; case NetworkEventType.ConnectEvent: OnNewConnection(connectionId); break; case NetworkEventType.DataEvent: OnRecieveData(connectionId, ReadBuffer, dataSize); break; case NetworkEventType.DisconnectEvent: OnDisconnect(connectionId, UNETUtility.CreateError(error)); break; default: Debug.LogError($"Unkown network message type recieved: {evt}"); break; } } while (evt != NetworkEventType.Nothing && !IsDisposed); }
void OnDisconnect(int connectionId, byte error) { UNETConnection connection; if (!connectionMap.TryGetValue(connectionId, out connection)) { return; } var exception = UNETUtility.CreateError(error); if (exception == null) { connection.ConnectTask.TrySetResult(new object()); } else { connection.ConnectTask.TrySetException(exception); } OnPeerDisconnected?.Invoke(connection); RemoveConnection(connection); }