public void Close() { lock (this) { if (closed) { return; } closed = true; } try { if (TryReconnect()) return; lock (server) { if (this.State != ConnectState.END) { this.State = ConnectState.END; server.ServerSpeedLog().AddDisconnectTimes(); server.GetConnections().DecRef(this.connection); server.ServerSpeedLog().AddSpeedLog(new TransLog((int)speedTester.GetAvgDownloadSpeed(), DateTime.Now)); } getCurrentServer = null; ResetTimeout(0); speedTester = null; } CloseSocket(ref connection); CloseSocket(ref connectionUDP); CloseSocket(ref remote); CloseSocket(ref remoteUDP); if (remoteTDP != null) { try { remoteTDP.Shutdown(); //remoteTDP.Close(); } catch (Exception e) { Logging.LogUsefulException(e); } remoteTDP = null; } if (obfs != null) { obfs.Dispose(); obfs = null; } lock (encryptionLock) { lock (decryptionLock) { if (encryptor != null) ((IDisposable)encryptor).Dispose(); if (encryptorUDP != null) ((IDisposable)encryptorUDP).Dispose(); } } } catch (Exception e) { Logging.LogUsefulException(e); } }
public void Close() { lock (this) { if (closed) { return; } closed = true; } if (lastErrCode == 0) { if (speedTester.sizeRecv == 0 && speedTester.sizeUpload > 0) server.ServerSpeedLog().AddErrorEmptyTimes(); else server.ServerSpeedLog().AddNoErrorTimes(); } try { if (TryReconnect()) return; lock (server) { if (this.State != ConnectState.END) { if (this.State != ConnectState.HANDSHAKE && this.State != ConnectState.READY) { server.ServerSpeedLog().AddDisconnectTimes(); server.GetConnections().DecRef(this.connection); } server.ServerSpeedLog().AddSpeedLog(new TransLog((int)speedTester.GetAvgDownloadSpeed(), DateTime.Now)); this.State = ConnectState.END; } getCurrentServer = null; ResetTimeout(0); } CloseSocket(ref connection); CloseSocket(ref connectionUDP); CloseSocket(ref remote); CloseSocket(ref remoteUDP); if (remoteTDP != null) { try { remoteTDP.Shutdown(); //remoteTDP.Close(); } catch (Exception e) { Logging.LogUsefulException(e); } } if (obfs != null) { obfs.Dispose(); obfs = null; } if (protocol != null) { protocol.Dispose(); protocol = null; } lock (encryptionLock) { lock (decryptionLock) { if (encryptor != null) ((IDisposable)encryptor).Dispose(); if (encryptorUDP != null) ((IDisposable)encryptorUDP).Dispose(); } } } catch (Exception e) { Logging.LogUsefulException(e); } }