public void Dispose() { if (IsConnected) { Close(); } if (tcpReader != null) { tcpReader.Dispose(); tcpReader = null; } if (tcpClient != null) { tcpClient.Close(); tcpClient = null; } if (EventDispatcher != null) { EventDispatcher.Dispose(); EventDispatcher = null; } }
private void DisconnectInternal(bool manualLock = false, bool triggerEvent = true) { if (wasExit) { return; } if (!manualLock) { Monitor.Enter(StatusLock); } try { switch (Status) { case Ts3ClientStatus.Disconnected: if (!wasExit) { wasExit = true; packetHandler.Stop(); msgProc.DropQueue(); dispatcher.Dispose(); if (triggerEvent) { OnDisconnected?.Invoke(this, new DisconnectEventArgs(packetHandler.ExitReason ?? MoveReason.LeftServer)); } } break; case Ts3ClientStatus.Disconnecting: break; case Ts3ClientStatus.Connected: ClientDisconnect(MoveReason.LeftServer, QuitMessage); Status = Ts3ClientStatus.Disconnecting; break; case Ts3ClientStatus.Connecting: break; default: break; } } finally { if (!manualLock) { Monitor.Exit(StatusLock); } } }
public override void Dispose() { lock (sendQueueLock) { tcpWriter?.Dispose(); tcpWriter = null; tcpReader?.Dispose(); tcpReader = null; msgProc.DropQueue(); dispatcher.Dispose(); } }
private void DisconnectInternal(ConnectionContext ctx, CommandError error = null, TsClientStatus?setStatus = null) { bool triggerEventSafe = false; lock (statusLock) { Log.Debug("DisconnectInternal wasExit:{0} error:{1} oldStatus:{2} newStatus:{3}", ctx.WasExit, error?.ErrorFormat(), status, setStatus); if (setStatus.HasValue) { status = setStatus.Value; } if (ctx.WasExit) { return; } switch (status) { case TsClientStatus.Connecting: case TsClientStatus.Disconnected: ctx.WasExit = true; packetHandler.Stop(); msgProc.DropQueue(); dispatcher.Dispose(); dispatcher = null; triggerEventSafe = true; break; case TsClientStatus.Disconnecting: break; case TsClientStatus.Connected: ClientDisconnect(Reason.LeftServer, QuitMessage); status = TsClientStatus.Disconnecting; break; default: throw Tools.UnhandledDefault(status); } } if (triggerEventSafe) { OnDisconnected?.Invoke(this, new DisconnectEventArgs(ctx.ExitReason ?? Reason.LeftServer, error)); } }
private void DisconnectInternal(ConnectionContext ctx, bool triggerEvent = true) { bool triggerEventSafe = false; lock (statusLock) { if (ctx.WasExit) { return; } switch (status) { case Ts3ClientStatus.Disconnected: ctx.WasExit = true; packetHandler.Stop(); msgProc.DropQueue(); dispatcher.Dispose(); triggerEventSafe = triggerEvent; break; case Ts3ClientStatus.Disconnecting: break; case Ts3ClientStatus.Connected: ClientDisconnect(MoveReason.LeftServer, QuitMessage); status = Ts3ClientStatus.Disconnecting; break; case Ts3ClientStatus.Connecting: break; default: throw Util.UnhandledDefault(status); } } if (triggerEventSafe) { OnDisconnected?.Invoke(this, new DisconnectEventArgs(packetHandler.ExitReason ?? MoveReason.LeftServer)); } }
/// <summary>Release all resources. Will try to disconnect before disposing.</summary> public override void Dispose() { Disconnect(); dispatcher?.Dispose(); }