protected virtual void Dispose(bool disposing) { if (!Disposed) { Server.RemoveClient(this); if (disposing) { // dispose managed state (managed objects). foreach (var http in RemoteClients) { http.Value.Dispose(); } _taskScheduler.Dispose(); RemoteClients.Clear(); _timer.Dispose(); Authenticator.Dispose(); Cryptor.Dispose(); } // free unmanaged resources (unmanaged objects) and override a finalizer below. // set large fields to null. _taskScheduler = null; _taskFactory = null; _timer = null; RemoteClients = null; Disposed = true; } }
public SharkClient(SharkServer server) { Id = RandomIdGenerator.NewId(); Server = server; RemoteClients = new ConcurrentDictionary <int, ISocketClient>(); CanRead = true; _taskScheduler = new SingleThreadingScheduler(); _taskFactory = new TaskFactory(_taskScheduler); DisconnectQueue = new ConcurrentQueue <int>(); _timer = new Timer(OnTimeOut, null, 2000, 2000); }
protected virtual void Dispose(bool disposing) { lock (_syncRoot) { if (!Disposed) { if (disposing) { // dispose managed state (managed objects). try { _tcp.Client.Shutdown(SocketShutdown.Both); _tcp.Client.Disconnect(false); } catch (Exception) { Logger.LogWarning("Socket errored before shutdown and disconnect"); } _taskScheduler.Dispose(); _stream.Dispose(); _tcp.Dispose(); _disconnectTimer.Dispose(); _authenticator.Dispose(); _keyGenerator.Dispose(); Cryptor.Dispose(); RemoteClients.Clear(); } // free unmanaged resources (unmanaged objects) and override a finalizer below. // set large fields to null. _taskScheduler = null; _taskFactory = null; _tcp = null; _stream = null; _disconnectTimer = null; _authenticator = null; _keyGenerator = null; Disposed = true; } } }
public SharkClient(IServiceProvider serviceProvider, ILogger <SharkClient> logger ) { var tcp = new TcpClient(AddressFamily.InterNetworkV6); var configure = serviceProvider.GetService <IConfiguration>(); tcp.Client.DualMode = true; _tcp = tcp; Id = RandomIdGenerator.NewId(); ServiceProvider = serviceProvider; RemoteClients = new ConcurrentDictionary <int, ISocketClient>(); DisconnectQueue = new ConcurrentQueue <int>(); _stopInternal = new TaskCompletionSource <int>(); _syncRoot = new object(); _disconnectTimer = new Timer(OnDisconnectTimeout, null, 2000, 2000); _closeTimer = new Timer(OnCloseTimeout, null, Timeout.Infinite, Timeout.Infinite); _taskScheduler = new SingleThreadingScheduler(); _taskFactory = new TaskFactory(_taskScheduler); _closeTimerStarted = 0; Logger = logger; Initialized = false; Cryptor = serviceProvider.GetByConfiguration <ICryptor>(); _keyGenerator = serviceProvider.GetByConfiguration <IKeyGenerator>(); _authenticator = serviceProvider.GetByConfiguration <IAuthenticator>(); if (!int.TryParse(configure?["client:maxWaitTime"], out var seconds) || seconds <= 0) { #if DEBUG seconds = 10; #else seconds = 60; #endif } _maxWaitTime = TimeSpan.FromSeconds(seconds); }