void OnUPnPRootDeviceRemoved(RootDescriptor rootDescriptor)
        {
            ClientDescriptor clientDescriptor;

            lock (_networkTracker.SharedControlPointData.SyncObj)
            {
                clientDescriptor = ClientDescriptor.GetMPFrontendServerDescriptor(rootDescriptor);
                if (clientDescriptor == null || !_availableClients.Contains(clientDescriptor))
                {
                    return;
                }
                ServiceRegistration.Get <ILogger>().Debug("UPnPServerControlPoint: MP 2 client '{0}' (system ID '{1}') at host '{2}' was removed from the network",
                                                          clientDescriptor.ClientName, clientDescriptor.MPFrontendServerUUID, clientDescriptor.System.HostName);
                _availableClients.Remove(clientDescriptor);
            }
            InvokeClientUnavailable(clientDescriptor);
            // The client connection has its own event handler for disconnects - it will trigger method OnClientDisconnected
            // as result of disconnection, this will remove the client connection from the _clientConnections collection
        }
        void OnUPnPRootDeviceAdded(RootDescriptor rootDescriptor)
        {
            ClientDescriptor clientDescriptor;

            lock (_networkTracker.SharedControlPointData.SyncObj)
            {
                clientDescriptor = ClientDescriptor.GetMPFrontendServerDescriptor(rootDescriptor);
                if (clientDescriptor == null || _availableClients.Contains(clientDescriptor))
                {
                    return;
                }
                ServiceRegistration.Get <ILogger>().Debug("UPnPServerControlPoint: Found MP 2 client '{0}' (system ID '{1}') at host '{2}' ({3})",
                                                          clientDescriptor.ClientName, clientDescriptor.MPFrontendServerUUID, clientDescriptor.System.HostName,
                                                          _attachedClientSystemIds.Contains(clientDescriptor.MPFrontendServerUUID) ? "attached" : "not attached");
                _availableClients.Add(clientDescriptor);
            }
            InvokeClientAvailable(clientDescriptor);
            CheckConnect(clientDescriptor);
        }