培训考核三期,新版培训,网页版培训登录器
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
5.7 KiB

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using BestHTTP;
namespace BestHTTP.Examples.HTTP
{
public sealed class TextureDownloadSample : BestHTTP.Examples.Helpers.SampleBase
{
#pragma warning disable 0649
[Header("Texture Download Example")]
[Tooltip("The URL of the server that will serve the image resources")]
[SerializeField]
private string _path = "/images/Demo/";
[Tooltip("The downloadable images")]
[SerializeField]
private string[] _imageNames = new string[9] { "One.png", "Two.png", "Three.png", "Four.png", "Five.png", "Six.png", "Seven.png", "Eight.png", "Nine.png" };
[SerializeField]
private RawImage[] _images = new RawImage[0];
[SerializeField]
private Text _maxConnectionPerServerLabel;
[SerializeField]
private Text _cacheLabel;
#pragma warning restore
private byte savedMaxConnectionPerServer;
#if !BESTHTTP_DISABLE_CACHING
private bool allDownloadedFromLocalCache;
#endif
private List<HTTPRequest> activeRequests = new List<HTTPRequest>();
protected override void Start()
{
base.Start();
this.savedMaxConnectionPerServer = HTTPManager.MaxConnectionPerServer;
// Set a well observable value
// This is how many concurrent requests can be made to a server
HTTPManager.MaxConnectionPerServer = 1;
this._maxConnectionPerServerLabel.text = HTTPManager.MaxConnectionPerServer.ToString();
}
void OnDestroy()
{
// Set back to its defualt value.
HTTPManager.MaxConnectionPerServer = this.savedMaxConnectionPerServer;
foreach (var request in this.activeRequests)
request.Abort();
this.activeRequests.Clear();
}
public void OnMaxConnectionPerServerChanged(float value)
{
HTTPManager.MaxConnectionPerServer = (byte)Mathf.RoundToInt(value);
this._maxConnectionPerServerLabel.text = HTTPManager.MaxConnectionPerServer.ToString();
}
public void DownloadImages()
{
// Set these metadatas to its initial values
#if !BESTHTTP_DISABLE_CACHING
allDownloadedFromLocalCache = true;
#endif
for (int i = 0; i < _imageNames.Length; ++i)
{
// Set a blank placeholder texture, overriding previously downloaded texture
this._images[i].texture = null;
// Construct the request
var request = new HTTPRequest(new Uri(this.sampleSelector.BaseURL + this._path + this._imageNames[i]), ImageDownloaded);
// Set the Tag property, we can use it as a general storage bound to the request
request.Tag = this._images[i];
// Send out the request
request.Send();
this.activeRequests.Add(request);
}
this._cacheLabel.text = string.Empty;
}
/// <summary>
/// Callback function of the image download http requests
/// </summary>
void ImageDownloaded(HTTPRequest req, HTTPResponse resp)
{
switch (req.State)
{
// The request finished without any problem.
case HTTPRequestStates.Finished:
if (resp.IsSuccess)
{
// The target RawImage reference is stored in the Tag property
RawImage rawImage = req.Tag as RawImage;
rawImage.texture = resp.DataAsTexture2D;
#if !BESTHTTP_DISABLE_CACHING
// Update the cache-info variable
allDownloadedFromLocalCache = allDownloadedFromLocalCache && resp.IsFromCache;
#endif
}
else
{
Debug.LogWarning(string.Format("Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}",
resp.StatusCode,
resp.Message,
resp.DataAsText));
}
break;
// The request finished with an unexpected error. The request's Exception property may contain more info about the error.
case HTTPRequestStates.Error:
Debug.LogError("Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"));
break;
// The request aborted, initiated by the user.
case HTTPRequestStates.Aborted:
Debug.LogWarning("Request Aborted!");
break;
// Connecting to the server is timed out.
case HTTPRequestStates.ConnectionTimedOut:
Debug.LogError("Connection Timed Out!");
break;
// The request didn't finished in the given time.
case HTTPRequestStates.TimedOut:
Debug.LogError("Processing the request Timed Out!");
break;
}
this.activeRequests.Remove(req);
if (this.activeRequests.Count == 0)
{
#if !BESTHTTP_DISABLE_CACHING
if (this.allDownloadedFromLocalCache)
this._cacheLabel.text = "All images loaded from local cache!";
else
#endif
this._cacheLabel.text = string.Empty;
}
}
}
}