public override Task HandleClientConnected(object sender, ClientConnectedEventArgs eventArgs) { NibriClient client = new NibriClient(this, eventArgs.ConnectingClient); client.Disconnected += (NibriClient disconnectedClient) => { NibriClients.Remove(disconnectedClient); Log.WriteLine("[NibriClient/#{0}] Client disconnected and removed from active clients list.", disconnectedClient.Id); }; NibriClients.Add(client); return(Task.CompletedTask); }
/// <summary> /// Sends a message to all the connected clients, except the one who's sending it. /// </summary> /// <param name="sendingClient">The client sending the message.</param> /// <param name="message">The message that is to bee sent.</param> public async Task Broadcast(NibriClient sendingClient, Message message) { List <Task> senders = new List <Task>(); foreach (NibriClient client in NibriClients) { // Don't send the message to the sender if (client == sendingClient) { continue; } senders.Add(client.Send(message)); } await Task.WhenAll(senders); }