Esempio n. 1
0
        /// <summary>
        /// Discovers remote resources.
        /// </summary>
        /// <param name="uriPath">path to be queried</param>
        /// <param name="query">the query to filter resources</param>
        /// <param name="mediaType">format to use - defaults to any</param>
        /// <returns>the descoverd <see cref="WebLink"/> representing remote resources, or null if no response</returns>
        public IEnumerable <WebLink> Discover(string uriPath, String query, int mediaType = MediaType.Undefined)
        {
            Request discover = Prepare(Request.NewGet());

            discover.ClearUriPath().ClearUriQuery().UriPath = uriPath;
            if (!String.IsNullOrEmpty(query))
            {
                discover.UriQuery = query;
            }
            if (mediaType != MediaType.Undefined)
            {
                discover.Accept = mediaType;
            }

            Response links = discover.Send().WaitForResponse(Timeout);

            if (links == null)
            {
                // if no response, return null (e.g., timeout)
                return(null);
            }

            switch (links.ContentType)
            {
            case MediaType.ApplicationLinkFormat:
                return(LinkFormat.Parse(links.PayloadString));

            case MediaType.ApplicationLinkFormatCbor:
                return(LinkFormat.ParseCbor(links.Payload));

            case MediaType.ApplicationLinkFormatJson:
                return(LinkFormat.ParseJson(links.PayloadString));

            default:
                return(_EmptyLinks);
            }
        }