| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | using System;using System.Net.Http.Headers;namespace Rssdp{    /// <summary>    /// Represents a discovered device, containing basic information about the device and the location of it's full device description document. Also provides convenience methods for retrieving the device description document.    /// </summary>    /// <seealso cref="SsdpDevice"/>    /// <seealso cref="Infrastructure.ISsdpDeviceLocator"/>    public sealed class DiscoveredSsdpDevice    {        #region Fields        private DateTimeOffset _AsAt;        #endregion        #region Public Properties        /// <summary>        /// Sets or returns the type of notification, being either a uuid, device type, service type or upnp:rootdevice.        /// </summary>        public string NotificationType { get; set; }        /// <summary>        /// Sets or returns the universal service name (USN) of the device.        /// </summary>        public string Usn { get; set; }        /// <summary>        /// Sets or returns a URL pointing to the device description document for this device.        /// </summary>        public Uri DescriptionLocation { get; set; }        /// <summary>        /// Sets or returns the length of time this information is valid for (from the <see cref="AsAt"/> time).        /// </summary>        public TimeSpan CacheLifetime { get; set; }        /// <summary>        /// Sets or returns the date and time this information was received.        /// </summary>        public DateTimeOffset AsAt        {            get { return _AsAt; }            set            {                if (_AsAt != value)                {                    _AsAt = value;                }            }        }        /// <summary>        /// Returns the headers from the SSDP device response message        /// </summary>        public HttpHeaders ResponseHeaders { get; set; }        #endregion        #region Public Methods        /// <summary>        /// Returns true if this device information has expired, based on the current date/time, and the <see cref="CacheLifetime"/> & <see cref="AsAt"/> properties.        /// </summary>        /// <returns></returns>        public bool IsExpired()        {            return this.CacheLifetime == TimeSpan.Zero || this.AsAt.Add(this.CacheLifetime) <= DateTimeOffset.Now;        }        #endregion        #region Overrides        /// <summary>        /// Returns the device's <see cref="Usn"/> value.        /// </summary>        /// <returns>A string containing the device's universal service name.</returns>        public override string ToString()        {            return this.Usn;        }        #endregion    }}
 |