示例#1
0
 public void Enviar(string mensagem)
 {
     if (ligado)
     {
         try
         {
             foreach (Cliente cliente in servidorForm.clientes)
             {
                 cliente.Enviar("m", "Servidor: " + mensagem.Trim());
             }
             servidorForm.AddMensagem("Você: " + mensagem.Trim());
         }
         catch (Exception e)
         {
             throw e;
         }
     }
 }
示例#2
0
            public void Run()
            {
                try
                {
                    NetworkStream ns        = client.GetStream();
                    byte[]        buffer    = new byte[client.ReceiveBufferSize];
                    int           bytesRead = ns.Read(buffer, 0, client.ReceiveBufferSize);
                    nome = Encoding.UTF8.GetString(buffer, 0, bytesRead);
                    if (string.IsNullOrEmpty(nome))
                    {
                        Enviar("m", "Você precisa fornecer um nome.");
                        servidorForm.clientes.Remove(this);
                        Fechar();
                        return;
                    }
                    if (nome.Length < 3 || nome.Length > 20 || nome.Contains(" "))
                    {
                        Enviar("m", "O nome deve ter de 3 à 20 caracteres e não pode ter espaços.");
                        servidorForm.clientes.Remove(this);
                        Fechar();
                        return;
                    }
                    if (nome.ToLower().Equals("servidor"))
                    {
                        Enviar("m", "O nome 'Servidor' é reservado.");
                        servidorForm.clientes.Remove(this);
                        Fechar();
                        return;
                    }
                    foreach (Cliente cliente in servidorForm.clientes)
                    {
                        if (!this.Equals(cliente) && nome.ToLower().Equals(cliente.GetNome().ToLower()))
                        {
                            Enviar("m", "O nome '" + nome + "' já está em uso.");
                            servidorForm.clientes.Remove(this);
                            Fechar();
                            return;
                        }
                    }
                    servidorForm.AddMensagem(nome + " entrou no chat. (" + ip + ")");
                    Enviar("p", nome + " " + servidorForm.GetParticipantes());
                    servidorForm.AddParticipante(ip, nome);
                    foreach (Cliente cliente in servidorForm.clientes)
                    {
                        if (!this.Equals(cliente))
                        {
                            cliente.Enviar("e", nome + " entrou no chat.");
                        }
                    }
                }
                catch (Exception)
                {
                    servidorForm.clientes.Remove(this);
                    Fechar();
                }
                int mensagensVazias = 0;

                while (conectado)
                {
                    try
                    {
                        NetworkStream ns        = client.GetStream();
                        byte[]        buffer    = new byte[client.ReceiveBufferSize];
                        int           bytesRead = ns.Read(buffer, 0, client.ReceiveBufferSize);
                        string        mensagem  = Encoding.UTF8.GetString(buffer, 0, bytesRead);
                        if (!string.IsNullOrEmpty(mensagem))
                        {
                            mensagensVazias = 0;
                            servidorForm.AddMensagem(nome + ": " + mensagem);
                            foreach (Cliente cliente in servidorForm.clientes)
                            {
                                if (!this.Equals(cliente))
                                {
                                    cliente.Enviar("m", nome + ": " + mensagem);
                                }
                            }
                        }
                        else if (mensagensVazias == 3)
                        {
                            throw new SocketException();
                        }
                        else
                        {
                            mensagensVazias++;
                        }
                    }
                    catch (Exception)
                    {
                        if (conectado)
                        {
                            servidorForm.AddMensagem(nome + " saiu do chat. (" + ip + ")");
                            servidorForm.clientes.Remove(this);
                            servidorForm.RemoverParticipante(ip, nome);
                            try
                            {
                                foreach (Cliente cliente in servidorForm.clientes)
                                {
                                    cliente.Enviar("s", nome + " saiu do chat.");
                                }
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e);
                            }
                            finally
                            {
                                Fechar();
                            }
                        }
                    }
                }
            }