private void AceitarNovoCliente(TcpClient tcpClient) { var cliente = new Cliente(tcpClient); var entrar = (Entrar)cliente.Receber(); if (clientes.ContainsKey(entrar.Apelido)) { cliente.Enviar(new Erro() { Mensagem = "Apelido já está em uso." }); cliente.Encerrar(); return; } cliente.Apelido = entrar.Apelido; cliente.RecebeuMensagem += cliente_RecebeuMensagem; cliente.DisparouException += cliente_DisparouException; cliente.Desconectou += cliente_Desconectou; lock (this) { clientes.Add(cliente.Apelido, cliente); cliente.Enviar(new Ok()); NotificarMudancaListaClientes(); } EnviarMensagem(new AvisoServidor() { Aviso = $"{cliente.Apelido} entrou na sala." }); cliente.Iniciar(); }
private void btnEntrar_Click(object sender, EventArgs e) { int porta; if (string.IsNullOrWhiteSpace(txtHost.Text)) { MessageBox.Show("Preencha o host corretamente.", "Trova", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtHost.Focus(); return; } if (!int.TryParse(txtPorta.Text, out porta)) { MessageBox.Show("Preencha a porta corretamente.", "Trova", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtPorta.Focus(); return; } if (string.IsNullOrWhiteSpace(txtApelido.Text)) { MessageBox.Show("Preencha o apelido corretamente.", "Trova", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtApelido.Focus(); return; } TcpClient tcpClient; try { tcpClient = new TcpClient(txtHost.Text, porta); } catch (Exception) { MessageBox.Show("Falha ao conectar com o servidor.", "Trova", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var cliente = new Cliente(tcpClient); cliente.Apelido = txtApelido.Text; cliente.Enviar(new Entrar() { Apelido = cliente.Apelido }); var resp = cliente.Receber(); if (resp as Ok != null) { var frm = new frmMensagens(cliente); frm.Show(); abriuMensagens = true; Close(); } else if (resp as Erro != null) { var erro = (Erro)resp; MessageBox.Show(erro.Mensagem, "Trova", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public frmMensagens(Cliente cliente) { InitializeComponent(); this.cliente = cliente; this.cliente.RecebeuMensagem += cliente_ClienteRecebeuMensagem; this.cliente.Iniciar(); }
private void cliente_ClienteRecebeuMensagem(Cliente sender, object mensagem) { if (mensagem as Mensagem != null) { TratarMensagem((Mensagem)mensagem); } else if (mensagem as AvisoServidor != null) { TratarAvisoServidor((AvisoServidor)mensagem); } else if (mensagem as ListaClientesConectados != null) { TratarListaConectados((ListaClientesConectados)mensagem); } }
private void FinalizarCliente(Cliente cliente) { cliente.Encerrar(); cliente.RecebeuMensagem -= cliente_RecebeuMensagem; cliente.DisparouException -= cliente_DisparouException; cliente.Desconectou -= cliente_Desconectou; }
private void cliente_RecebeuMensagem(Cliente sender, object mensagem) { if (mensagem as EnviarMensagemPrivada != null) { TratarMensagemPrivada((EnviarMensagemPrivada)mensagem); } else if (mensagem as EnviarMensagemPublica != null) { TratarMensagemPublica((EnviarMensagemPublica)mensagem); } else if (mensagem as Desconectar != null) { cliente_Desconectou(sender); } }
private void cliente_DisparouException(Cliente sender, Exception ex) { // TODO: Log? }
private void cliente_Desconectou(Cliente cliente) { FinalizarCliente(cliente); lock (this) { clientes.Remove(cliente.Apelido); NotificarMudancaListaClientes(); } EnviarMensagem(new AvisoServidor() { Aviso = $"{cliente.Apelido} saiu da sala." }); }