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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/341592.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安防视频云平台/可视化监控云平台ARM版EasyCVR无法下载录像文件,如何解决?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。GB28181视频监控/AI智能大数据视频分析EasyCVR平台已经广泛应用在工地…

Google I/O大会:Android 13

3个体验升级的方向 以智能手机为场景核心、 扩大智能终端的应用边界以及实现多设备间更好地协同。具体到系统体验层&#xff0c;安卓13将支持图标颜色随主题更换、为不同应用设定使用的语言、新的媒体中心界面等等&#xff0c;同时谷歌也推出了自家的钱包应用&#xff08;Goog…

065:vue中将一维对象数组转换为二维对象数组

第065个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

如何将ArcGIS工程文件迁移到ArcGIS Pro内

当你刚接触ArcGIS Pro的时候&#xff0c;尝试新建一个工程文件会发现工程文件的后缀已经改变&#xff0c;那么以前在ArcGIS内辛苦制作的工程文件是否就不能在ArcGIS Pro内使用了&#xff0c;答案是否定的&#xff0c;对此Esri也给出了解决方案&#xff0c;这里为大家介绍一下迁…

yolov8 瑞芯微 RKNN 的 C++部署,部署工程难度小、模型推理速度快

之前写过两次yolov8目标检测部署&#xff0c;后续继续思考&#xff0c;针对部署还有优化空间&#xff0c;本示例的部署方式优化了部署难度&#xff0c;加快了模型推理速度&#xff08;略微增加了后处理的时耗&#xff09;。 特别说明&#xff1a;如有侵权告知删除&#xff0c;…

【数据库系统概论】期末复习3

系列文章 期末复习1 期末复习2 系列文章试述 SQL 语言的特点。什么是基本表&#xff1f;什么是视图&#xff1f;两者的区别和联系是什么&#xff1f;试述视图的优点。哪类视图是可以更新的&#xff1f;哪类视图是不可更新的&#xff1f;各举一例说明。连接查询嵌套查询数据更新…

WPF 布局

了解 WPF中所有布局如下&#xff0c;我们一一尝试实现&#xff0c;本文档主要以图形化的形式展示每个布局的功能。 布局&#xff1a; Border、 BulletDecorator、 Canvas、 DockPanel、 Expander、 Grid、 GridView、 GridSplitter、 GroupBox、 Panel、 ResizeGrip、 Separat…

Google的Ndk-Sample学习笔记之一(hello-jniCallback)

前言: 近段时间因为项目的需求,需要使用JNI,所以下载了Google的Ndk-Sample学习下,准备记录 下来,留给后期自己查看 问题点一:JNI_OnLoad方法必须返回JNI的版本 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {JNIEnv *env;memset(&g_ctx, 0, sizeof(g_…

Elasticsearch 索引文档时create、index、update的区别【学习记录】

本文基于elasticsearch7.3.0版本。 一、思维导图 elasticsearch中create、index、update都可以实现插入功能&#xff0c;但是实现原理并不相同。 二、验证index和create 由上面思维导图可以清晰的看出create、index的大致区别&#xff0c;下面我们来验证下思维导图中的场景&…

FineBI实战项目一(17):热门商品Top10分析开发

点击新建组件&#xff0c;创建热门商品Top10组件。 选择柱状图&#xff0c;拖拽cnt&#xff08;总数&#xff09;到横轴&#xff0c;拖拽goodName到纵轴。 选择排序规则。 修改横轴和纵轴的标签名称 切换到仪表板&#xff0c;拖拽组件到仪表板 效果如下&#xff1a;

【动态规划】 【字典树】C++算法:472 连接词

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 动态规划 字典树 LeetCode472 连接词 给你一个 不含重复 单词的字符串数组 words &#xff0c;请你找出并返回 words 中的所有 连接词 。 连接词 定义为&#xff1a;一个完全由给定数组中的至少两个较短单词&#xff08;不…

[C#]调用tesseact-ocr的traineddata模型进行ocr文字识别

【框架地址】 https://github.com/charlesw/tesseract 【算法介绍】 Tesseract OCR是一个开源的光学字符识别引擎&#xff0c;它可以将图像中的文字转换成可编辑和可搜索的文本格式。Tesseract由惠普实验室于1985年开始开发&#xff0c;并在2005年被Google收购后成为了开源项…