public void RnProcessarEventosFinalizarEdicaoTarefa()
        {
            int contador = 0;
            WexMultiAccessClientMock cliente = new WexMultiAccessClientMock()
            {
                TcpAdapterStubAtivo = true
            };
            TcpAdapterPool pool = new TcpAdapterPool();

            #region Preenchendo informações do cliente
            cliente.EnderecoIp    = ipServidor;
            cliente.OidCronograma = "C1";
            cliente.Porta         = porta;
            cliente.Login         = "******";
            cliente.Conectar();
            pool.AceitarConexao(cliente);
            cliente.AoSerFinalizadaEdicaoTarefaPorOutroUsuario += (mensagem) => { contador++; };
            cliente.AoServidorDesconectar += (mensagemDto) => { };
            #endregion

            //Criando a mensagem de fim de edição de uma tarefa por outro colaborador
            MensagemDto mensagemFimDeEdicao = Mensagem.RnCriarMensagemFinalizarEdicaoTarefa("T1", "Marcos", "C1");
            string      mensagemJson        = JsonConvert.SerializeObject(mensagemFimDeEdicao);
            mensagemJson = TcpUtil.AdicionarStringProtecaoDeIntegridade(mensagemJson);

            pool.EnviarMensagemPara(cliente, mensagemJson);

            ControleDeEsperaUtil.AguardarAte(() => { return(contador == 1); });
            Assert.AreEqual(1, contador, "Deveria ter sido disparado o evento AoEdicaoTarefaSerRecusada");
            cliente.RnDesconectar();
        }
        public void RnProcessarEventosReceberMensagensComStringDeProtecao()
        {
            int contador = 0;
            WexMultiAccessClientMock cliente = new WexMultiAccessClientMock()
            {
                Porta = porta, EnderecoIp = ipServidor, Login = "******", OidCronograma = "C1", TcpAdapterStubAtivo = true
            };
            TcpAdapterPool pool = new TcpAdapterPool();
            // mensagemDto que serão preenchidas no disparo dos eventos do client
            MensagemDto mensagemAutenticacaoEsperada     = new MensagemDto();
            MensagemDto mensagemNovaTarefaCriadaEsperada = new MensagemDto();
            MensagemDto mensagemInicioEdicaoTarefaCriada = new MensagemDto();

            //eventos que deverão preencher as mensagensDto anteriores para comparação posterior
            cliente.AoSerAutenticadoComSucesso += (mensagem) => { contador++; mensagemAutenticacaoEsperada = mensagem; };
            cliente.AoSerCriadaNovaTarefa      += (mensagem) => { contador++; mensagemNovaTarefaCriadaEsperada = mensagem; };
            cliente.AoIniciarEdicaoTarefa      += (mensagem) => { contador++; mensagemInicioEdicaoTarefaCriada = mensagem; };
            cliente.AoServidorDesconectar      += (mensagemDto) => { };
            cliente.Conectar();
            pool.AceitarConexao(cliente);

            //dicionário de tarefas impactadas
            Dictionary <string, Int16> tarefasImpactadas = new Dictionary <string, short>();

            tarefasImpactadas.Add("T2", 1);
            tarefasImpactadas.Add("T3", 2);
            tarefasImpactadas.Add("T4", 3);
            tarefasImpactadas.Add("T5", 4);

            //mensagens que serão comunicadas ao client e deverão ser recebidas com sucesso no client
            MensagemDto autenticacaoEnviada, novaTarefaCriadaEnviada, inicioEdicaoTarefaEnviada;

            //criando mensagem de conexão aceita e retornando a mensagem ao client
            autenticacaoEnviada = Mensagem.RnCriarMensagemConexaoEfetuadaComSucesso(new string[] { "Joao", "Pedro" }, "C1", null);
            string json = JsonConvert.SerializeObject(autenticacaoEnviada);

            json = TcpUtil.AdicionarStringProtecaoDeIntegridade(json);

            //criando mensagem de  inicio de edição de uma tarefa e comunicando ao client
            inicioEdicaoTarefaEnviada = Mensagem.RnCriarMensagemInicioEdicaoTarefa("T1", "Joao", "C1");
            string json2 = JsonConvert.SerializeObject(inicioEdicaoTarefaEnviada);

            json2 = TcpUtil.AdicionarStringProtecaoDeIntegridade(json2);

            DateUtil.CurrentDateTime = DateTime.Now;

            //criando mensagem de criação de uma nova tarefa
            novaTarefaCriadaEnviada = Mensagem.RnCriarMensagemNovaTarefaCriada("T2", "Gabriel", "C2", tarefasImpactadas, DateUtil.CurrentDateTime);
            string json3 = JsonConvert.SerializeObject(novaTarefaCriadaEnviada);

            json3 = TcpUtil.AdicionarStringProtecaoDeIntegridade(json3);

            //unindo as mensagens em uma unica para testar o envio e o recebimento de mensagens coladas
            json = json + json2 + json3;

            pool.EnviarMensagemPara(cliente, json);
            //aguardar até que os 3 eventos do client sejam disparados ao receber e tratar as mensagens enviadas
            ControleDeEsperaUtil.AguardarAte(() => { return(contador == 3); });
            Assert.AreEqual(3, contador, "Deveria ter contado 3 pois foram é a quantidade de mensagens acumuladas no tcp");

            //asserts para a mensagem de autenticação

            Assert.AreEqual(mensagemAutenticacaoEsperada.Tipo, autenticacaoEnviada.Tipo, "A mensagem recebida de autenticação deveria ser do mesmo tipo");
            Assert.AreEqual((string)mensagemAutenticacaoEsperada.Propriedades[Constantes.OIDCRONOGRAMA], (string)autenticacaoEnviada.Propriedades["oidCronograma"], "Deveria possuir o mesmo" +
                            " cronograma nas mensagens de autenticação");
            CollectionAssert.AreEquivalent((string[])mensagemAutenticacaoEsperada.Propriedades[Constantes.USUARIOS], (string[])autenticacaoEnviada.Propriedades[Constantes.USUARIOS], "Deveria possuir a mesma lista de usuários online");

            //asserts para mensagem de criação de nova tarefa

            Assert.AreEqual(mensagemNovaTarefaCriadaEsperada.Tipo, novaTarefaCriadaEnviada.Tipo, "A mensagem recebida de nova tarefa criada deveria ser do mesmo tipo");
            Assert.AreEqual((string)mensagemNovaTarefaCriadaEsperada.Propriedades[Constantes.OIDCRONOGRAMA], (string)novaTarefaCriadaEnviada.Propriedades[Constantes.OIDCRONOGRAMA], "A mensagem recebida de nova tarefa criada deveria ser do mesmo tipo");
            CollectionAssert.AreEquivalent((Dictionary <string, Int16>)mensagemNovaTarefaCriadaEsperada.Propriedades[Constantes.TAREFAS_IMPACTADAS], (Dictionary <string, Int16>)novaTarefaCriadaEnviada.Propriedades[Constantes.TAREFAS_IMPACTADAS], "Deveria possuir as tarefas impactadas com a mesma ordenacao");
        }