예제 #1
0
        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);
        }