UnityWebRequest前后端交互实现过程解析

 更新时间:2020-06-29 15:45:55   作者:佚名   我要评论(0)

一、技术概述


1、描述这个技术是做什么?


是Unity一套网络工具库,用于进行Http请求
2、学习该技术的原因?


项目需要,防止使用C#原生的网络库,加快开发速

一、技术概述

1、描述这个技术是做什么?

是Unity一套网络工具库,用于进行Http请求

2、学习该技术的原因?

项目需要,防止使用C#原生的网络库,加快开发速度

3、技术的难点在哪里

Unity仅提供了基础的功能,如何把这些功能构造成一个能够稳定业务开发的流程是一个比较难处理的问题

二、技术详情

描述你是如何实现和使用该技术的,要求配合代码和流程图详细描述。

HttpCenter类:封装Get、Post、Put、Delete,维护一个请求队列

///Get方法例举
private IEnumerator StartGet(HttpRequest request)
    {
      var url = request.Url + "?";
      //反射用来填充Url
      Type type = Type.GetType(request.MsgName);
      var Msg = Convert.ChangeType(request.Msg, type);
      PropertyInfo[] properties = Msg.GetType().GetProperties();
      for (int i = 0; i < properties.Length; i++)
      {
        url += $"{properties[i].Name}={properties[i].GetValue(Msg)}";
        if (i != properties.Length - 1)
          url += "&";
      }
      request.Url = url;
      using (UnityWebRequest www = UnityWebRequest.Get(request.Url))
      {
        www.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();
        www.downloadHandler = new DownloadHandlerBuffer();
        www.SetRequestHeader("Content-Type", "application/json");
        www.SetRequestHeader("token", token);
        yield return www.SendWebRequest();
        DealResult(www, request);
      }

工程中如何使用:封装请求、数据,注册委托,调用委托并添加回调

  //部分封装
  public Action<LoginMsg, Action<HttpResponds>> NetLogin;
  public class LoginMsg : BaseMsg
  {
  public LoginMsg(string username, string password)
  {
    this.username = username;
    this.password = password;
  }
  public string username { get; set; }
  public string password { get; set; }
  }
  public class HttpResponds
  {
    public string data;
    public RespondsResult Result;
    public string token;
  }
  //注册委托
  AddListener(ref MsgManager.Instance.NetMsgCenter.NetLogin, Method.Post, "User/login");
  private void AddListener<T>(ref Action<T,Action<HttpResponds>> registerEvent,Method methodType,string url) where T:BaseMsg
  {
    registerEvent += (request, callback) =>
    {
      HttpRequest httpRequest = new HttpRequest()
      {
        Msg = request,
        HttpMethod = Method.Post,
        Url = HttpCenter.path + url,
        Handler = (responds) =>
        {
          if (responds.Result == RespondsResult.Succ)
          {
            try
            {
              callback(responds);
            }
            catch(Exception ex)
            {
              
              Debug.Log("窗口已销毁");
              if(nowScene == 0)
              {
                SceneManager.LoadScene(1);
              }
              else
              {
                SceneManager.LoadScene(0);
              }
            }
          }
        }
      };
      HttpCenter.Instance.Send(httpRequest);
    };
  }
  ///调用,添加回调
  MsgManager.Instance.NetMsgCenter.NetLogin(msg, (responds) =>
       {
         HttpCenter.Instance.token = responds.token;
         GetUserMsg userMsg = new GetUserMsg(accountField.text);
         MsgManager.Instance.NetMsgCenter.NetGetUser(userMsg, (getUserResponds) =>
         {
           NetDataManager.Instance.user = JsonHelper.DeserializeObject<User>(getUserResponds.data);
           UIMgr.Instance.CreateFrame("PersonalFrame");
         });
       });

三、技术使用中遇到的问题和解决过程

关于WebRequest中有个奇怪的问题,至今未搞懂,但是有暂时的解决方法。问题是Post方法直接设置失效,需要先声明为Put,之后再www.method = UnityWebRequest.kHttpVerbPOST;

四、总结

主要是基于UnityWebRequest做了一些封装、利用反射、委托等特性来实现一些基本的功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • C#中HttpWebRequest、WebClient、HttpClient的使用详解
  • C#使用HttpWebRequest重定向方法详解
  • C#基于HttpWebRequest实现发送HTTP请求的方法分析
  • .net core并发请求发送HttpWebRequest的坑解决
  • C#使用HttpWebRequest与HttpWebResponse模拟用户登录
  • C# httpwebrequest访问HTTPS错误处理方法
  • C#中HttpWebRequest的用法详解
  • C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法

相关文章

  • UnityWebRequest前后端交互实现过程解析

    UnityWebRequest前后端交互实现过程解析

    一、技术概述 1、描述这个技术是做什么? 是Unity一套网络工具库,用于进行Http请求 2、学习该技术的原因? 项目需要,防止使用C#原生的网络库,加快开发速
    2020-06-29
  • vue实现列表滚动的过渡动画

    vue实现列表滚动的过渡动画

    本文实例为大家分享了Vue实现列表滚动过渡动画的具体代码,供大家参考,具体内容如下 效果图 失帧比较严重,在手机上效果更佳。 原理分析 这个滚动页面由两个部分布
    2020-06-29
  • python中如何写类

    python中如何写类

    类的定义 Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类: class Student(object): pass class后面紧接着是类名,即Student,类名通常是
    2020-06-29
  • 解决tensorflow/keras时出现数组维度不匹配问题

    解决tensorflow/keras时出现数组维度不匹配问题

    一、环境 Ubuntu 16.04 tensorflow 1.4.0 keras 2.1.3 二、训练数据时报错: ValueError: Error when checking target: expected model_2 to have shape (None, 3)
    2020-06-29
  • 微信小程序实现导航栏和内容上下联动功能代码

    微信小程序实现导航栏和内容上下联动功能代码

    &#8195;&#8195;今日给大家分享一下如何实现导航栏(nav)和内容部分上下联动(相关代码模块我已单独整理放到github上面了,欢迎前来start)。 github地址:https://
    2020-06-29
  • 解决keras使用cov1D函数的输入问题

    解决keras使用cov1D函数的输入问题

    解决了以下错误: 1.ValueError: Input 0 is incompatible with layer conv1d_1: expected ndim=3, found ndim=4 2.ValueError: Error when checking target: expec
    2020-06-29
  • python打开文件的方式有哪些

    python打开文件的方式有哪些

    python下打开文件超级简单,不用导入任何包,直接输入 f = open('your_file.txt','r') 就可以打开一个文件进行操作。第二个参数为对文件的操作方式,'w'是写文件
    2020-06-29
  • python怎么自定义捕获错误

    python怎么自定义捕获错误

    异常捕捉: try: XXXXX1 raise Exception(“xxxxx2”) except (Exception1,Exception2,……): xxxx3 else: xxxxx4 finally: xxxxxxx5 1.raise
    2020-06-29
  • vue实现页面切换滑动效果

    vue实现页面切换滑动效果

    本文实例为大家分享了vue实现页面切换滑动的具体代码,供大家参考,具体内容如下 试着用Vue做了个页面切换时滑动的效果,如下示例,源码 这里使用了Vue的transitio
    2020-06-29
  • python字典的值可以修改吗

    python字典的值可以修改吗

    python中字典的值是可以被修改的,首先我们得知道什么是修改字典 修改字典 向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例: # !/usr/b
    2020-06-29

最新评论