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; } }
//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]); } } }
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 }); }
public void mudancaStatus(object sender, StatusChangedEventArgs e) { this.Invoke(new AtualizaStatusCallback(this.AtualizaStatus), new object[] { e.EventMessage }); }
// 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]); } } }
// 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); } }
public void mainServidor_StatusChanged(object sender, StatusChangedEventArgs e) { this.Invoke(new AtualizaStatusCallback(this.AtualizaStatus), new object[] { e.EventMessage }); }
// 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); } }
// 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]); } } }
// 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]); } } }
// Envia mensagens administratias public static void EnviaMensagemAdmin(string Mensagem) { // Exibe primeiro na aplicação e = new StatusChangedEventArgs("Administrador: " + Mensagem); OnStatusChanged(e); }