using Axibug.WebRequest;
using System.Collections.Generic;
using UnityEngine;
namespace Axibug.Runtime
{
///
/// Web 请求组件。
///
[DisallowMultipleComponent]
[AddComponentMenu("Axibug/Web Request")]
public sealed class WebRequestComponent : GameComponent
{
private const int DefaultPriority = 0;
private IWebRequestManager m_WebRequestManager = null;
private EventComponent m_EventComponent = null;
[SerializeField]
private Transform m_InstanceRoot = null;
[SerializeField]
private string m_WebRequestAgentHelperTypeName = "Axibug.Runtime.UnityWebRequestAgentHelper";
[SerializeField]
private WebRequestAgentHelperBase m_CustomWebRequestAgentHelper = null;
[SerializeField]
private int m_WebRequestAgentHelperCount = 1;
[SerializeField]
private float m_Timeout = 30f;
///
/// 获取 Web 请求代理总数量。
///
public int TotalAgentCount
{
get
{
return m_WebRequestManager.TotalAgentCount;
}
}
///
/// 获取可用 Web 请求代理数量。
///
public int FreeAgentCount
{
get
{
return m_WebRequestManager.FreeAgentCount;
}
}
///
/// 获取工作中 Web 请求代理数量。
///
public int WorkingAgentCount
{
get
{
return m_WebRequestManager.WorkingAgentCount;
}
}
///
/// 获取等待 Web 请求数量。
///
public int WaitingTaskCount
{
get
{
return m_WebRequestManager.WaitingTaskCount;
}
}
///
/// 获取或设置 Web 请求超时时长,以秒为单位。
///
public float Timeout
{
get
{
return m_WebRequestManager.Timeout;
}
set
{
m_WebRequestManager.Timeout = m_Timeout = value;
}
}
///
/// 游戏框架组件初始化。
///
protected override void Awake()
{
base.Awake();
m_WebRequestManager = FrameworkEntry.GetModule();
if (m_WebRequestManager == null)
{
Log.Fatal("Web request manager is invalid.");
return;
}
m_WebRequestManager.Timeout = m_Timeout;
m_WebRequestManager.WebRequestStart += OnWebRequestStart;
m_WebRequestManager.WebRequestSuccess += OnWebRequestSuccess;
m_WebRequestManager.WebRequestFailure += OnWebRequestFailure;
}
private void Start()
{
m_EventComponent = GameEntry.GetComponent();
if (m_EventComponent == null)
{
Log.Fatal("Event component is invalid.");
return;
}
if (m_InstanceRoot == null)
{
m_InstanceRoot = new GameObject("Web Request Agent Instances").transform;
m_InstanceRoot.SetParent(gameObject.transform);
m_InstanceRoot.localScale = Vector3.one;
}
for (int i = 0; i < m_WebRequestAgentHelperCount; i++)
{
AddWebRequestAgentHelper(i);
}
}
///
/// 根据 Web 请求任务的序列编号获取 Web 请求任务的信息。
///
/// 要获取信息的 Web 请求任务的序列编号。
/// Web 请求任务的信息。
public TaskInfo GetWebRequestInfo(int serialId)
{
return m_WebRequestManager.GetWebRequestInfo(serialId);
}
///
/// 根据 Web 请求任务的标签获取 Web 请求任务的信息。
///
/// 要获取信息的 Web 请求任务的标签。
/// Web 请求任务的信息。
public TaskInfo[] GetWebRequestInfos(string tag)
{
return m_WebRequestManager.GetWebRequestInfos(tag);
}
///
/// 根据 Web 请求任务的标签获取 Web 请求任务的信息。
///
/// 要获取信息的 Web 请求任务的标签。
/// Web 请求任务的信息。
public void GetAllWebRequestInfos(string tag, List results)
{
m_WebRequestManager.GetAllWebRequestInfos(tag, results);
}
///
/// 获取所有 Web 请求任务的信息。
///
/// 所有 Web 请求任务的信息。
public TaskInfo[] GetAllWebRequestInfos()
{
return m_WebRequestManager.GetAllWebRequestInfos();
}
///
/// 获取所有 Web 请求任务的信息。
///
/// 所有 Web 请求任务的信息。
public void GetAllWebRequestInfos(List results)
{
m_WebRequestManager.GetAllWebRequestInfos(results);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri)
{
return AddWebRequest(webRequestUri, null, null, null, DefaultPriority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, byte[] postData)
{
return AddWebRequest(webRequestUri, postData, null, null, DefaultPriority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// WWW 表单。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, WWWForm wwwForm)
{
return AddWebRequest(webRequestUri, null, wwwForm, null, DefaultPriority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// Web 请求任务的标签。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, string tag)
{
return AddWebRequest(webRequestUri, null, null, tag, DefaultPriority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// Web 请求任务的优先级。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, int priority)
{
return AddWebRequest(webRequestUri, null, null, null, priority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, object userData)
{
return AddWebRequest(webRequestUri, null, null, null, DefaultPriority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// Web 请求任务的标签。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, byte[] postData, string tag)
{
return AddWebRequest(webRequestUri, postData, null, tag, DefaultPriority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// WWW 表单。
/// Web 请求任务的标签。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, WWWForm wwwForm, string tag)
{
return AddWebRequest(webRequestUri, null, wwwForm, tag, DefaultPriority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// Web 请求任务的优先级。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, byte[] postData, int priority)
{
return AddWebRequest(webRequestUri, postData, null, null, priority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// WWW 表单。
/// Web 请求任务的优先级。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, WWWForm wwwForm, int priority)
{
return AddWebRequest(webRequestUri, null, wwwForm, null, priority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, byte[] postData, object userData)
{
return AddWebRequest(webRequestUri, postData, null, null, DefaultPriority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// WWW 表单。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, WWWForm wwwForm, object userData)
{
return AddWebRequest(webRequestUri, null, wwwForm, null, DefaultPriority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// Web 请求任务的标签。
/// Web 请求任务的优先级。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, string tag, int priority)
{
return AddWebRequest(webRequestUri, null, null, tag, priority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// Web 请求任务的标签。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, string tag, object userData)
{
return AddWebRequest(webRequestUri, null, null, tag, DefaultPriority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// Web 请求任务的优先级。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, int priority, object userData)
{
return AddWebRequest(webRequestUri, null, null, null, priority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// Web 请求任务的标签。
/// Web 请求任务的优先级。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, byte[] postData, string tag, int priority)
{
return AddWebRequest(webRequestUri, postData, null, tag, priority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// WWW 表单。
/// Web 请求任务的标签。
/// Web 请求任务的优先级。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, WWWForm wwwForm, string tag, int priority)
{
return AddWebRequest(webRequestUri, null, wwwForm, tag, priority, null);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// Web 请求任务的标签。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, byte[] postData, string tag, object userData)
{
return AddWebRequest(webRequestUri, postData, null, tag, DefaultPriority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// WWW 表单。
/// Web 请求任务的标签。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, WWWForm wwwForm, string tag, object userData)
{
return AddWebRequest(webRequestUri, null, wwwForm, tag, DefaultPriority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// Web 请求任务的优先级。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, byte[] postData, int priority, object userData)
{
return AddWebRequest(webRequestUri, postData, null, null, priority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// WWW 表单。
/// Web 请求任务的优先级。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, WWWForm wwwForm, int priority, object userData)
{
return AddWebRequest(webRequestUri, null, wwwForm, null, priority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// Web 请求任务的标签。
/// Web 请求任务的优先级。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, string tag, int priority, object userData)
{
return AddWebRequest(webRequestUri, null, null, tag, priority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// Web 请求任务的标签。
/// Web 请求任务的优先级。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, byte[] postData, string tag, int priority, object userData)
{
return AddWebRequest(webRequestUri, postData, null, tag, priority, userData);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// WWW 表单。
/// Web 请求任务的标签。
/// Web 请求任务的优先级。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
public int AddWebRequest(string webRequestUri, WWWForm wwwForm, string tag, int priority, object userData)
{
return AddWebRequest(webRequestUri, null, wwwForm, tag, priority, userData);
}
///
/// 根据 Web 请求任务的序列编号移除 Web 请求任务。
///
/// 要移除 Web 请求任务的序列编号。
/// 是否移除 Web 请求任务成功。
public bool RemoveWebRequest(int serialId)
{
return m_WebRequestManager.RemoveWebRequest(serialId);
}
///
/// 根据 Web 请求任务的标签移除 Web 请求任务。
///
/// 要移除 Web 请求任务的标签。
/// 移除 Web 请求任务的数量。
public int RemoveWebRequests(string tag)
{
return m_WebRequestManager.RemoveWebRequests(tag);
}
///
/// 移除所有 Web 请求任务。
///
/// 移除 Web 请求任务的数量。
public int RemoveAllWebRequests()
{
return m_WebRequestManager.RemoveAllWebRequests();
}
///
/// 增加 Web 请求代理辅助器。
///
/// Web 请求代理辅助器索引。
private void AddWebRequestAgentHelper(int index)
{
WebRequestAgentHelperBase webRequestAgentHelper = Helper.CreateHelper(m_WebRequestAgentHelperTypeName, m_CustomWebRequestAgentHelper, index);
if (webRequestAgentHelper == null)
{
Log.Error("Can not create web request agent helper.");
return;
}
webRequestAgentHelper.name = Utility.Text.Format("Web Request Agent Helper - {0}", index);
Transform transform = webRequestAgentHelper.transform;
transform.SetParent(m_InstanceRoot);
transform.localScale = Vector3.one;
m_WebRequestManager.AddWebRequestAgentHelper(webRequestAgentHelper);
}
///
/// 增加 Web 请求任务。
///
/// Web 请求地址。
/// 要发送的数据流。
/// WWW 表单。
/// Web 请求任务的标签。
/// Web 请求任务的优先级。
/// 用户自定义数据。
/// 新增 Web 请求任务的序列编号。
private int AddWebRequest(string webRequestUri, byte[] postData, WWWForm wwwForm, string tag, int priority, object userData)
{
return m_WebRequestManager.AddWebRequest(webRequestUri, postData, tag, priority, WWWFormInfo.Create(wwwForm, userData));
}
private void OnWebRequestStart(object sender, Axibug.WebRequest.WebRequestStartEventArgs e)
{
m_EventComponent.Fire(this, WebRequestStartEventArgs.Create(e));
}
private void OnWebRequestSuccess(object sender, Axibug.WebRequest.WebRequestSuccessEventArgs e)
{
m_EventComponent.Fire(this, WebRequestSuccessEventArgs.Create(e));
}
private void OnWebRequestFailure(object sender, Axibug.WebRequest.WebRequestFailureEventArgs e)
{
Log.Warning("Web request failure, web request serial id '{0}', web request uri '{1}', error message '{2}'.", e.SerialId, e.WebRequestUri, e.ErrorMessage);
m_EventComponent.Fire(this, WebRequestFailureEventArgs.Create(e));
}
}
}