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);
        }