protected void CheckConnect(ClientDescriptor clientDescriptor) { // Check if client is attached and connect if it is an attached client string clientSystemId = clientDescriptor.MPFrontendServerUUID; lock (_networkTracker.SharedControlPointData.SyncObj) { if (!_attachedClientSystemIds.Contains(clientSystemId)) return; if (_clientConnections.ContainsKey(clientSystemId)) return; } DeviceConnection connection; try { connection = _controlPoint.Connect(clientDescriptor.ClientDeviceDescriptor.RootDescriptor, clientSystemId, UPnPExtendedDataTypes.ResolveDataType); } catch (Exception e) { ServiceRegistration.Get<ILogger>().Warn( "UPnPServerControlPoint: Error connecting to UPnP MP2 frontend server '{0}'", e, clientSystemId); return; } try { ClientConnection clientConnection = new ClientConnection(_controlPoint, connection, clientDescriptor); lock (_networkTracker.SharedControlPointData.SyncObj) _clientConnections.Add(clientDescriptor.MPFrontendServerUUID, clientConnection); clientConnection.ClientDeviceDisconnected += OnClientDisconnected; } catch (Exception e) { ServiceRegistration.Get<ILogger>().Warn( "UPnPServerControlPoint: Error connecting to services of UPnP MP2 frontend server '{0}'", e, clientSystemId); _controlPoint.Disconnect(connection); return; } InvokeClientConnected(clientDescriptor); }
protected void InvokeClientDeviceDisconnected(ClientConnection connection) { ClientDeviceDisconnectedDlgt dlgt = ClientDeviceDisconnected; if (dlgt != null) dlgt(this); }
void OnClientDisconnected(ClientConnection clientConnection) { ClientDescriptor descriptor = clientConnection.Descriptor; lock (_networkTracker.SharedControlPointData.SyncObj) { string deviceUuid = descriptor.MPFrontendServerUUID; if (!_clientConnections.ContainsKey(deviceUuid)) return; _clientConnections.Remove(deviceUuid); } InvokeClientDisconnected(descriptor); }