private void HandleDeviceCreation(UPnPDeviceFactory Factory, UPnPDevice device, Uri URL) { Factory.Shutdown(); if (OnCreateDevice != null) { OnCreateDevice(device, URL); } }
/// <summary> /// Creates a device from a URL. [Depracated] use UPnPDeviceFactory /// </summary> /// <param name="DescriptionURL"></param> /// <param name="LifeTime"></param> public void CreateDeviceAsync(Uri DescriptionURL, int LifeTime) { //2ToDo: Replace the failed callback UPnPDeviceFactory fac = new UPnPDeviceFactory(DescriptionURL, LifeTime, HandleDeviceCreation, null, null, null); CreateTable[fac] = fac; Lifetime.Add(fac, 30); }
private void HandleFactory(UPnPDeviceFactory Factory, UPnPDevice device, Uri URL) { lock (CreateTable) { CreateTable.Remove(Factory); } Factory.Shutdown(); if (OnDevice != null) { OnDevice(this, device, URL); } }
private void DeviceFactoryFailedSink(UPnPDeviceFactory sender, Uri URL, Exception e, string urn) { lock (deviceTableLock) { if (deviceTable.ContainsKey(urn)) { deviceTable.Remove(urn); } } }
/// <summary> /// Create a UPnPDevice from a Uri /// </summary> /// <param name="DescLocation">XML Description Uri</param> /// <param name="MaxSeconds">Device refresh Cycle</param> public void CreateDevice(Uri DescLocation, int MaxSeconds, IPAddress localaddr, string usn) { EventLogger.Log(this, EventLogEntryType.Information, "Creating Device: " + usn); lock (CreateTable) { // 2TODO: Fix the failed callback UPnPDeviceFactory x = new UPnPDeviceFactory(DescLocation, MaxSeconds, HandleFactory, FactoryFailedSink, localaddr, usn); CreateTable[x] = x; } }
private void FactoryFailedSink(UPnPDeviceFactory sender, Uri URL, Exception e, string urn) { lock (CreateTable) { CreateTable.Remove(sender); sender.Shutdown(); } if (OnFailed != null) { OnFailed(this, URL, e, urn); } }
/// <summary> /// Triggered when a new UPnP device is created. /// </summary> private void DeviceFactoryCreationSink(UPnPDeviceFactory sender, UPnPDevice device, Uri locationURL) { // Hardening if (deviceTable.Contains(device.UniqueDeviceName) == false && deviceTable.Contains("FORCEDDEVICE") == false) { EventLogger.Log(this, EventLogEntryType.Error, "UPnPDevice[" + device.FriendlyName + "]@" + device.LocationURL + " advertised UDN[" + device.UniqueDeviceName + "] in xml but not in SSDP"); return; } lock (deviceTableLock) { DeviceInfo deviceInfo; if (deviceTable.Contains(device.UniqueDeviceName) == false) { // This must be the forced device deviceInfo = (DeviceInfo)deviceTable["FORCEDDEVICE"]; deviceTable.Remove("FORCEDDEVICE"); deviceTable[device.UniqueDeviceName] = deviceInfo; } // Hardening - Creating a device we have should never happen. if (((DeviceInfo)deviceTable[device.UniqueDeviceName]).Device != null) { EventLogger.Log(this, EventLogEntryType.Error, "Unexpected UPnP Device Creation: " + device.FriendlyName + "@" + device.LocationURL); return; } // Lets update out state and notify the user. deviceInfo = (DeviceInfo)deviceTable[device.UniqueDeviceName]; deviceInfo.Device = device; deviceTable[device.UniqueDeviceName] = deviceInfo; deviceLifeTimeClock.Add(device.UniqueDeviceName, device.ExpirationTimeout); activeDeviceList.Add(device); } OnAddedDeviceEvent.Fire(this, device); }