Unity组件开发--短连接HTTP
1.网络请求管理器
using LitJson;
using Cysharp.Threading.Tasks;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Events;using System.Web;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using UnityEngine.Purchasing.MiniJSON;public class HttpHelper : MonoBehaviour {public static HttpHelper Instance;[DllImport("__Internal")] public static extern string GetUrlParam(string str);private void Awake() {Instance = this;}enum HttpEnum {POST,GET,DEL}UnityWebRequest requestHttp(string url, HttpEnum httpEnum, WWWForm form = null) {if (httpEnum == HttpEnum.GET) {Debug.Log($"url Get:{url}");return UnityWebRequest.Get(url);}else if (httpEnum == HttpEnum.POST) {Debug.Log($"url POST:{url}");return UnityWebRequest.Post(url, form);}else if (httpEnum == HttpEnum.DEL) {Debug.Log($"url Delete:{url}");return UnityWebRequest.Delete(url);}return null;
}}
2.需要引入json数据解析的插件:LitJson

3.POST请求:HttpHelper中添加
public void GetUserInfo(string userId, UnityAction<string, bool> webHttpBack) {StartCoroutine(ccGetUserInfo(userId, webHttpBack));
}IEnumerator ccGetUserInfo(string userId, UnityAction<string, bool> getInfoBack) {var url = Host.ApiHost + "/user/getUsrInfo";WWWForm form = new WWWForm();form.AddField("id", userId);using (UnityWebRequest www = requestHttp(url, HttpEnum.POST, form)) {DownloadHandler downloadHandler = new DownloadHandlerBuffer();www.downloadHandler = downloadHandler;yield return www.SendWebRequest();if (www.result != UnityWebRequest.Result.Success) {Debug.LogError(www.error);}else {Debug.Log($"Form upload complete GetCurSpaceInfo! {www.downloadHandler.text}");JsonData data = JsonMapper.ToObject(www.downloadHandler.text);if (data["data"] != null) {string json = data["data"].ToJson();if (getInfoBack != null) getInfoBack(json, false);}else {if (getInfoBack != null) getInfoBack(null, true);}}}
}
引用路径:
if (HttpHelper.Instance != null) {HttpHelper.Instance.GetUserInfo(PlayerData.Instance.PlayerId.ToString(), getUserInfo);
}public void getUserInfo(string json, bool isNoData)
{json = UtilsFunc.UnicodeToString(json);JsonData data = JsonMapper.ToObject(json);string headUrl = "";if (data.ContainsKey("headImgUrl") && data["headImgUrl"] != null){headUrl = (string)data["headImgUrl"];Debug.Log("头像信息2222222222" + headUrl);StartCoroutine(loadHeadImgUrl(headUrl));}
}
4.GET请求:HttpHelper中添加
public IEnumerator coGetMessBoardList(Action callback, long startDate, long endDate, int page = 1, int limit = 20) {//var url = NetManager.Instance.host + ":":"+port+"/game/space/getSpace";string url = Host.ApiHost + "/message/board/list" + $"?page={page}&limit={limit}&startDate={startDate}&endDate={endDate}&spaceId={PlayerData.Instance.SpaceId}";using (UnityWebRequest www = requestHttp(url, HttpEnum.GET)) {www.SetRequestHeader("Authorization", PlayerData.Instance.ltk);yield return www.SendWebRequest();if (www.result == UnityWebRequest.Result.Success) {string text = www.downloadHandler.text;JsonData data = JsonMapper.ToObject(www.downloadHandler.text);string json = data["data"].ToJson();var listObj = JsonMapper.ToObject<BoardVo>(json);MessageBoardModel.Instance.m_BoardModel.Remove(1); //临时删除1MessageBoardModel.Instance.m_BoardModel.Add(1, listObj);Debug.Log("获取留言列表信息" + text);}else {Debug.LogError(www.error);}}callback.Invoke();
}public void GetMessBoardList(Action callback, long startDate, long endDate, int page = 1, int limit = 20) {StartCoroutine(coGetMessBoardList(callback, startDate, endDate, page, limit));}
引用路径:
HttpHelper.Instance.GetMessBoardList(() =>
{MessageBoardModel.Instance.m_BoardModel.TryGetValue(1, out currentBoard); //这里1是临时的,因为现在留言板就一块if (currentBoard == null){Debug.LogError("OnEnter currentBoard == null");return;}OnRefresh();
}, current, oneMonthLater);
4.DEL请求:HttpHelper中添加
IEnumerator coGetShopUrl(string genUrl, Action<string> callback) {//获取商店链接Debug.Log($"{genUrl}");string url = $"https://api.qrserver.com/v1/create-qr-code/?size=150x150{genUrl}";using (UnityWebRequest www = requestHttp(url, HttpEnum.DEL)) {www.downloadHandler = new DownloadHandlerBuffer();www.SetRequestHeader("Authorization", PlayerData.Instance.ltk);yield return www.SendWebRequest();if (www.result == UnityWebRequest.Result.Success) {Debug.Log("商店链接:" + www.downloadHandler.text);string s = www.downloadHandler.text.Substring(www.downloadHandler.text.IndexOf("<img src=") + 12, www.downloadHandler.text.Length - (www.downloadHandler.text.IndexOf("<img src=") + 12));//截取src="" 内部的链接地址,不包括'//'string result = s.Substring(0, s.IndexOf("\""));callback.Invoke("https://" + result);}else {Debug.LogError(www.error);callback.Invoke(www.error);}}}public void GetShopUrl(string url, Action<string> callback) {StartCoroutine(coGetShopUrl(url, callback));}public void DeleteMessage(Action callback, int id) {StartCoroutine(coDeleteMessage(callback, id));}public IEnumerator coDeleteMessage(Action callback, int id) {string url = Host.ApiHost + "/message/board?id=" + id.ToString();using (UnityWebRequest www = requestHttp(url, HttpEnum.DEL)) {www.downloadHandler = new DownloadHandlerBuffer();www.SetRequestHeader("Authorization", PlayerData.Instance.ltk);yield return www.SendWebRequest();if (www.result == UnityWebRequest.Result.Success) {Debug.Log("删除留言信息" + www.downloadHandler.text);}else {Debug.LogError(www.error);}}callback.Invoke();}
引用路径:
HttpHelper.Instance.DeleteMessage(() =>{ToastPanel.Show("留言删除成功");currentBoard.records.Remove(delData);OnRefresh();}, delData.id);
相关文章:
Unity组件开发--短连接HTTP
1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…...
真正的强大,原来是不动声色的
当一个人走过了绝境,他就会发现,真正的强大,原来是不动声色的。 他会停止一切自证,不再解释,话越来越少,眼神越来越坚定。 他不再模棱两可,唯唯诺诺,而是敢于断然拒绝,…...
git 查看tag和创建tag以及上传tag命令
文章目录 git 查看tag和创建tag以及上传tag命令git tagtag操作常用命令 git 查看tag和创建tag以及上传tag命令 git tag 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。 Git 的 tag 功能是一个非常有用…...
代码随想录二刷 |二叉树 | 二叉搜索树的最小绝对差
代码随想录二刷 |二叉树 | 二叉搜索树的最小绝对差 题目描述解题思路 & 代码实现递归法迭代法 题目描述 530.二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例&#…...
【Linux】Linux 系统编程——tree 命令
文章目录 1. 命令概述2. 命令格式3. 常用选项4. 相关描述4.1 tree 命令安装 5. 参考示例5.1 创建树形目录5.2 使用 tree 命令查看树形目录 1. 命令概述 tree 命令用于在命令行界面以树状图形式显示目录及其子目录的内容。这个命令递归地列出所有子目录,并可选择显示…...
Android简单控件
1.文本显示 设置文本内容的两种方式: 在XML文件中通过属性 android:text 设置文本 <resources><string name"app_name">chapter03</string><string name"hello">你好,世界</string> </resources&…...
【Java 干货教程】Java实现分页的几种方式详解
一、前言 无论是自我学习中,还是在工作中,固然会遇到与前端搭配实现分页的功能,发现有几种方式,特此记录一下。 二、实现方式 2.1、分页功能直接交给前端实现 这种情况也是有的,(根据业务场景且仅仅只能用于数据量…...
关于Python里xlwings库对Excel表格的操作(三十一)
这篇小笔记主要记录如何【如何使用“Chart类”、“Api类"和“Axes函数”设置绘图区外框线型、颜色、粗细及填充颜色】。前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安…...
QML使用QCustomPlot笔记
这里在QML中使用QCustomPlot是定义一个继承自QQuickPaintedItem的类,它包含一个QCustomPlot对象,在paint函数中将这个对象转化为pixmap绘制到布局中显示。 在QML中使用QT的Widget控件也可以借鉴这个思路实现 顺便记录一下QCustomPlot的简单设置与使用。…...
【REST2SQL】06 GO 跨包接口重构代码
【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 对所有关系数据的操作都只有CRUD,采用Go 的接口interface{}重构代码…...
《NLP入门到精通》栏目导读
一、说明 栏目《NLP入门到精通》本着从简到难得台阶式学习过度。将自然语言处理得知识贯穿过来。本栏目得前导栏目是《深度学习》、《pytorch实践》,因此,读者需要一定得深度学习基础,才能过度到此栏目内容。 二、博客建设理念 本博客基地&am…...
C++学习笔记——类继承
目录 一、一个简单的基类 1.1封装性 1.2继承性 1.3虚函数 1.4多态性 二、基类 2.1一个简单的C基类的示例 2.2 Animal是一个基类。 三、继承 3.1概念 3.2is-a关系 3.3多态公有继承 3.4静态联编和动态联编 3.5访问控制 3.6ABC理念 一、一个简单的基类 C中的基类是一…...
ARCGIS PRO SDK 使用条件管理 Pro UI
ARCGIS PRO UI简单介绍以下: 第一步:在Config.daml中在</AddInfo>标签下加上条件<conditions>标签(必须添加的) <conditions><!-- 定义条件 ,此处定义了两个--Tab 另一个为 group><insert…...
Halcon经典的边缘检测算子Sobel/Laplace/Canny
Halcon经典的边缘检测算子 文章目录 Halcon经典的边缘检测算子1. Sobel算子2. Laplace 算子3. Canny 算子4. 总结 关于边缘检测,有许多经典的算子,各大图形处理库都有各自的边缘检测算子,这里简要介绍几种。 1. Sobel算子 Sobel算子结合了高…...
用单片机设计PLC电路图
自记: 见另一篇文章,MOS驱动差了一个充电电容,栅极电容充电会有问题; 光耦用的直插,但板子用的贴片,此文档仅供参考 基本列出了PCB板情况,基础元器件,部分连接,原理等…...
【设计模式-6】建造者模式的实现与框架中的应用
建造者模式又被成为生成器模式,是一种使用频率比较低,相对复杂的创建型模式,在很多源码框架中可以看到建造者的使用场景,稍后我们会在本文末尾展示几个框架的使用案例。 建造者模式所构造的对象通常是比较复杂而且庞大的&#x…...
PositiveSSL和Sectigo的多域名证书
首先,我们要知道PositiveSSL是Sectigo旗下的子品牌,提供多种类型的SSL数字证书,包括DV基础型的多域名SSL证书。Sectigo的SSL证书产品同样比较丰富,不仅有DV基础型多域名SSL证书,还有OV企业型以及EV增强型的多域名SSL证…...
Docker:docker exec命令简介
介绍 docker exec [OPTIONS] 容器名称 COMMAND [ARG...] OPTIONS说明: -d,以后台方式执行命令; -e,设置环境变量 -i,交互模式 -t,设置TTY -u,用户名或UID,例如myuser:myu…...
【大数据进阶第三阶段之Hive学习笔记】Hive的数据类型与数据操作
目录 1、Hive数据类型 1.1、基本数据类型 1.2、集合数据类型 1.3、类型转化 2、DDL数据定义 2.1、创建数据库 2.2、查询数据库 2.3删除数据库 2.4、创建表 2.4.1、内部表 2.4.2、外部表 2.4.3管理表与外部表的互相转换 2.5、分区表(partitionÿ…...
GPT2:Language Models are Unsupervised Multitask Learners
目录 一、背景与动机 二、卖点与创新 三、几个问题 四、具体是如何做的 1、更多、优质的数据,更大的模型 2、大数据量,大模型使得zero-shot成为可能 3、使用prompt做下游任务 五、一些资料 一、背景与动机 基于 Transformer 解码器的 GPT-1 证明…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
