internal OpenConnection GetOrCreateClient(SocksAddress address, bool useSsl, DateTime now) { lock (_connectionPool) { var key = new OpenConnectionKey(address, useSsl); OpenConnection info; if (_connectionPool.TryGetValue(key, out info)) { if (!info.DisposeIfInvalid(now)) { #if SUPPORTS_NLOG _logger.Debug("Pool: Reuse client"); #endif return(info); } #if SUPPORTS_NLOG _logger.Debug("Dispose client"); #endif _connectionPool.Remove(key); info.Client.Dispose(); } #if SUPPORTS_NLOG _logger.Debug("Pool: Create client (2): {0}", address); #endif info = new OpenConnection(address, Factory.Create(address, useSsl)); _connectionPool.Add(key, info); return(info); } }
internal OpenConnection Create(SocksAddress address, bool useSsl) { var key = new OpenConnectionKey(address, useSsl); var client = Factory.Create(address, useSsl); lock (_connectionPool) { OpenConnection oldInfo; if (_connectionPool.TryGetValue(key, out oldInfo)) { _connectionPool.Remove(key); oldInfo.Client.Dispose(); } var result = new OpenConnection(address, client); _connectionPool.Add(key, result); #if SUPPORTS_NLOG _logger.Debug("Pool: Create client (1): {0}", address); #endif return(result); } }