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 证明…...
微创新与稳定性的权衡
之前做过一个项目,业务最高峰CPU使用率也才50%,是一个IO密集型的应用。里面涉及一些业务编排,所以为了提高CPU使用率,我有两个方案:一个是简单的梳理将任务可并行的采用并行流、额外线程池等方式做并行;另外…...
对回调函数的各种讲解说明
有没有跟我师弟一样的童靴~,学习和使用ROS节点时,对其中的callback函数一直摸不着头脑的,以下这么多回调函数的讲解,挨个看,你总会懂的O.o 回调函数怎么调用,如何定义回调函数: 回调函数怎么调用,如何定义…...
Java多线程:创建多线程的三种方式
在Java中,有三种方式创建多线程,继承类Thread,继承接口Runnable,继承接口Callable。其中Thread和Runnable需要重写方法run,方法run没有返回值;Callable需要重写方法call,方法call可以返回值。 …...
Unity中打印信息的两种方式
不继承MonoBehaviour的普通C#类中打印信息: 使用Debug类的方法: Unity提供了Debug类,其中包含了一些用于打印信息的静态方法。以下是常用的几种方法: Debug.Log(message):打印普通信息。Debug.LogWarning(message)&a…...
给定n个字符串s[1...n], 求有多少个数对(i, j), 满足i < j 且 s[i] + s[j] == s[j] + s[i]?
题目 思路: 对于字符串a,b, (a.size() < b.size()), 考虑对字符串b满足什么条件: 由1、3可知a是b的前后缀,由2知b有一个周期是3,即a.size(),所以b是用多个a拼接而成的,有因为a是b的前后缀&…...
Linux磁盘空间与文件大小查看命令详解
1. 查看磁盘空间大小 在Linux系统中,有多个命令可以用来查看磁盘空间的使用情况。最常用的命令是df(disk free)。 df -hdf命令的 -h 选项以人类可读的方式显示磁盘空间,该命令将显示文件系统的使用情况、剩余空间等信息。 2. 查看…...
网络通信过程的一些基础问题
客户端A在和服务器进行TCP/IP通信时,发送和接收数据使用的是同一个端口吗? 这个问题可以这样来思考:在客户端A与服务器B建立连接时,A需要指定一个端口a向服务器发送数据。当服务器接收到A的报文时,从报文头部解析出A的…...
STL——stack容器和queue容器详解
目录 💡stack 💡基本概念 常用接口 💡queue 💡基本概念 💡常用接口 💡stack 💡基本概念 栈(stack):一种特殊的线性表,其只允许在固定的一端…...
django websocket实现聊天室功能
注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django3.2.4 channels3.0.3 Django3.2.* channels3.0.2 Django4.2 channles3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是w…...
软件测评中心▏性能测试之压力测试、负载测试的区别和联系简析
在如今的信息时代,软件已经成为人们日常工作和生活不可或缺的一部分。然而,随着软件的发展和应用范围的不断扩大,软件性能的优劣也成为了影响用户使用体验的重要因素。 软件性能测试即对软件在不同条件下的性能进行评估和验证的过程。通过模…...
网站前端开发/国际新闻稿件
strcpy_s 和 strcat_s的用法 strcpy_s是系统的安全函数,微软在2005后建议用一系统所谓安全的函数,这中 间就有strcpy_s取代了strcpy,原来strcpy函数,就象gets函数一样,它没有方法 来保证有效的缓冲区尺寸,所…...
做私人网站/友情链接推广平台
测试时出现的情况。操作系统:Red Hat ES 5.3(32)MySQL Version:MySQL 5.1.36编译选项:./configure --prefix/usr/local/mysql-5.1.36 --without-comment --without-debug --with-ssl --with-charsetgbk --with-extra-charsetsgb2312,utf8在编…...
东营网站推广/怎样做网络推广挣钱
在使用Windows系统的电脑时,有时候C盘的根目录下会莫名出现一个msdia80.dll文件,很多人感觉很变扭但又不敢轻易删除,当然这不能随意删除,其实msdia80.dll文件是在安装了 Microsoft Visual C 2005 可再发行组件时被错误安装在其他驱…...
公司网站不用了如何注销/常州谷歌优化
源地址:http://database.51cto.com/art/200903/113314.htm 摘要:数据库厂商微软和甲骨文是在2008年开始重视云数据库。分析师们预计,在2009年数据库厂商会把更多的数据库功能增加到云中。2008年只是云计算开始步入数据库市场。 数据库厂商微软…...
邵阳县做网站/网站建站推广
先来讲一下需求 我们做项目的时候,最开始功能菜单都是从后端获取的,开发完毕之后,发现可以越权访问没有的路由,其操作是, 登陆高权限的账号,进入功能页,查询的数据,复制当前路由&am…...
网站空间可以自己做服务器/关键词挖掘排名
编译过程,很曲折,满脸辛酸泪啊……准备工作 1、要安装cygwin,这个东西装起来很麻烦,我是在cygwin官网上下载的,perl和python这两项必须装,别的default就行,不过我是都安装的,因为以前…...