public static void OnStatusChanged(StatusChangedEventArgs e) { StatusChangedEventHandler statusHandler = StatusChanged; if (statusHandler != null)//HANDLER => manipulador { // chamar o delegado statusHandler(null, e); } }
//Método para enviar uma mensagem a todos os utilizadores public static void SendMessage(string From, string Message) { StreamWriter swSenderSender;//Declaração de uma stream Writer para mandar o contexto da mensagem a todos os utilizadores e = new StatusChangedEventArgs(From + " diz: " + Message);//Mensagem do utilizador OnStatusChanged(e); TcpClient[] tcpClients = new TcpClient[ChatServer.htUsers.Count];//Cria um array para contar o numero de utilizadores disponiveis //Conta os utilizadores que se encontram na tabela hash ChatServer.htUsers.Values.CopyTo(tcpClients, 0);//Copia os valors TcpClient na matriz for (int i = 0; i < tcpClients.Length; i++) { try//Tenta enviar uma mensagem para cada utilizador { if (Message.Trim() == "" || tcpClients[i] == null)//Se a mensagem for em branco nao manda nada { continue; } // Enviar mensagem para cada utilizador ligado ao servidor swSenderSender = new StreamWriter(tcpClients[i].GetStream());//Declaração da Stream Writer passando por parâmetros a ligação de cada utilizador swSenderSender.WriteLine(From + " diz: " + Message);//contexto da mensagem swSenderSender.Flush();//Limpa os restos que podem ter ficado durante o envio swSenderSender = null;//Stream Writer passa para valor nulo } catch//Se houver algum problema então é porque o utilizador já não se encontra presente! REMOVE-LO { RemoveUser(tcpClients[i]);//Remove o utilizador da tabela hash } } }
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 }); }