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); }