Unity3D:HTTP请求模块

先上接口

using System;
using System.Collections.Generic;
using UnityEngine;

namespace YDB.Http
{
    public interface IHttp
    {
        /// <summary>
        /// Get
        /// </summary>
        /// <param name="callback">回调</param>
        /// <param name="url">地址</param>
        void Get(Action<string> callback,string url);
        /// <summary>
        /// Get
        /// </summary>
        /// <param name="callback">回调</param>
        /// <param name="url">地址</param>
        void Get(Action<byte[]> callback, string url);
        /// <summary>
        /// Get
        /// </summary>
        /// <param name="callback">回调</param>
        /// <param name="url">地址</param>
        void Get(Action<Texture> callback, string url);
        /// <summary>
        /// Post
        /// </summary>
        /// <param name="parameters">参数</param>
        /// <param name="url">地址</param>
        void Post(Dictionary<string, string> parameters, string url);
    }
}

接口具体实现

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

namespace YDB.Http
{
    public class Http : MonoBehaviour,IHttp
    {
        public void Get(Action<string> callback, string url)
        {
            if(callback == null)
            {
                Debug.LogWarning("回调为空,请求了也没屁用");
            }
            UnityWebRequest unityWebRequest = UnityWebRequest.Get(url);
            StartCoroutine(StartGet(callback,unityWebRequest));
        }

        public void Get(Action<byte[]> callback, string url)
        {
            if (callback == null)
            {
                Debug.LogWarning("回调为空,请求了也没屁用");
            }
            UnityWebRequest unityWebRequest = UnityWebRequest.Get(url);
            StartCoroutine(StartGet(callback, unityWebRequest));
        }

        public void Get(Action<Texture> callback, string url)
        {
            if (callback == null)
            {
                Debug.LogWarning("回调为空,请求了也没屁用");
            }
            UnityWebRequest unityWebRequest = UnityWebRequest.Get(url);
            DownloadHandlerTexture downloadHandler = new DownloadHandlerTexture();
            unityWebRequest.downloadHandler = downloadHandler;
            StartCoroutine(StartGet(callback, unityWebRequest));
        }

        public void Post(Dictionary<string, string> parameters, string url)
        {
            UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, parameters);
            StartCoroutine(StartPost(unityWebRequest));
        }
        private IEnumerator StartPost(UnityWebRequest uwr)
        {
            yield return uwr.SendWebRequest();
            if (uwr.isHttpError || uwr.isNetworkError)
            {
                Debug.LogError(uwr.error);
            }
            else
            {
                Debug.Log("Post请求成功");
            }
        }
        /// <summary>
        /// 异步网络请求
        /// </summary>
        /// <typeparam name="T">回调类型</typeparam>
        /// <param name="callback">回调</param>
        /// <param name="uwr">请求参数</param>
        /// <returns></returns>
        private IEnumerator StartGet<T>(Action<T> callback, UnityWebRequest uwr) where T : class
        {
            yield return uwr.SendWebRequest();
            if (uwr.isHttpError || uwr.isNetworkError)
            {
                Debug.LogError(uwr.error);
            }
            else
            {
                Debug.Log("Get请求成功");
                Type type = typeof(T);
                if (type == typeof(string))
                {
                    string text = uwr.downloadHandler.text;
                    callback(text as T);
                }
                else if (type == typeof(byte[]))
                {
                    byte[] packet = uwr.downloadHandler.data;
                    callback(packet as T);
                }
                else if (type == typeof(Texture))
                {
                    //特殊的文件类型,通过不同的Handler来下载
                    DownloadHandlerTexture downloadHandler = uwr.downloadHandler as DownloadHandlerTexture;
                    Texture texture = downloadHandler.texture;
                    callback(texture as T);
                }
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值