public static MySqlDataReader ExecuteReaderRpll(this MySqlCommand cmd, bool tryagain = true) { try { var copy = new ConcurrentDictionary <ulong, List <Tuple <long, MySqlDataReader> > >(_mMySqlDataReaders); foreach (var readerIP in copy) { foreach (var reader in readerIP.Value) { if (reader == null) { continue; } if (reader.Item1 + 600 > DateTimeOffset.UtcNow.ToUnixTimeSeconds()) { break; } reader.Item2.Close(); reader.Item2.Dispose(); } _mMySqlDataReaders[readerIP.Key].Clear(); _mMySqlDataReaders.Remove(readerIP.Key); } } catch { } // Add data reader organization MySqlDataReader rd; string ip = "0"; if (HttpContext.Current != null) { ip = Utility.GetIPAddress(HttpContext.Current.Request); } ulong key = Farmhash.Sharp.Farmhash.Hash64(ip); try { rd = cmd.ExecuteReader(); if (!_mMySqlDataReaders.ContainsKey(key)) { _mMySqlDataReaders[key] = new List <Tuple <long, MySqlDataReader> >(); } _mMySqlDataReaders[key].Add(new Tuple <long, MySqlDataReader>(DateTimeOffset.UtcNow.ToUnixTimeSeconds(), rd)); return(rd); } catch (MySqlException) { // Just open new connection and execute the reader on there if (tryagain) { if (cmd.Connection.Database.ToLower().Contains("rpll_vanilla")) { return(App.GetDB(1).Query(cmd.CommandText).ExecuteReaderRpll(false)); } else if (cmd.Connection.Database.ToLower().Contains("rpll_tbc")) { return(App.GetDB(2).Query(cmd.CommandText).ExecuteReaderRpll(false)); } else { return(App.GetDB().Query(cmd.CommandText).ExecuteReaderRpll(false)); } } else { if (_mMySqlDataReaders.ContainsKey(key) && _mMySqlDataReaders[key].Any()) { var now = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); foreach (var reader in _mMySqlDataReaders[key]) { if (reader == null) { continue; } if (reader.Item1 + 30 > DateTimeOffset.UtcNow.ToUnixTimeSeconds()) { break; } reader.Item2.Close(); reader.Item2.Dispose(); } _mMySqlDataReaders[key].Clear(); } rd = cmd.ExecuteReader(); if (!_mMySqlDataReaders.ContainsKey(key)) { _mMySqlDataReaders[key] = new List <Tuple <long, MySqlDataReader> >(); } _mMySqlDataReaders[key].Add(new Tuple <long, MySqlDataReader>(DateTimeOffset.UtcNow.ToUnixTimeSeconds(), rd)); return(rd); } } catch (KeyNotFoundException) { return(null); // Maybe a data race thingy? } catch (NullReferenceException) { SQLWrapper.DisposeSQL(); return(null); // Dont really know what to do then } catch (IndexOutOfRangeException) { return(null); // Dont really know what to do then } catch (ObjectDisposedException) { SQLWrapper.DisposeSQL(); return(null); // No clue } //return null; // Uston?!! }