示例#1
0
 public void mainServer_StatusChanged(object sender, StatusChangedEventArgs e)
 {
     try
     {
         // Chama o método que é encarregado de atualizar o form
         this.Invoke(new UpdateStatusCallback(this.UpdateStatus), new object[] { e.EventMessage });
     }
     catch (Exception ex)
     {
         //throw ex;
     }
 }
示例#2
0
        //Envia mensagens de um usário para todos os outros
        public static void EnviaMensagem(string origem, string mensagem)
        {
            StreamWriter swSenderSender;

            //Primeiro exibe a mensagem na aplicação
            e = new StatusChangedEventArgs(origem + " disse: " + mensagem);
            OnStatusChanged(e);

            //Cria um array de cliente TCPs do tamanho do número de clientes existentes
            TcpClient[] tcpClientes = new TcpClient[Servidor.htUsuarios.Count];
            //Copia os objetos TcpClient no array
            Servidor.htUsuarios.Values.CopyTo(tcpClientes, 0);
            //Percorre a lista de clientes TCP
            for (int i = 0; i < tcpClientes.Length; i++)
            {
                //Tenta enviar uma mensagem para cada cliente
                try
                {
                    //Se a mensagem estiver em branco ou a conexão for nula, sai
                    if (mensagem.Trim() == "" || tcpClientes[i] == null)
                    {
                        continue;
                    }
                    //Envia a mensagem para o usuário atual no laço
                    swSenderSender = new StreamWriter(tcpClientes[i].GetStream());
                    swSenderSender.WriteLine(origem + " disse: " + mensagem);
                    swSenderSender.Flush();
                    swSenderSender = null;
                }
                //Se houver um problema, o usuário não existe, então remove-o
                catch
                {
                    RemoveUsuario(tcpClientes[i]);
                }
            }
        }
示例#3
0
 public void mainServidor_StatusChanged(object sender, StatusChangedEventArgs e)
 {
     // Chama o método que atualiza o formulário
     this.Invoke(new AtualizaStatusCallback(this.AtualizaStatus), new object[] { e.EventMessage });
 }
示例#4
0
 public void mudancaStatus(object sender, StatusChangedEventArgs e)
 {
     this.Invoke(new AtualizaStatusCallback(this.AtualizaStatus), new object[] { e.EventMessage });
 }
示例#5
0
        // Envia mensagens de um usuário para todos os outros
        public static void EnviaMensagem(string Origem, string Mensagem)
        {
            StreamWriter swSenderSender;

            // Primeiro exibe a mensagem na aplicação
            e = new StatusChangedEventArgs(Origem + " disse : " + Mensagem);
            OnStatusChanged(e);

            // Cria um array de clientes TCPs do tamanho do numero de clientes existentes
            TcpClient[] tcpClientes = new TcpClient[ChatServidor.htUsuarios.Count];
            // Copia os objetos TcpClient no array
            ChatServidor.htUsuarios.Values.CopyTo(tcpClientes, 0);
            // Percorre a lista de clientes TCP
            for (int i = 0; i < tcpClientes.Length; i++)
            {
                // Tenta enviar uma mensagem para cada cliente
                try
                {
                    // Se a mensagem estiver em branco ou a conexão for nula sai...
                    if (Mensagem.Trim() == "" || tcpClientes[i] == null)
                    {
                        continue;
                    }
                    // Envia a mensagem para o usuário atual no laço
                    swSenderSender = new StreamWriter(tcpClientes[i].GetStream());
                    swSenderSender.WriteLine(Origem + " disse: " + Mensagem);
                    swSenderSender.Flush();
                    swSenderSender = null;
                }
                catch // Se houver um problema , o usuário não existe , então remove-o
                {
                    RemoveUsuario(tcpClientes[i]);
                }
            }
        }
示例#6
0
 // Este evento é chamado quando queremos disparar o evento StatusChanged
 public static void OnStatusChanged(StatusChangedEventArgs e)
 {
     StatusChangedEventHandler statusHandler = StatusChanged;
     if (statusHandler != null)
     {
         // invoca o  delegate
         statusHandler(null, e);
     }
 }
示例#7
0
 public void mainServidor_StatusChanged(object sender, StatusChangedEventArgs e)
 {
     this.Invoke(new AtualizaStatusCallback(this.AtualizaStatus), new object[] { e.EventMessage });
 }
示例#8
0
        // Quando o Usuario envia uma mensagem dizendo que deseja enviar um arquivo para o UsuarioDestino
        public static void EnviarArquivo(Pacote pacote)
        {
            StreamWriter swEnviar;

            // Exibe na aplicação quem quer enviar o arquivo e para quem
            e = new StatusChangedEventArgs(pacote.Usuario + " quer enviar o arquivo " + pacote.NomeArquivo + " arquivo para " + pacote.UsuarioDestino);
            OnStatusChanged(e);

            TcpClient clienteTCPOrigem = null;
            TcpClient clienteTCPDestino = null;
            try
            {
                // Busca o cliente pela própria chave da hash table, não precisa de laço for e tal...
                if ((clienteTCPDestino = (TcpClient)ChatServer.htUsuarios[pacote.UsuarioDestino]) != null)
                {
                    // Envia a mensagem para o usuário específico
                    swEnviar = new StreamWriter(clienteTCPDestino.GetStream());
                    Pacote pacoteEnviar = new Pacote();
                    pacoteEnviar.Comando = Comando.EnviarArquivo;
                    pacoteEnviar.Mensagem = pacote.Usuario + " deseja lhe enviar o arquivo " + pacote.NomeArquivo;
                    pacoteEnviar.Usuario = pacote.Usuario;
                    pacoteEnviar.UsuarioDestino = pacote.UsuarioDestino;
                    pacoteEnviar.NomeArquivo = pacote.NomeArquivo;
                    pacoteEnviar.TamanhoArquivo = pacote.TamanhoArquivo;
                    pacoteEnviar.ConteudoArquivo = pacote.ConteudoArquivo;
                    string objEnviar = JsonConvert.SerializeObject(pacoteEnviar);
                    swEnviar.WriteLine(objEnviar);
                    swEnviar.Flush();
                    swEnviar = null;
                }
                // Busca o cliente pela própria chave da hash table, não precisa de laço for e tal...
                if ((clienteTCPOrigem = (TcpClient)ChatServer.htUsuarios[pacote.Usuario]) != null)
                {
                    // Envia a mensagem para o usuário específico
                    swEnviar = new StreamWriter(clienteTCPOrigem.GetStream());
                    Pacote pacoteEnviar = new Pacote();
                    pacoteEnviar.Comando = Comando.MensagemPrivada;
                    pacoteEnviar.Mensagem = "Você deseja enviar o arquivo " + pacote.NomeArquivo + " para " + pacote.UsuarioDestino;
                    pacoteEnviar.Usuario = pacote.Usuario;
                    pacoteEnviar.UsuarioDestino = pacote.UsuarioDestino;
                    pacoteEnviar.NomeArquivo = pacote.NomeArquivo;
                    pacoteEnviar.TamanhoArquivo = pacote.TamanhoArquivo;
                    pacoteEnviar.ConteudoArquivo = pacote.ConteudoArquivo;
                    string objEnviar = JsonConvert.SerializeObject(pacoteEnviar);
                    swEnviar.WriteLine(objEnviar);
                    swEnviar.Flush();
                    swEnviar = null;
                }
            }
            catch // Se tiver algum problema provavelmente o usuário não está mais conectado, vou remover ele da lista
            {
                RemoveUsuario(clienteTCPDestino);
            }
        }
示例#9
0
        // Envia mensagens administrativas
        public static void EnviaMensagemDeAdministrador(string mensagem)
        {
            // Primeiro de tudo, exibe na aplicação quem diz o que
            e = new StatusChangedEventArgs(ChatServer.NomeAdministrador + ": " + mensagem);
            OnStatusChanged(e);

            // Cria um array de clientes TCP, o tamanho é o número de usuários que nós temos nas tabelas hash
            TcpClient[] tcpClientes = new TcpClient[ChatServer.htUsuarios.Count];

            // Copia os objetos TcpClient para um array
            ChatServer.htUsuarios.Values.CopyTo(tcpClientes, 0);

            // Stream que irá enviar a mensagem para cada usuário
            StreamWriter swEnviador;

            // Laço sobre a lista de clientes TCP
            for (int i = 0; i < tcpClientes.Length; i++)
            {
                // Tentando enviar a mensagem para cada
                try
                {
                    // Se a mensagem está vazia ou a conexão é null, cai fora
                    if (mensagem.Trim() == "" || tcpClientes[i] == null)
                    {
                        continue;
                    }

                    // Envia a mensagem para o atual usuário do loop
                    swEnviador = new StreamWriter(tcpClientes[i].GetStream());

                    // Criando o pacote para enviar
                    Pacote pacoteEnviar = new Pacote();
                    pacoteEnviar.Comando = Comando.MensagemAdministrador;
                    pacoteEnviar.Usuario = ChatServer.NomeAdministrador;
                    pacoteEnviar.Mensagem = ChatServer.NomeAdministrador + ": " + mensagem;

                    // Serializa o pacote
                    string objEnviar = JsonConvert.SerializeObject(pacoteEnviar);

                    swEnviador.WriteLine(objEnviar);
                    swEnviador.Flush();
                    swEnviador = null;
                }
                catch // Se ocorreu algum problema o usuário não está mais conectado. Vou remover ele
                {
                    RemoveUsuario(tcpClientes[i]);
                }
            }
        }
示例#10
0
        // Envia mensagens de um usuário para todos os outros
        public static void EnviaMensagem(Pacote pacote)
        {
            StreamWriter swSenderSender;

            // First of all, show in our application who says what
            e = new StatusChangedEventArgs(pacote.Usuario + " disse: " + pacote.Mensagem);
            OnStatusChanged(e);

            // Create an array of TCP clients, the size of the number of users we have
            TcpClient[] tcpClients = new TcpClient[ChatServer.htUsuarios.Count];
            // Copy the TcpClient objects into the array
            ChatServer.htUsuarios.Values.CopyTo(tcpClients, 0);
            // Loop through the list of TCP clients
            for (int i = 0; i < tcpClients.Length; i++)
            {
                // Try sending a message to each
                try
                {
                    // If the message is blank or the connection is null, break out
                    if (pacote.Mensagem.Trim() == "" || tcpClients[i] == null)
                    {
                        continue;
                    }
                    // Send the message to the current user in the loop
                    swSenderSender = new StreamWriter(tcpClients[i].GetStream());

                    Pacote pacoteEnviar = new Pacote();
                    pacoteEnviar.Comando = Comando.Mensagem;
                    pacoteEnviar.Mensagem = pacote.Usuario + " disse: " + pacote.Mensagem;
                    string objEnviar = JsonConvert.SerializeObject(pacoteEnviar);

                    swSenderSender.WriteLine(objEnviar);
                    swSenderSender.Flush();
                    swSenderSender = null;
                }
                catch // If there was a problem, the user is not there anymore, remove him
                {
                    RemoveUsuario(tcpClients[i]);
                }
            }
        }
示例#11
0
 // Envia mensagens administratias
 public static void EnviaMensagemAdmin(string Mensagem)
 {
     // Exibe primeiro na aplicação
     e = new StatusChangedEventArgs("Administrador: " + Mensagem);
     OnStatusChanged(e);
 }
示例#12
0
 public void mainServidor_StatusChanged(object sender, StatusChangedEventArgs e)
 {
     // Chama o método que atualiza o formulário
     this.Invoke(new AtualizaStatusCallback(this.AtualizaStatus), new object[] { e.EventMessage });
 }