public async Task Iniciar() { if (!Rodando) { Rodando = true; _cancellationTokenSource = new CancellationTokenSource(); var client = new TcpClient(); while (!_cancellationToken.IsCancellationRequested) { await Task.Delay(TimeSpan.FromSeconds(1)); if (client.Connected) { Console.Clear(); NetworkStream ns = client.GetStream(); while (!_cancellationToken.IsCancellationRequested && client.Connected) { var opcao = -1; Mensagem mensagem; string jsonStr; byte[] msg; do { Console.Clear(); Console.WriteLine("P2PMessengerTeclado\n"); Console.WriteLine("Escolha uma das opções."); foreach (var tipoMensagem in Enum.GetValues(typeof(TipoMensagemEnum)) .Cast <TipoMensagemEnum>()) { Console.WriteLine($"{(int)tipoMensagem} - {tipoMensagem.GetDescription()}"); } var op = Console.ReadLine(); if (!int.TryParse(op, out opcao) || Enum.GetValues(typeof(TipoMensagemEnum)) .Cast <TipoMensagemEnum>() .All(e => e != (TipoMensagemEnum)opcao)) { Console.Clear(); Console.WriteLine("P2PMessengerTeclado\n"); Console.WriteLine("Opção inválida."); } } while (Enum.GetValues(typeof(TipoMensagemEnum)) .Cast <TipoMensagemEnum>() .All(e => e != (TipoMensagemEnum)opcao)); switch ((TipoMensagemEnum)opcao) { case TipoMensagemEnum.Mensagem: Console.Clear(); Console.WriteLine("P2PMessengerTeclado\n"); Console.WriteLine("Digite a mensagem."); var texto = Console.ReadLine(); mensagem = new Mensagem(texto); jsonStr = JsonConvert.SerializeObject(mensagem); msg = Encoding.Default.GetBytes(jsonStr); ns.Write(msg, 0, msg.Length); break; case TipoMensagemEnum.Arquivo: Console.Clear(); Console.WriteLine("P2PMessengerTeclado\n"); Console.WriteLine("Informe o caminho da imagem."); var caminho = Console.ReadLine(); var caminhoValido = false; try { Path.GetFullPath(caminho); caminhoValido = true; } catch (Exception e) { } if (caminhoValido && File.Exists(caminho) && (caminho.EndsWith(".jpg") || caminho.EndsWith(".png"))) { FileInfo fileInfo = new FileInfo(caminho); byte[] imagem = new byte[fileInfo.Length]; // Load a filestream and put its content into the byte[] using (FileStream fs = fileInfo.OpenRead()) { fs.Read(imagem, 0, imagem.Length); } var arquivo = new Arquivo(fileInfo.Name, imagem); mensagem = new Mensagem(arquivo); jsonStr = JsonConvert.SerializeObject(mensagem); msg = Encoding.Default.GetBytes(jsonStr); ns.Write(msg, 0, msg.Length); } else { Console.Clear(); if (!caminhoValido) { Console.WriteLine("Caminho inválido."); } else if (!File.Exists(caminho)) { Console.WriteLine("Arquivo inexistente."); } else { Console.WriteLine("O arquivo não é uma imagem válida, informe uma imagem JPG ou PNG."); } Console.WriteLine("Precione ENTER para continuar."); Console.ReadLine(); } break; } } } else { try { client.Connect(IpServidor, PortaServidor); } catch (Exception e) { Console.WriteLine(e.Message); } } } } }
public Mensagem(Arquivo arquivo) { TipoMensagem = TipoMensagemEnum.Arquivo; Arquivo = arquivo; }