public void UpdateGuiWithNewMessage(string message) { //switch thread to GUI thread to write to GUI // Prof: sorgt dafür, dass der Thread in der GUI ausgeführt wird //damit es gleichzeitig abläuft //(Dispatcher extra erstellen => Render (Hintergrund) und GUI Threads => aktualisieren GUI) App.Current.Dispatcher.Invoke(() => { string name = message.Split(':')[0]; if (!ConnectedClients.Contains(name)) {//not in list => add it ConnectedClients.Add(name); } if (message.Contains("@quit")) { server.DisconnectOneClient(name); // Extra: ConnectedClients.Remove(name); // Client auch aus connectedClients Liste löschen } //neue Nachricht zu Nachrichten-Collection hinzufügen Messages.Add(message); // GUI informieren, dass Nachrichtenanzahl gestiegen ist RaisePropertyChanged("MessagesCnt"); }); }
private void OnClientDisconnected(SocketClientDisconnectedArgs args) { Console.WriteLine($"Client Disconnected, clientRemoteEndPoint : {args.DisconnectedSocketRemoteEndPoint}"); lock (ConnectedClients) { if (ConnectedClients.Contains(args.DisconnectedClient)) { ConnectedClients.Remove(args.DisconnectedClient); } } ClientDisconnected?.Invoke(args); }
/// <summary> /// try to add a new client's mac address. /// </summary> /// <param name="clientAddress">The new client's address.</param> /// <returns><c>true</c> if the client was added successfully, <c>false</c> if it was already registered.</returns> public bool TryAddClient(string clientAddress) { if (ConnectedClients.Contains(clientAddress)) { return(false); } lock (ConnectedClients) { ConnectedClients.Add(clientAddress); } // Initialize the pending messages for this client if (!PendingMessages.ContainsKey(clientAddress)) { lock (PendingMessages) { PendingMessages.Add(clientAddress, new Stack <ChatMessage>()); } } return(true); }