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)); } } }