/**
  * <summary>
  * Converte uma string em um pacote de inicialização entre cliente e servidor.
  * </summary>
  */
 private void TratarParametrosInicializacao(string Pmt)
 {
     try
     {
         Pacote_Inicializacao PACT = DeserializarPacote(Pmt);
     }
     catch (Exception e)
     {
         TratadorErros(e, this.GetType().Name);
     }
 }
Esempio n. 2
0
        /**
         * Data: 02/04/2019
         * Transforma uma string em pacote para acesso.
         * Return: string
         */
        private dynamic DeserializarPacote(string Pacote)
        {
            try
            {
                Base = JsonConvert.DeserializeObject <Pacote_Base>(Pacote);
                switch (Base.Pacote)
                {
                case TipoPacote.Auth:
                    Pacote_Auth Auth = JsonConvert.DeserializeObject <Pacote_Auth>(Base.Conteudo);
                    return(Auth);

                case TipoPacote.Comando:
                    Pacote_Comando Exec = JsonConvert.DeserializeObject <Pacote_Comando>(Base.Conteudo);
                    return(Exec);

                case TipoPacote.File:
                    Pacote_File File = JsonConvert.DeserializeObject <Pacote_File>(Base.Conteudo);
                    return(File);

                case TipoPacote.FileSystem:
                    Pacote_SystemFile FileSystem = JsonConvert.DeserializeObject <Pacote_SystemFile>(Base.Conteudo);
                    return(FileSystem);

                case TipoPacote.Echo:
                    Pacote_PingEcho Ping = JsonConvert.DeserializeObject <Pacote_PingEcho>(Base.Conteudo);
                    return(Ping);

                case TipoPacote.Replay:
                    Pacote_PingReplay Replay = JsonConvert.DeserializeObject <Pacote_PingReplay>(Base.Conteudo);
                    return(Replay);

                case TipoPacote.Inicializacao:
                    Pacote_Inicializacao Inicializacao = JsonConvert.DeserializeObject <Pacote_Inicializacao>(Base.Conteudo);
                    return(Inicializacao);


                default:
                    throw new Exception("Tentativa de envio de pacote não reconhecida pelo sistema.");
                }
            }
            catch (Exception e)
            {
                TratadorErros(e, this.GetType().Name);;
                return(false);
            }
        }
        /**
         * Data: 27/02/2019
         * Implementação de melhoras para o futuro. Mas a ideia geral é a de que o cliente que está conectando, seja avaliado
         * pelos parâmetros que foram enviados.
         * Return: string
         */
        private string TratarInicializacao(string Pct)
        {
            try
            {
                Pacote_Inicializacao Init = DeserializarPacote(Pct);

                Pacote_Inicializacao PACT = new Pacote_Inicializacao();
                PACT.EnderecoIP = IPEscutar.ToString();
                PACT.PORT       = PORT;

                return(SerializarPacote(PACT));
            }
            catch (Exception e)
            {
                TratadorErros(e, this.GetType().Name);;
                return(null);
            }
        }
        /**
         * <summary>
         * Converte uma string em uma classe de pacote.
         * </summary>
         */
        private dynamic DeserializarPacote(string Pacote)
        {
            Pacote_Base Base = JsonConvert.DeserializeObject <Pacote_Base>(Pacote);

            switch (Base.Pacote)
            {
            case TipoPacote.Auth:
                Pacote_Auth Auth = JsonConvert.DeserializeObject <Pacote_Auth>(Base.Conteudo);
                return(Auth);

            case TipoPacote.Comando:
                Pacote_Comando Exec = JsonConvert.DeserializeObject <Pacote_Comando>(Base.Conteudo);
                return(Exec);

            case TipoPacote.File:
                Pacote_File File = JsonConvert.DeserializeObject <Pacote_File>(Base.Conteudo);
                return(File);

            case TipoPacote.FileSystem:
                Pacote_SystemFile FileSystem = JsonConvert.DeserializeObject <Pacote_SystemFile>(Base.Conteudo);
                return(FileSystem);

            case TipoPacote.Echo:
                Pacote_PingEcho Ping = JsonConvert.DeserializeObject <Pacote_PingEcho>(Base.Conteudo);
                return(Ping);

            case TipoPacote.Replay:
                Pacote_PingReplay Replay = JsonConvert.DeserializeObject <Pacote_PingReplay>(Base.Conteudo);
                return(Replay);

            case TipoPacote.Inicializacao:
                Pacote_Inicializacao Inicializacao = JsonConvert.DeserializeObject <Pacote_Inicializacao>(Base.Conteudo);
                return(Inicializacao);
            }

            return(null);
        }
        /**
         * <summary>
         * Realiza o pedido de conexão a um servidor remoto. Após a conexão será enviado ao servidor um pedido de confirmação de recebimento de uma string, o
         * servidor deverá responder com uma string contendo os caracteres 200OK. Após essa confirmação o cliente envia um pacote contendo todas as informações
         * para realizar as trocas de informações.
         * <para>Assíncrono</para>
         * </summary>
         */
        public async Task <bool> Connectar_ServidorAsync()
        {
            string DadosLidos;

            try
            {
                /**
                 * Seta os parâmetros de inicialização
                 */
                //GetParamentrosIniciais();

                ClientToServer = new TcpClient();
                ClientToServer.Connect(IPServer);
                if (ClientToServer.Connected)
                {
                    BarramentoComunicacao = ClientToServer.GetStream();

                    BarramentoEscrita = new StreamWriter(BarramentoComunicacao);
                    BarramentoLeitura = new StreamReader(BarramentoComunicacao);

                    Pacote_PingEcho Echo = new Pacote_PingEcho();
                    Echo.ObterTempo();
                    BarramentoEscrita.WriteLine(SerializarPacote(Echo));
                    BarramentoEscrita.Flush();

                    DadosLidos = await BarramentoLeitura.ReadLineAsync();

                    Pacote_PingReplay Replay = DeserializarPacote(DadosLidos);
                    if (Replay.GetTipoPacote() != TipoPacote.Replay)
                    {
                        throw new Exception("Falha de comunicação inicial: Server");
                    }

                    Pacote_Inicializacao Boot = new Pacote_Inicializacao();
                    Boot.EnderecoIP = IPServer.Address.ToString();
                    Boot.PORT       = IPServer.Port;
                    BarramentoEscrita.WriteLine(SerializarPacote(Boot));
                    BarramentoEscrita.Flush();

                    DadosLidos = await BarramentoLeitura.ReadLineAsync();

                    /*Verifica se os parametros foram recebidos pelo servidor com sucesso.*/
                    TratarParametrosInicializacao(DadosLidos);

                    Authic.TEndPointClient = TEndPoint;
                    Authic.DominioCliente  = EDominio;

                    BarramentoEscrita.WriteLine(SerializarPacote(Authic));
                    BarramentoEscrita.Flush();

                    DadosLidos = await BarramentoLeitura.ReadLineAsync();

                    Authic = DeserializarPacote(DadosLidos);
                    if (Authic.Error)
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception e)
            {
                TratadorErros(e, this.GetType().Name);
                FecharConexao();
                return(false);
            }
        }