/// <summary> /// Reconstrói a conexão com banco de dados /// </summary> private ConexãoConcorrente ReconstruirConexão(IDbConnection antigaConexão) { IDbConnection conexão; ConexãoDbUsuário cUsr; int cnt = 0; Queue<ConexãoDbUsuário> conexões = ObterConexões(); ConexãoDbUsuário dbConexão = null; lock (this) { cUsr = conexões.Dequeue(); while (cUsr.Conexão != antigaConexão && cnt++ < conexões.Count) { conexões.Enqueue(cUsr); cUsr = conexões.Dequeue(); } if (cUsr.Conexão == antigaConexão) { //hashMapConexão.Remove(cUsr.Conexão.ConexãoOriginal); cUsr.Dispose(); } conexão = usuário.usuários.Conectar(nome, senha); dbConexão = new ConexãoDbUsuário(conexão); conexões.Enqueue(dbConexão); hashMapConexão[conexão] = dbConexão; } DispararAtualizarContexto(); return dbConexão.Conexão; }
/// <summary> /// Adiciona uma conexão à lista de conexões do usuário, /// ligando Timer para verificação de excesso de conexões. /// </summary> private ConexãoDbUsuário AdicionarConexão(IDbConnection conexão, Queue<ConexãoDbUsuário> conexões) { ConexãoDbUsuário infoConexão = new ConexãoDbUsuário(conexão); lock (this) { conexões.Enqueue(infoConexão); hashMapConexão[conexão] = infoConexão; if (conexões.Count > limiarExcessoConexões) if (timerVerificarExcesso == null) timerVerificarExcesso = new Timer(new TimerCallback(VerificarExcessoConexões), null, 10000, 60000); } DispararAtualizarContexto(); return infoConexão; }