Пример #1
0
        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();
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        public frmMensagens(Cliente cliente)
        {
            InitializeComponent();

            this.cliente = cliente;
            this.cliente.RecebeuMensagem += cliente_ClienteRecebeuMensagem;
            this.cliente.Iniciar();
        }
Пример #4
0
 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);
     }
 }
Пример #5
0
 private void FinalizarCliente(Cliente cliente)
 {
     cliente.Encerrar();
     cliente.RecebeuMensagem -= cliente_RecebeuMensagem;
     cliente.DisparouException -= cliente_DisparouException;
     cliente.Desconectou -= cliente_Desconectou;
 }
Пример #6
0
 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);
     }
 }
Пример #7
0
 private void cliente_DisparouException(Cliente sender, Exception ex)
 {
     // TODO: Log?
 }
Пример #8
0
        private void cliente_Desconectou(Cliente cliente)
        {
            FinalizarCliente(cliente);

            lock (this)
            {
                clientes.Remove(cliente.Apelido);
                NotificarMudancaListaClientes();
            }

            EnviarMensagem(new AvisoServidor()
            {
                Aviso = $"{cliente.Apelido} saiu da sala."
            });
        }