/** * <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); } }
/** * 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); } }