public async Task <CQConnectionStatus> ConnectAsync() { try { this.m_client = new MinimistTelnetClient(this.m_ip.Address.ToString(), this.m_ip.Port) { Timeout = 1000 / 30 }; App.ApplicationExit += this.ApplicationExitHandler; Log("Starting query"); return(await this.CaptureChatMessages()); } catch (Exception e) { MinimistTelnetClient client = this.m_client; TS3ClientQuery.LastException = e; client?.Close(); Log("Exception Occurred: " + e.Message); if (e is SocketException ex && ex.ErrorCode == 10061) { return(CQConnectionStatus.WaitingForServer); } return(CQConnectionStatus.ConnectionReset); } finally { this.ApplicationExitHandler(null); App.ApplicationExit -= this.ApplicationExitHandler; } }
private void ApplicationExitHandler(ExitEventArgs e) { MinimistTelnetClient client = Interlocked.Exchange(ref this.m_client, null); if (client != null && client.IsConnected) { client.Close(); } }