public void RnComunicarAlteracaoNomeCronogramaTest()
        {
            //inicializar o Dicionário tarefasGrid
            const string ipServidor = "127.0.0.1";
            const int    porta      = 8093;

            TcpListener servidor = new TcpListener(IPAddress.Parse(ipServidor), porta);

            servidor.Start();

            WexMultiAccessClientMock client = new WexMultiAccessClientMock();

            client.Porta         = porta;
            client.EnderecoIp    = ipServidor;
            client.Login         = "******";
            client.OidCronograma = "C1";
            client.Conectar();
            client.AoServidorDesconectar += (mensagemDto) => { };
            TcpClient conexaoClienteNoServidor = servidor.AcceptTcpClient();

            //efetuar a leitura da autenticacao do client
            TcpUtil.ReceberMensagemTcp(conexaoClienteNoServidor);
            client.RnComunicarAlteracaoDadosCronograma();
            ControleDeEsperaUtil.AguardarAte(() => { return(conexaoClienteNoServidor.Available > 0); });
            string mensagemJson = TcpUtil.ReceberMensagemTcp(conexaoClienteNoServidor);

            mensagemJson = TcpUtil.RemoverStringProtecaoDeIntegridade(mensagemJson);
            MensagemDto mensagemRecebida = JsonConvert.DeserializeObject <MensagemDto>(mensagemJson);

            Assert.AreEqual(client.Login, (string)mensagemRecebida.Propriedades[Constantes.AUTOR_ACAO], "O nome do autor da ação deveria corresponder ao nome esperado");
            Assert.AreEqual(client.OidCronograma, (string)mensagemRecebida.Propriedades[Constantes.OIDCRONOGRAMA], "O oid do cronograma atual deveria corresponder ao oid atual");
        }
        public void RnComunicarInicioExclusaoTarefaTest()
        {
            const string ipServidor = "127.0.0.1";
            const int    porta      = 8086;
            TcpListener  servidor   = new TcpListener(IPAddress.Parse(ipServidor), porta);

            servidor.Start();
            WexMultiAccessClientMock cliente = new WexMultiAccessClientMock()
            {
                EnderecoIp    = ipServidor,
                OidCronograma = "C1",
                Porta         = porta,
                Login         = "******"
            };

            cliente.AoServidorDesconectar += (mensagem) => { };
            cliente.Conectar();
            TcpClient tcpEmServidor = servidor.AcceptTcpClient();

            //interceptando  a mensagem de conexão
            TcpUtil.ReceberMensagemTcp(tcpEmServidor);
            cliente.RnComunicarInicioExclusaoTarefa(new string[] { "T1", "T2", "T3" });
            string resposta = TcpUtil.ReceberMensagemTcp(tcpEmServidor);

            resposta = TcpUtil.RemoverStringProtecaoDeIntegridade(resposta);
            MensagemDto mensagemDto = Mensagem.DeserializarMensagemDto(resposta);

            Assert.AreEqual(CsTipoMensagem.ExclusaoTarefaIniciada, mensagemDto.Tipo, "A mensagem recebida veio com tipo diferente do original");
            Assert.IsTrue(mensagemDto.Propriedades.ContainsKey(Constantes.AUTOR_ACAO), "A mensagem deveria conter o usuário que solicitou a exclusão");
            Assert.AreEqual("Joao", (string)mensagemDto.Propriedades[Constantes.AUTOR_ACAO], "O usuário deveria ser o Joao");
            Assert.IsTrue(mensagemDto.Propriedades.ContainsKey(Constantes.TAREFAS), "A mensagem deveria conter tarefas");
            CollectionAssert.AreEquivalent(new string[] { "T1", "T2", "T3" }, (string[])mensagemDto.Propriedades["tarefas"], "A mensagem recebida deveria possuir as mesmas tarefas que foram enviadas");
        }
        public void MultiAccessClientComunicarManagerSobreFimEdicaoTarefa()
        {
            const string ipServidor = "127.0.0.1";
            const int    porta      = 8086;
            TcpListener  servidor   = new TcpListener(IPAddress.Parse(ipServidor), porta);

            servidor.Start();

            WexMultiAccessClientMock cliente = new WexMultiAccessClientMock()
            {
                EnderecoIp = ipServidor, Porta = porta, Login = "******", OidCronograma = "C1"
            };

            cliente.AoServidorDesconectar += (mensagemDto) => { };
            cliente.Conectar();

            TcpClient conexaoTcpEmServidor = servidor.AcceptTcpClient();

            //efetuando a leitura da primeira mensagem do cliente mensagemd e autenticação
            TcpUtil.ReceberMensagemTcp(conexaoTcpEmServidor);
            ///Comunicando o fim da tarefa
            cliente.RnComunicarFimEdicaoTarefa("T2");
            string mensagemJson = TcpUtil.ReceberMensagemTcp(conexaoTcpEmServidor);

            mensagemJson = TcpUtil.RemoverStringProtecaoDeIntegridade(mensagemJson);
            MensagemDto mensagem = Mensagem.DeserializarMensagemDto(mensagemJson);

            Assert.AreEqual(cliente.OidCronograma, (string)mensagem.Propriedades[Constantes.OIDCRONOGRAMA], "Deveria ser o mesmo cronograma em que esta conectado o client");
            Assert.IsTrue(mensagem.Propriedades.ContainsKey(Constantes.AUTOR_ACAO), "Deveria conter o login do colaborador que esta editou a tarefa");
            Assert.AreEqual("T2", (string)mensagem.Propriedades[Constantes.OIDTAREFA], "Deveria ser a mesma tarefa comunicada na mensagem de fim de edição");
            cliente.RnDesconectar();
            servidor.Stop();
        }
        public void RemoverProtecaoIntegridadeMensagemTest()
        {
            string mensagem              = "uma mensagem \n de texto \n qualquer \n";
            string mensagemConvertida    = TcpUtil.AdicionarStringProtecaoDeIntegridade(mensagem);
            string mensagemDesconvertida = TcpUtil.RemoverStringProtecaoDeIntegridade(mensagemConvertida);

            Assert.AreEqual(mensagem, mensagemDesconvertida, "A mensagem de entrada deveria ser a mesma de saída");
        }
        public void AdicionarProtecaoIntegridadeMensagemTest()
        {
            const string mensagem           = "uma mensagem \n de texto \n qualquer \n";
            string       mensagemConvertida = TcpUtil.AdicionarStringProtecaoDeIntegridade(mensagem);

            Assert.AreEqual("uma mensagem *EnT3R* de texto *EnT3R* qualquer *EnT3R*\n", mensagemConvertida, "A mensagem de entrada deveria ter acrescentado as tags especiais que representam o /n");
            string mensagemDesconvertida = TcpUtil.RemoverStringProtecaoDeIntegridade(mensagemConvertida);

            Assert.AreEqual(mensagem, mensagemDesconvertida, "A mensagem de entrada deveria ser a mesma de saída");
        }
        public void RnComunicarFimExclusaoTarefaConcluidaTest()
        {
            DateUtil.CurrentDateTime = DateTime.Now;

            //inicializar o Dicionário tarefasGrid
            const string ipServidor = "127.0.0.1";
            const int    porta      = 8092;

            TcpListener servidor = new TcpListener(IPAddress.Parse(ipServidor), porta);

            servidor.Start();

            WexMultiAccessClientMock client = new WexMultiAccessClientMock();

            client.Porta         = porta;
            client.EnderecoIp    = ipServidor;
            client.Login         = "******";
            client.OidCronograma = "C1";
            client.Conectar();
            client.AoServidorDesconectar += (mensagemDto) => { };
            TcpClient conexaoClienteNoServidor = servidor.AcceptTcpClient();

            //efetuar a leitura da autenticacao do client
            TcpUtil.ReceberMensagemTcp(conexaoClienteNoServidor);
            //representar as tarefas no grid
            Dictionary <string, Int16> tarefasGrid = new Dictionary <string, short>();

            //preencher as tarefas no grid
            //representar as tarefas excluidas
            string[] tarefasExcluidas = new string[] { "T1", "T2" };

            Dictionary <string, Int16> tarefasImpactadas = new Dictionary <string, short>();

            tarefasImpactadas.Add("T3", 1);
            tarefasImpactadas.Add("T4", 2);
            client.RnComunicarFimExclusaoTarefaConcluida(tarefasExcluidas, tarefasImpactadas, new string[] { }, DateUtil.CurrentDateTime);
            string msgJson = TcpUtil.ReceberMensagemTcp(conexaoClienteNoServidor);

            msgJson = TcpUtil.RemoverStringProtecaoDeIntegridade(msgJson);
            MensagemDto mensagemRecebida = Mensagem.DeserializarMensagemDto(msgJson);

            Assert.AreEqual(CsTipoMensagem.ExclusaoTarefaFinalizada, mensagemRecebida.Tipo, string.Format("A mensagem deveria ser do tipo {0}", CsTipoMensagem.ExclusaoTarefaFinalizada));
            Assert.AreEqual("C1", (string)mensagemRecebida.Propriedades[Constantes.OIDCRONOGRAMA], "O cronograma da mensagem deveria ser C1");
            Assert.AreEqual("Joao", (string)mensagemRecebida.Propriedades[Constantes.AUTOR_ACAO], "O login do colaborador que comunicou a exclusão da mensagem deveria ser Joao");
            CollectionAssert.AreEquivalent(tarefasImpactadas, (Dictionary <string, Int16>)mensagemRecebida.Propriedades[Constantes.TAREFAS_IMPACTADAS], "Deveria possuir as " +
                                           "mesmas tarefas na ordem indicada da reordenação");

            CollectionAssert.AreEquivalent(new string[] { }, (string[])mensagemRecebida.Propriedades[Constantes.TAREFAS_NAO_EXCLUIDAS]);
        }
예제 #7
0
        /// <summary>
        /// Responsável por fazer a escuta em tempo real da threadComunicaoServidor
        /// </summary>
        protected virtual void RnProcessarEventos()
        {
            String        mensagemJson = "";
            MensagemDto   m;
            List <string> mensagens;
            string        msgAtual = "";

            try
            {
                while (autenticado)
                {
                    if (tcpAdapter == null || !tcpAdapter.ValidarConexao())
                    {
                        ProcessarMensagemEvento(Mensagem.RnCriarMensagemServidorDesconectando("Você acabou se ser desconectado, verifique sua rede ou contate o administrador"));
                        continue;
                    }
                    if (!autenticado)
                    {
                        continue;
                    }
                    if (!tcpAdapter.PossuiDadosParaLeitura())
                    {
                        Thread.Sleep(15);
                        continue;
                    }
                    mensagemJson = tcpAdapter.EfetuarLeitura();
                    if (mensagemJson.Trim() == "")
                    {
                        continue;
                    }

                    if (mensagemJson.Contains("\n"))
                    {
                        mensagens = mensagemJson.Split('\n').ToList();
                        foreach (string msg in mensagens)
                        {
                            if (String.IsNullOrEmpty(msg))
                            {
                                continue;
                            }

                            msgAtual = msg.Trim();
                            if (Buffer != "")
                            {
                                msgAtual = Buffer + msgAtual;
                                Buffer   = "";
                            }
                            m = Mensagem.DeserializarMensagemDto(TcpUtil.RemoverStringProtecaoDeIntegridade(msgAtual));
                            ProcessarMensagemEvento(m);
                            msgAtual = "";
                        }
                    }
                    else
                    {
                        Buffer += mensagemJson;
                    }

                    Thread.Sleep(10);
                }
            }
            catch (JsonException excessao)
            {
                Debug.WriteLine(string.Format("MultiAccessClient do {3} (Leitura) - Mensagem Json:{2}Excessão:{0}\nCallStack{1}", excessao.Message, excessao.StackTrace, msgAtual, Login), "JsonConvert:");
                //continue;
                throw excessao;
            }
            catch (InvalidOperationException e)
            {
                Debug.WriteLine(string.Format("Ocorreu a excessão:{0}\nLocal:{1}", e.Message, e.StackTrace), Thread.CurrentThread.Name);
                ProcessarMensagemEvento(Mensagem.RnCriarMensagemServidorDesconectando(String.Format("{0}\n {1}", e.Message, e.StackTrace)));
                RnDesconectar();
                throw e;
            }
            catch (Exception e)
            {
                DumperExtension.ShowStackTrace("Exception no client.");
                Debug.WriteLine(string.Format("Ocorreu a excessão:{0}\nLocal:{1}\n Target Site:{2}", e.Message, e.StackTrace, e.TargetSite), Thread.CurrentThread.Name);
                RnDesconectar();
                throw e;
            }
        }