/// <summary> /// Disconnect this connection /// </summary> public virtual void Disconnect() { // send a disconnect message and disconnect if (open && socket.Connected) { try { Send(Goodby); kcp.Flush(false); } catch (SocketException) { // this is ok, the connection was already closed } catch (ObjectDisposedException) { // this is normal when we stop the server // the socket is stopped so we can't send anything anymore // to the clients // the clients will eventually timeout and realize they // were disconnected } } open = false; // EOF is now available //dataAvailable?.TrySetResult(); }
// disconnect this connection public void Disconnect() { // only if not disconnected yet if (state == KcpState.Disconnected) { return; } // send a disconnect message if (socket.Connected) { try { SendDisconnect(); kcp.Flush(); } catch (SocketException) { // this is ok, the connection was already closed } catch (ObjectDisposedException) { // this is normal when we stop the server // the socket is stopped so we can't send anything anymore // to the clients // the clients will eventually timeout and realize they // were disconnected } } // set as Disconnected, call event Log.Info("KCP Connection: Disconnected."); state = KcpState.Disconnected; OnDisconnected?.Invoke(); }