public void ReceberMensagemFimEdicaoTarefaTest()
        {
            //Configurações do Servidor
            IPAddress ipServidor    = IPAddress.Parse("127.0.0.1");
            const int portaServidor = 8007;

            //Instanciar e iniciar o Servidor (Listener)
            TcpListener servidor = new TcpListener(ipServidor, portaServidor);

            servidor.Start();
            Queue <MensagemDto> filaProcessamento = new Queue <MensagemDto>();

            //Instanciar os Clientes (2x TcpClient)
            TcpClient    cliente1      = new TcpClient();
            TcpClient    cliente2      = new TcpClient();
            const string login1        = "Joao";
            const string login2        = "Pedro";
            const string oidCronograma = "C1";

            //Tentativa de conexao do cliente1
            cliente1.Connect(ipServidor, portaServidor);
            // Servidor aceitar a conexao do cliente1 e armazenar
            TcpClient cliente1EmServidor = servidor.AcceptTcpClient();

            //Tentativa de conexao do cliente2
            cliente2.Connect(ipServidor, portaServidor);
            // Servidor aceitar a conexao do cliente1 e armazenar
            TcpClient cliente2EmServidor = servidor.AcceptTcpClient();

            //Iniciar ConexaoCliente do cliente1
            ConexaoClienteMock c1 = new ConexaoClienteMock(login1, cliente1EmServidor, filaProcessamento)
            {
                PermissaoDeEscrita = false
            };

            //Iniciar ConexaoCliente do cliente2
            ConexaoClienteMock c2 = new ConexaoClienteMock(login2, cliente2EmServidor, filaProcessamento)
            {
                PermissaoDeEscrita = false
            };

            //Criar mensagemDto novoUsuarioConectado para o cliente1
            MensagemDto m1     = Mensagem.RnCriarMensagemNovoUsuarioConectado(new string[] { login1 }, oidCronograma);
            string      m1Json = JsonConvert.SerializeObject(m1);

            m1Json = TcpUtil.AdicionarStringProtecaoDeIntegridade(m1Json);

            //Criar mensagemDto novoUsuarioConectado para o cliente2
            MensagemDto m2     = Mensagem.RnCriarMensagemNovoUsuarioConectado(new string[] { login2 }, oidCronograma);
            string      m2Json = JsonConvert.SerializeObject(m2);

            m2Json = TcpUtil.AdicionarStringProtecaoDeIntegridade(m2Json);

            //Enviar a mensagem Json do primeiro cliente atráves do tcp cliente1;
            TcpUtil.EnviarMensagemTcp(m1Json, cliente1);



            ControleDeEsperaUtil.AguardarAte(() => { return(filaProcessamento.Count > 0); });

            //Enviar a  mensagem Json do segundo cliente atráves do tcp cliente2;
            TcpUtil.EnviarMensagemTcp(m2Json, cliente2);
            ControleDeEsperaUtil.AguardarAte(() => { return(filaProcessamento.Count > 1); });

            Assert.AreEqual(2, filaProcessamento.Count, "Deveria ser enfileirada 2 objetos MensagemDto");

            MensagemDto m3     = Mensagem.RnCriarMensagemFinalizarEdicaoTarefa("T1", "gabriel", "C1");
            string      m3Json = JsonConvert.SerializeObject(m3);

            m3Json = TcpUtil.AdicionarStringProtecaoDeIntegridade(m3Json);

            TcpUtil.EnviarMensagemTcp(m3Json, cliente2);
            ControleDeEsperaUtil.AguardarAte(() => { return(filaProcessamento.Count > 2); });

            c1.Desconectar();
            c2.Desconectar();
            servidor.Stop();
            cliente1.Close();
            cliente2.Close();
            cliente1EmServidor.Close();
            cliente2EmServidor.Close();
        }
        public void ReceberMensagemQuandoJsonEstiverCompleto()
        {
            #region Estimativa de Teste:

            /*
             * Estimativa Teste:
             * Receber uma mensagemDto Json e enfileirar na fila de leitura;
             * Cenário:
             *  - Instanciar um Listener (gerenciar as conexoes)
             *  - Instanciar 2 TcpClients (Efetuar a comunicação de conexão)
             *  - Montar as MensagemDTOs de NovoUsarioConectado
             *  - Serializar as Mensagens
             *  - Escrever cada mensagem no stream de seu respectivo tcp
             *  - Ler a Mensagem no stream
             *  - Processar Cada Mensagem e enfileirar na fila de leitura
             * Resultado Estimado:
             *  - Deve ter sido possivel o enfileiramento das 2 mensagens dto recebidas
             */
            #endregion

            //Configurações do Servidor
            IPAddress ipServidor    = IPAddress.Parse("127.0.0.1");
            const int portaServidor = 8000;

            //Instanciar e iniciar o Servidor (Listener)
            TcpListener servidor = new TcpListener(ipServidor, portaServidor);
            servidor.Start();
            Queue <MensagemDto> filaProcessamento = new Queue <MensagemDto>();

            //Instanciar os Clientes (2x TcpClient)
            TcpClient    cliente1      = new TcpClient();
            TcpClient    cliente2      = new TcpClient();
            const string login1        = "Joao";
            const string login2        = "Pedro";
            const string oidCronograma = "C1";

            //Tentativa de conexao do cliente1
            cliente1.Connect(ipServidor, portaServidor);
            // Servidor aceitar a conexao do cliente1 e armazenar
            TcpClient cliente1EmServidor = servidor.AcceptTcpClient();

            //Tentativa de conexao do cliente2
            cliente2.Connect(ipServidor, portaServidor);
            // Servidor aceitar a conexao do cliente1 e armazenar
            TcpClient cliente2EmServidor = servidor.AcceptTcpClient();

            //Iniciar ConexaoCliente do cliente1
            ConexaoClienteMock c1 = new ConexaoClienteMock(login1, cliente1EmServidor, filaProcessamento)
            {
                PermissaoDeEscrita = false
            };

            //Iniciar ConexaoCliente do cliente2
            ConexaoClienteMock c2 = new ConexaoClienteMock(login2, cliente2EmServidor, filaProcessamento)
            {
                PermissaoDeEscrita = false
            };

            //Criar mensagemDto novoUsuarioConectado para o cliente1
            MensagemDto m1     = Mensagem.RnCriarMensagemNovoUsuarioConectado(new string[] { login1 }, oidCronograma);
            string      m1Json = JsonConvert.SerializeObject(m1);
            m1Json = TcpUtil.AdicionarStringProtecaoDeIntegridade(m1Json);

            //Criar mensagemDto novoUsuarioConectado para o cliente2
            MensagemDto m2     = Mensagem.RnCriarMensagemNovoUsuarioConectado(new string[] { login2 }, oidCronograma);
            string      m2Json = JsonConvert.SerializeObject(m2);
            m2Json = TcpUtil.AdicionarStringProtecaoDeIntegridade(m2Json);

            //Enviar a mensagem Json do primeiro cliente atráves do tcp cliente1;
            TcpUtil.EnviarMensagemTcp(m1Json, cliente1);

            ControleDeEsperaUtil.AguardarAte(() => { return(filaProcessamento.Count > 0); });

            //Enviar a  mensagem Json do segundo cliente atráves do tcp cliente2;
            TcpUtil.EnviarMensagemTcp(m2Json, cliente2);
            ControleDeEsperaUtil.AguardarAte(() => { return(filaProcessamento.Count > 1); });

            Assert.AreEqual(2, filaProcessamento.Count, "Deveria ser enfileirada 2 objetos MensagemDto");

            #region Testes:
            //Verificar see enfileirou as mensagens recebidas
            //   Assert.AreEqual(2, filaProcessamento.Count, "Deveria possuir 2 mensagens enfileiradas");
            //Checar se não há nenhuma mensagem incompleta no buffer de mensagens das conexões
            //    Assert.IsTrue(string.IsNullOrEmpty(conexaoCliente.Buffer), "Buffer deveria estar vazio pois as mensagens json eram mensagens válidas");
            //   Assert.IsTrue(string.IsNullOrEmpty(conexaoCliente2.Buffer), "Buffer deveria estar vazio pois as mensagens json eram mensagens válidas");
            #endregion
            #region Finalização Cenário
            c1.Desconectar();
            c2.Desconectar();
            servidor.Stop();
            cliente1.Close();
            cliente2.Close();
            cliente1EmServidor.Close();
            cliente2EmServidor.Close();
            #endregion
        }