【Unity】 HTFramework框架(十五)WebRequest网络请求

更新日期:2019年9月27日。
Github源码:[点我获取源码]

WebRequest网络请求简介

WebRequest网络请求主要用于与web服务器通信,比如请求某一网络链接或服务器接口,获得回复或下载网络上的资源。

WebRequest的使用策略是:新建网络接口 => 注册网络接口 => 请求网络接口

使用WebRequest

新建网络接口

目前有四种网络接口类型:
1.WebInterfacePost(请求一个网络接口并提交表单)
2.WebInterfaceGetAudioClip(请求一个网络接口并获得AudioClip类型的值回复)
3.WebInterfaceGetString(请求一个网络接口并获得String类型的值回复)
4.WebInterfaceGetTexture2D(请求一个网络接口并获得Texture2D类型的值回复)

新建的网络接口必须继承至网络接口基类:

    /// <summary>
    /// 网络接口基类
    /// </summary>
    public abstract class WebInterfaceBase : IReference
    {
        /// <summary>
        /// 接口名称
        /// </summary>
        public string Name;
        /// <summary>
        /// 接口Url
        /// </summary>
        public string Url;
        /// <summary>
        /// 是否是离线接口
        /// </summary>
        public bool IsOffline = false;
        /// <summary>
        /// 离线模式处理者
        /// </summary>
        public HTFAction OfflineHandler;
        /// <summary>
        /// 请求完成
        /// </summary>
        /// <param name="handler">下载助手</param>
        public abstract void OnRequestFinished(DownloadHandler handler);
        /// <summary>
        /// 设置下载助手
        /// </summary>
        /// <param name="request">网络请求的实例</param>
        public abstract void OnSetDownloadHandler(UnityWebRequest request);
        /// <summary>
        /// 获取下载的字符串
        /// </summary>
        /// <param name="handler">下载助手</param>
        /// <returns>下载的字符串</returns>
        public abstract string OnGetDownloadString(DownloadHandler handler);
        /// <summary>
        /// 重置
        /// </summary>
        public abstract void Reset();
    }

OnRequestFinished实现方法中对请求结果进行处理,比如WebInterfaceGetString接口类型:

    /// <summary>
    /// 网络接口:获取字符串
    /// </summary>
    public sealed class WebInterfaceGetString : WebInterfaceBase
    {
        public HTFAction<string> Handler;

        public override void OnRequestFinished(DownloadHandler handler)
        {
            if (handler == null)
            {
                Handler?.Invoke("");
            }
            else
            {
                Handler?.Invoke(handler.text);
            }
        }

        public override void OnSetDownloadHandler(UnityWebRequest request)
        {

        }

        public override string OnGetDownloadString(DownloadHandler handler)
        {
            return handler.text;
        }

        public override void Reset()
        {
            OfflineHandler = null;
            Handler = null;
        }
    }

注册网络接口

使用全局唯一的名称来注册网络接口:

    private void Start()
	{
        Main.m_WebRequest.RegisterInterface("用户登录", @"https://www.htgameserver.com/login", LoginHandler, LoginOfflineHandler);
	}

    private void LoginHandler(string content)
    {
        GlobalTools.LogInfo("登录成功!" + content);

        //进入场景
        InitScene();
    }

    private void LoginOfflineHandler()
    {
        GlobalTools.LogInfo("离线模式,直接进入!");

        //进入场景
        InitScene();
    }

注册接口时的第四个参数LoginOfflineHandler为离线模式时请求此接口的替代处理者,如果当前是离线模式,任何请求将总是进入LoginOfflineHandler方法!(在属性面板勾选IsOfflineState将开启离线模式)

如果未设计离线模式,这个参数默认为空。

请求网络接口

请求网络接口将变得极其简单:

    private void Start()
	{
        Main.m_WebRequest.RegisterInterface("用户登录", @"https://www.htgameserver.com/login", LoginHandler, LoginOfflineHandler);
        Main.m_WebRequest.RegisterInterface("拉取玩家信息", @"https://www.htgameserver.com/core/getplayer", GetPlayerHandler);
    }

    private void LoginHandler(string content)
    {
        if (content == "200")
        {
            GlobalTools.LogInfo("登录成功!" + content);
            
            //发起【拉取玩家信息】请求
			Main.m_WebRequest.SendRequest("拉取玩家信息");

            //进入场景
            InitScene();
        }
        else
        {
            GlobalTools.LogInfo("登录失败!" + content);
        }        
    }

    private void LoginOfflineHandler()
    {
        GlobalTools.LogInfo("离线模式,直接进入!");

        //进入场景
        InitScene();
    }

    private void Update()
	{
        //鼠标左键双击登录
        if (Main.m_Input.GetButtonDown(InputButtonType.MouseLeftDoubleClick))
        {
            //发起【用户登录】请求,模拟用户【张三】
            Main.m_WebRequest.SendRequest("用户登录", "username=张三", "password=55668899");
        }
	}

让接口离线

任何接口,我们都可以自由的设置其是否为离线接口,即便是在非离线模式:

    private void Start()
    {
        //设置接口 【用户登录】 为离线接口,所有调用该接口的请求将自动使用离线模式处理
        Main.m_WebRequest.GetInterface("用户登录").IsOffline = true;
    }

运行时检视面板

在编辑器中运行时将会出现运行时检视面板(Runtime Data),主要用以调试或数据监测,目前面板如下:
在这里插入图片描述
1.Web Interfaces:当前注册的所有接口清单。

猜你喜欢

转载自blog.csdn.net/qq992817263/article/details/89886124
今日推荐