public void UpdateMembers()
        {
            ClientCount   = _server.ClientCount;
            OverallRx     = _server.OverallRx;
            OverallTx     = _server.OverallTx;
            Bandwidth     = _server.PeakBandwidth;
            UsedBandwidth = _server.UsedBandwidth;
            PeakTx        = _server.PeakTx;
            PeakRx        = _server.PeakRx;

            IsStarted = _server.Started;

            AutoDiscoveryEnabled = Netst.Settings.Persistent.TrackServers;

            lock (DiscoveredClients)
            {
                for (int i = DiscoveredClients.Count - 1; i >= 0; i--)
                {
                    if ((DateTime.Now - DiscoveredClients[i].DiscoveredAt).TotalSeconds > 30)
                    {
                        DiscoveredClients.RemoveAt(i);
                    }
                }
            }


            if (_clientUpdateSw.ElapsedMilliseconds > 1000)
            {
                XxBufferCount = _server.XxBufferCount;
                TxHistory     = _server.TxHistory;
                RxHistory     = _server.RxHistory;

                Client[] cs = _server.Clients;
                Clients.Clear();

                foreach (Client c in cs)
                {
                    Clients.Add(c);
                }

                TxHistorySerie.Values.Clear();
                RxHistorySerie.Values.Clear();

                int pointsInChart = 120; // 60 seconds

                for (int i = Math.Min(XxBufferCount, pointsInChart) - 1; i >= 0; i--)
                {
                    TxHistorySerie.Values.Add(TxHistory[i] / 1000 / 1000);
                }

                for (int i = Math.Min(XxBufferCount, pointsInChart) - 1; i >= 0; i--)
                {
                    RxHistorySerie.Values.Add(RxHistory[i] / 1000 / 1000);
                }

                _clientUpdateSw.Restart();
            }
        }
        private void RemoteClientDiscovered(Tracker tracker, IPEndPoint endpoint, NodeInfo info)
        {
            if (!CheckAccess())
            {
                Dispatcher.InvokeAsync(() => { RemoteClientDiscovered(tracker, endpoint, info); });
                return;
            }

            lock (DiscoveredClients)
            {
                foreach (NodeInfo i in DiscoveredClients)
                {
                    if (string.Equals(i.AddressStr, info.AddressStr) && i.Port == info.Port)
                    {
                        DiscoveredClients.Remove(i);
                        break;
                    }
                }

                DiscoveredClients.Add(info);
            }
        }