123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- using System;
- using System.Threading.Tasks;
- using Best.HTTP.Examples.Helpers;
- using Best.HTTP.Hosts.Settings;
- using Best.HTTP.Shared;
- using UnityEngine;
- namespace Best.HTTP.Examples
- {
- /// <summary>
- /// Demonstrates the usage of HTTPManager.PerHostSettings to set rules and configurations on a per-host basis.
- /// </summary>
- class PerHostManagerSample : SampleBase
- {
- #pragma warning disable 0649, 0169
- [Header("Sample Fields")]
- /// <summary>
- /// GameObject that will be used as a root for new UI objects.
- /// </summary>
- [SerializeField]
- private RectTransform _contentRoot;
- /// <summary>
- /// Prefab of a UI object with two Text fields.
- /// </summary>
- [SerializeField]
- private MultiTextListItem _listItemPrefab;
- /// <summary>
- /// Prefab of a UI object with Text and (Raw)Image fields.
- /// </summary>
- [SerializeField]
- private TextWithImageListItem _listItemWithImagePrefab;
- #pragma warning restore
- readonly Uri host_1 = new Uri("https://besthttpwebgldemo.azurewebsites.net");
- readonly string[] host_1_image_paths = new string[] { "/images/Demo/Two.png", "/images/Demo/Three.png" };
- readonly Uri host_2 = new Uri("https://httpbingo.org");
- readonly string[] host_2_image_paths = new string[] { "/image/jpeg", "/image/png" };
- protected override async void Start()
- {
- base.Start();
- #if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL
- CreateUIItem("Disabling HTTP/2 globally, all following request should done over HTTP/1.");
- // Get the global/fallback settings.
- var globalSettings = HTTPManager.PerHostSettings.Get("*");
- // Turn off connection pooling
- globalSettings.HTTP1ConnectionSettings.TryToReuseConnections = false;
- // Turn off HTTP/2 connections.
- globalSettings.HTTP2ConnectionSettings.EnableHTTP2Connections = false;
- await DownloadImages();
- CreateUIItem("Enabling HTTP/2 for only a couple hosts");
- // Add new settings. New connections to these hosts will use these settings instead of the global one.
- // By default both connection pooling and HTTP/2 are enabled, downloading the images again will be done over HTTP/2.
- HTTPManager.PerHostSettings.Add(host_1, new HostSettings());
- HTTPManager.PerHostSettings.Add(host_2, new HostSettings());
- #else
- CreateUIItem("Please note that this sample can't work under WebGL!");
- #endif
- await DownloadImages();
- }
- async Task DownloadImages()
- {
- // Images from the first host
- foreach (var path in host_1_image_paths)
- {
- var request = HTTPRequest.CreateGet(new Uri(host_1, path));
- request.DownloadSettings.DisableCache = true;
- var resp = await request.GetHTTPResponseAsync();
- CreateUIItemWithImage(host_1.Host)
- .SetStatusText($"http/{resp.HTTPVersion}")
- .SetImage(resp.DataAsTexture2D);
- }
- // Images from the second host
- foreach (var path in host_2_image_paths)
- {
- var request = HTTPRequest.CreateGet(new Uri(host_2, path));
- request.DownloadSettings.DisableCache = true;
- var resp = await request.GetHTTPResponseAsync();
- CreateUIItemWithImage(host_2.Host)
- .SetStatusText($"http/{resp.HTTPVersion}")
- .SetImage(resp.DataAsTexture2D);
- }
- }
- private void OnDisable()
- => HTTPManager.PerHostSettings.Clear();
- MultiTextListItem CreateUIItem(string str)
- => Instantiate<MultiTextListItem>(this._listItemPrefab, this._contentRoot)
- .SetText(str) as MultiTextListItem;
- TextWithImageListItem CreateUIItemWithImage(string str)
- => Instantiate<TextWithImageListItem>(this._listItemWithImagePrefab, this._contentRoot)
- .SetText(str) as TextWithImageListItem;
- }
- }
|