private async Task <ConnectionWrapper> CreateConnectionAsync(CancellationToken token) { ConnectionWrapper connection = new ConnectionWrapper(settings.ConnectionString1, this); await connection.Connection.OpenAsync(token); PoolRepo.TryAdd(connection.CreationTime, connection); return(connection); }
private void CreateConnection() { ConnectionWrapper connection = new ConnectionWrapper(settings.ConnectionString1, this); connection.Connection.Open(); while (PoolRepo.ContainsKey(connection.CreationTime)) { connection.CreationTime = DateTime.UtcNow; } Pool.Push(connection); PoolRepo.TryAdd(connection.CreationTime, connection); }
public async Task <ConnectionWrapper> GetConnectionAsync(CancellationToken token) { ConnectionWrapper connection = null; while (!token.IsCancellationRequested) { if (Pool.TryPop(out connection)) { if (connection.Connection.FullState == System.Data.ConnectionState.Open) { return(connection); } else if (connection.Connection.FullState == System.Data.ConnectionState.Connecting) { continue; } else { PoolRepo.TryRemove(connection.CreationTime, out var _); } } else if (PoolRepo.Count < this.settings.ConnectionPoolMaxSize) { //if (Monitor.TryEnter(locker)) { try { connection = await CreateConnectionAsync(token); //Monitor.Exit(locker); return(connection); } catch (Exception) { // Monitor.Exit(locker); } } } else { await Task.Delay(100, token); } } throw new OperationCanceledException(); }
public async Task PersonSearch(int limit, long id, CancellationToken token) { try { using (ConnectionWrapper connectionWrapper = await connectionPoolManager.GetConnectionAsync(token)) { NpgsqlCommand searchCommand = connectionWrapper.Connection.CreateCommand(); searchCommand.CommandText = "get_user_messages"; searchCommand.CommandType = System.Data.CommandType.StoredProcedure; searchCommand.Parameters.Add(new NpgsqlParameter("_user_id", NpgsqlTypes.NpgsqlDbType.Bigint)); searchCommand.Parameters.Add(new NpgsqlParameter("lim", NpgsqlTypes.NpgsqlDbType.Integer)); searchCommand.Parameters["_user_id"].Value = id; searchCommand.Parameters["lim"].Value = limit; using NpgsqlDataReader reader = await searchCommand.ExecuteReaderAsync(); //List<SearchResult> results = new List<SearchResult>(); while (await reader.ReadAsync()) { if (!reader.IsDBNull(0) && !reader.IsDBNull(1)) { searchResultReciever.Recieve(new SearchResult() { Link = reader.GetString(0), Text = reader.GetString(1) }); } } //return results; } } catch (Exception) { // return new List<SearchResult>(); } }
private async Task Search(SearchType storedProcedure, string request, DateTime startDt, DateTime endDt, int limit, bool is_channel, bool is_group, CancellationToken token, params long[] chat_ids) { try { string storedProcedureName = null;; switch (storedProcedure) { case SearchType.SearchNamePeriod: storedProcedureName = "search_name_period"; break; case SearchType.SearchInChannel: storedProcedureName = "search_in_channel"; break; case SearchType.SearchPeriod: storedProcedureName = "search_period"; break; default: return; } using (ConnectionWrapper connectionWrapper = await connectionPoolManager.GetConnectionAsync(token)) { NpgsqlCommand searchCommand = connectionWrapper.Connection.CreateCommand(); searchCommand.CommandText = storedProcedureName; searchCommand.CommandType = System.Data.CommandType.StoredProcedure; searchCommand.Parameters.Add(new NpgsqlParameter("request", NpgsqlTypes.NpgsqlDbType.Text)); searchCommand.Parameters.Add(new NpgsqlParameter("lim", NpgsqlTypes.NpgsqlDbType.Integer)); searchCommand.Parameters.Add(new NpgsqlParameter("_is_group", NpgsqlTypes.NpgsqlDbType.Boolean)); searchCommand.Parameters.Add(new NpgsqlParameter("_is_channel", NpgsqlTypes.NpgsqlDbType.Boolean)); searchCommand.Parameters.Add(new NpgsqlParameter("dt1", NpgsqlTypes.NpgsqlDbType.Timestamp)); searchCommand.Parameters.Add(new NpgsqlParameter("dt2", NpgsqlTypes.NpgsqlDbType.Timestamp)); searchCommand.Parameters["request"].Value = request; searchCommand.Parameters["lim"].Value = limit; searchCommand.Parameters["dt1"].Value = startDt; searchCommand.Parameters["dt2"].Value = endDt; searchCommand.Parameters["_is_group"].Value = is_group; searchCommand.Parameters["_is_channel"].Value = is_channel; if (chat_ids != null && chat_ids.Length > 0 && storedProcedure == SearchType.SearchInChannel) { searchCommand.Parameters.Add(new NpgsqlParameter("ids", NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Bigint)); searchCommand.Parameters["ids"].Value = chat_ids; } using (NpgsqlDataReader reader = await searchCommand.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { if (!reader.IsDBNull(0) && !reader.IsDBNull(1)) { string name = ""; if (reader.FieldCount >= 3) { if (!reader.IsDBNull(2)) { name = reader.GetString(2); } } searchResultReciever.Recieve(new SearchResult() { Link = reader.GetString(0), Text = reader.GetString(1), Name = name }); } } } //searchResultReciever.IsComplited = true; //return results; } } catch (Exception) { } }