/// <summary> /// Triggered when a device lifetime has expired /// </summary> /// <param name="Obj"></param> private void DeviceLifeTimeClockSink(LifeTimeMonitor sender, object obj) { DeviceInfo deviceInfo; lock (deviceTableLock) { if (deviceTable.ContainsKey(obj) == false) { return; } deviceInfo = (DeviceInfo)deviceTable[obj]; deviceTable.Remove(obj); deviceUpdateClock.Remove(obj); // Cancel any source change if (activeDeviceList.Contains(deviceInfo.Device)) { activeDeviceList.Remove(deviceInfo.Device); } else { deviceInfo.Device = null; // Don't warn user about this, user does not know about device } } if (deviceInfo.Device != null) { deviceInfo.Device.Removed(); } if (deviceInfo.Device != null) { deviceInfo.Device.Removed(); OnDeviceExpiredEvent.Fire(this, deviceInfo.Device); } }
/// <summary> /// Triggered when a device must be updated to a new source IP address /// </summary> /// <param name="Obj"></param> private void DeviceUpdateClockSink(LifeTimeMonitor sender, object obj) { // Make the source switch lock (deviceTableLock) { if (deviceTable.ContainsKey(obj) == false) { return; } DeviceInfo deviceInfo = (DeviceInfo)deviceTable[obj]; if (deviceInfo.PendingBaseURL == null) { return; // Cancel the switch } deviceInfo.BaseURL = deviceInfo.PendingBaseURL; deviceInfo.MaxAge = deviceInfo.PendingMaxAge; deviceInfo.LocalEP = deviceInfo.PendingLocalEP; deviceInfo.NotifyTime = DateTime.Now; deviceInfo.Device.UpdateDevice(deviceInfo.BaseURL, deviceInfo.LocalEP.Address); deviceTable[obj] = deviceInfo; deviceLifeTimeClock.Add(deviceInfo.UDN, deviceInfo.MaxAge); } //if (OnUpdatedDevice != null) OnUpdatedDevice(this,deviceInfo.Device); }
private void KeepAliveSink(LifeTimeMonitor sender, object obj) { if (IdleTimeout == false) { return; } ArrayList RemoveList = new ArrayList(); lock (SessionTable) { IDictionaryEnumerator en = SessionTable.GetEnumerator(); while (en.MoveNext()) { if (((HTTPSession)en.Value).Monitor.IsTimeout()) { RemoveList.Add(en.Value); } } } foreach (HTTPSession HS in RemoveList) { HS.Close(); } KeepAliveTimer.Add(false, 7); }
protected void LifeTimeSink(LifeTimeMonitor sender, object Obj) { lock (this) { if (PendingEvents > 1) { base.Value = PendingObject; } PendingObject = Accumulator.Reset(); PendingEvents = 0; } /* * * if (PendingObject != null) * { * base.Value = PendingObject; * PendingObject = Accumulator.Reset(); * PendingEvents = 1; * t.Add(this,Seconds); * } * else * { * StateObject = Accumulator.Reset(); * PendingEvents = 0; * } * }*/ }
private void HandleExpired(LifeTimeMonitor sender, object Obj) { if (Obj.GetType().FullName == "OSTL.UPnP.UPnPDeviceFactory") { ((UPnPDeviceFactory)Obj).Shutdown(); CreateTable.Remove(Obj); } }
private void SearchTimerSink(LifeTimeMonitor sender, object obj) { SearchStruct SS = (SearchStruct)obj; if (OnSearch != null) { OnSearch(SS.ST, SS.Source, SS.Local); } }
/// <summary> /// Calledn every second to check for interface changes. /// </summary> private void PollInterface(LifeTimeMonitor sender, Object obj) { try { ArrayList CurrentAddressTable = new ArrayList(); NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface i in interfaces) { if (i.IsReceiveOnly == false && i.OperationalStatus == OperationalStatus.Up && i.SupportsMulticast) { IPInterfaceProperties i2 = i.GetIPProperties(); foreach (UnicastIPAddressInformation i3 in i2.UnicastAddresses) { if (!CurrentAddressTable.Contains(i3.Address) && !i3.Address.Equals(IPAddress.IPv6Loopback)) { CurrentAddressTable.Add(i3.Address); } } } } /* * IPHostEntry HostInfo = Dns.GetHostEntry(HostName); * ArrayList CurrentAddressTable = new ArrayList(HostInfo.AddressList); */ ArrayList OldAddressTable = AddressTable; AddressTable = CurrentAddressTable; if (!AddressTable.Contains(IPAddress.Loopback)) { AddressTable.Add(IPAddress.Loopback); } foreach (IPAddress addr in CurrentAddressTable) { if (OldAddressTable.Contains(addr) == false) { OnNewInterfaceEvent.Fire(this, addr); } } foreach (IPAddress addr in OldAddressTable) { if (CurrentAddressTable.Contains(addr) == false) { OnInterfaceDisabledEvent.Fire(this, addr); } } } catch (Exception ex) { EventLogger.Log(ex); //System.Windows.Forms.MessageBox.Show(ex.ToString(),"NetworkInfo"); } InterfacePoller.Add(this, NetworkPollSeconds); }
private void KeepAliveSink(LifeTimeMonitor sender, object obj) { if (IdleTimeout == false || (int)obj != GetHashCode()) { return; } ForceCloseSession(); if (OnInactiveClosed != null) { OnInactiveClosed(this); } }
public UPnPControlPoint(NetworkInfo ni) { CreateTable = Hashtable.Synchronized(new Hashtable()); NetInfo = ni; SyncData = ArrayList.Synchronized(new ArrayList()); SSDPSessions = Hashtable.Synchronized(new Hashtable()); Lifetime = new LifeTimeMonitor(); Lifetime.OnExpired += HandleExpired; SSDPServer = new SSDP(65535); SSDPServer.OnNotify += HandleNotify; }
private void SessionTimerSink(LifeTimeMonitor sender, object obj) { HTTPSession s = (HTTPSession)obj; s.Close(); }