逻辑结构图:

TestHttpCallBackArgs http回调参数

 1 using System;
 2 
 3 /// <summary>
 4 /// http回调参数
 5 /// </summary>
 6 public class TestHttpCallBackArgs : EventArgs
 7 {
 8     /// <summary>
 9     /// 是否有错
10     /// </summary>
11     public bool HasError;
12     /// <summary>
13     /// 错误值
14     /// </summary>
15     public string ErrorValue;
16     /// <summary>
17     ///18     /// </summary>
19     public string Value;
20     /// <summary>
21     /// 数据
22     /// </summary>
23     public byte[] Data;
24 
25     public void Init()
26     {
27         HasError = false;
28         ErrorValue = string.Empty;
29         Value = string.Empty;
30         Data = null;
31     }
32 }

TestHttpRoutine http访问器

  1 using System.Collections;
  2 using System.Collections.Generic;
  3 using UnityEngine;
  4 using UnityEngine.Networking;
  5 
  6 public delegate void HttpSendDataCallBack(TestHttpCallBackArgs callBackArgs);
  7 
  8 /// <summary>
  9 /// http访问器
 10 /// </summary>
 11 public class TestHttpRoutine
 12 {
 13     private HttpSendDataCallBack m_SendCallBack;
 14     private readonly TestHttpCallBackArgs m_CallBackArgs;
 15     private bool m_IsBusy;
 16     /// <summary>
 17     /// 是否获取Data数据
 18     /// </summary>
 19     private bool m_IsGetData;
 20 
 21     public TestHttpRoutine()
 22     {
 23         m_CallBackArgs = TestGameEntry.PoolMgr.Class_Dequeue<TestHttpCallBackArgs>();
 24         m_CallBackArgs.Init();
 25     }
 26 
 27     /// <summary>
 28     /// 发送数据
 29     /// </summary>
 30     /// <param name="url"></param>
 31     /// <param name="sendCallBack"></param>
 32     /// <param name="isPost"></param>
 33     /// <param name="isGetData"></param>
 34     /// <param name="data"></param>
 35     public void SendData(string url, HttpSendDataCallBack sendCallBack, bool isPost = false, bool isGetData = false, Dictionary<object, object> data = null)
 36     {
 37         if (m_IsBusy) return;
 38         m_IsBusy = true;
 39         m_IsGetData = isGetData;
 40         m_SendCallBack = sendCallBack;
 41         string json = string.Empty;
 42         if (isPost)
 43         {
 44             json = LitJson.JsonMapper.ToJson(data);
 45             PostUrl(url, json);
 46         }
 47         else
 48         {
 49             GetUrl(url);
 50         }
 51         if (!m_IsGetData)
 52         {
 53             Debug.Log("<color=#ffa200>发送消息:</color><color=#FFFB80>" + url + "</color>");
 54             if (json != string.Empty)
 55             {
 56                 Debug.Log("<color=#ffdeb3>==>>" + json + "</color>");
 57             }
 58         }
 59     }
 60 
 61     /// <summary>
 62     /// Get请求
 63     /// </summary>
 64     /// <param name="url"></param>
 65     private void GetUrl(string url)
 66     {
 67         UnityWebRequest webRequest = UnityWebRequest.Get(url);
 68         TestGameEntry.Instance.StartCoroutine(Request(webRequest));
 69     }
 70 
 71     /// <summary>
 72     /// post请求
 73     /// </summary>
 74     /// <param name="url"></param>
 75     /// <param name="json"></param>
 76     private void PostUrl(string url, string json)
 77     {
 78         WWWForm form = new WWWForm();
 79         form.AddField("json", json);
 80         UnityWebRequest webRequest = UnityWebRequest.Post(url, form);
 81         TestGameEntry.Instance.StartCoroutine(Request(webRequest));
 82     }
 83 
 84     private IEnumerator Request(UnityWebRequest webRequest)
 85     {
 86         yield return webRequest.SendWebRequest();
 87         m_IsBusy = false;
 88         if (webRequest.result != UnityWebRequest.Result.Success)
 89         {
 90             m_CallBackArgs.HasError = true;
 91             m_CallBackArgs.ErrorValue = webRequest.error;
 92             m_SendCallBack?.Invoke(m_CallBackArgs);
 93             if (!m_IsGetData)
 94             {
 95                 Debug.Log("<color=#00eaff>接收消息:</color><color=#00ff9c>" + webRequest.url + "</color>");
 96                 Debug.Log("<color=#c5e1dc>==>>" + JsonUtility.ToJson(m_CallBackArgs) + "</color>");
 97             }
 98         }
 99         else
100         {
101             m_CallBackArgs.HasError = false;
102             m_CallBackArgs.Value = webRequest.downloadHandler.text;
103             //webRequest.downloadHandler.data 数据是字节数组,序列化也序列化不出来内容 非GetData打印日志,并在data赋值之前打印
104             if (!m_IsGetData)
105             {
106                 Debug.Log("<color=#00eaff>接收消息:</color><color=#00ff9c>" + webRequest.url + "</color>");
107                 Debug.Log("<color=#c5e1dc>==>>" + JsonUtility.ToJson(m_CallBackArgs) + "</color>");
108             }
109             m_CallBackArgs.Data = webRequest.downloadHandler.data;
110             m_SendCallBack?.Invoke(m_CallBackArgs);
111         }
112         TestGameEntry.PoolMgr.Class_Equeue(m_CallBackArgs);
113         webRequest.Dispose();
114         webRequest = null;
115         TestGameEntry.PoolMgr.Class_Equeue(this);
116     }
117 }

标签智能推荐:

C#操作XML(带命名空间)

之前文章讲述了使用c# xpath如何操作xml文件,在实际开发项目中,遇到的很多xml文件都是带有命名空间的,如果还是用之前的代码获取,那将获取到null。本文讲解操作代码有命名空间的Xml文件,以及多个命名空间的xml。XML文件如下:...

【C# XML】XML DOM文档模型

主要的命名空间:System.XmlW3C XML DOM 模型学习W3C XML DOM 模型C#XmlDocumet使用 DOM 模型处理 XML 数据XML 文档对象模型 (DOM) 将 XML 数据作为一组标准的对象对待,用于处理内...

【C# XML】DOM文档对象模型

w3c DOM文档对象模型 框架图学习w3c DOM文档对象模型 前面的话  DOM是javascript操作网页的接口,全称为文档对象模型(Document Object Model)。它的作用是将网页转为一个javascript对...

【C# XML】XML的解析器

访问XML文件的两个基本模型和一个C#特有的模型1)(XML Doc的Xpath)DOM模型是W3C标准,C#对DOM文档模型的实现类 为使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是...

C#中的深度学习(一):使用OpenCV识别硬币

https://www.cnblogs.com/hhhnicvscs/p/14167449.html在本系列文章中,我们将使用深度神经网络(DNN)来执行硬币识别。具体来说,我们将训练一个DNN识别图像中的硬币。在本文中,我们将描述一个Op...

C# DbHelperSQL

using System;using System.Collections;using System.Collections.Specialized;using System.Data;using System.Data.SqlClient...

C#真正意义上的用DataGridView合并表头以及表格

using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Drawing.Desi...

C# mvc Request 请求过长报404错误的解决思路

案例 我们需要根据index 页面选取值 然后 在弹出页面展示已经选取的值但其实Request 超出请求长度,后来经过模式解决了. 分享如下1.设定 web.config 里面的 在web.config中的加入

JavaScript WebSocket C# SuperS

C# WebSocket 后端代码:using Newtonsoft.Json;using SuperSocket.WebSocket;using System;using System.Collections.Concurrent;usi...