コード例 #1
0
		/// <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;
		}
コード例 #2
0
        /// <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;
        }