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.rhkb.cn/news/235490.html

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

相关文章

MySQL视图 索引 面试题

一. 视图 视图&#xff1a;一种虚拟存在的表&#xff0c;行和列的数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的&#xff0c;只保存了sql逻辑&#xff0c;不保存查询结果 视图语法 -- 创建 create view 视图名 as 查询语句;-- 使用 select * f…

Linux内核源码分析(强烈推荐收藏!)

前言&#xff1a;Linux内核是由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在1991年开始开发的。当时他为了得到一个可以运行UNIX操作系统的个人计算机&#xff0c;开始编写一个操作系统内核&#xff0c;并将其命名为Linux。随后&#xff0c;越来越多的开发者加入到项…

im6ull学习总结(三-4)freetype显示单个字体

矢量字体引入 使用点阵字库显示英文字母、汉字时&#xff0c;大小固定&#xff0c;如果放大缩小则会模糊甚至有锯齿出现&#xff0c;为了解决这个问题&#xff0c;引用矢量字体。 矢量字体形成分三步&#xff1a; 第1步 确定关键点&#xff0c; 第2步 使用数学曲线&#xff08…

正则表达式的语法

如果要想灵活的运用正则表达式&#xff0c;必须了解其中各种元素字符的功能&#xff0c;元字符从功能上大致分为&#xff1a; 限定符 选择匹配符 分组组合和反向引用符 特殊字符 字符匹配符 定位符 我们先说一下元字符的转义号 元字符(Metacharacter)-转义号 \\ \\ 符号…

【K8S 存储卷】K8S的存储卷+PV/PVC

目录 一、K8S的存储卷 1、概念&#xff1a; 2、挂载的方式&#xff1a; 2.1、emptyDir&#xff1a; 2.2、hostPath&#xff1a; 2.3、NFS共享存储&#xff1a; 二、PV和PVC&#xff1a; 1、概念 2、请求方式 3、静态请求流程图&#xff1a; 4、PV和PVC的生命周期 5、…

【分布式】分布式链路跟踪技术

为什么需要分布式链路追踪 提到分布式链路追踪&#xff0c;我们要先提到微服务。相信很多人都接触过微服务。微服务是一种开发软件的架构和组织方法&#xff0c;它侧重将服务解耦&#xff0c;服务之间通过API通信。使应用程序更易于扩展和更快地开发&#xff0c;从而加速新功能…

PiflowX-MysqlCdc组件

MysqlCdc组件 组件说明 MySQL CDC连接器允许从MySQL数据库读取快照数据和增量数据。 计算引擎 flink 组件分组 cdc 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子hostnameHostname“”无是MySQL…

机器学习周刊 第4期:动手实战人工智能、计算机科学热门论文、免费的基于ChatGPT API的安卓端语音助手、每日数学、检索增强 (RAG) 生成技术综述

LLM开发者必读论文&#xff1a;检索增强&#xff08;RAG&#xff09;生成技术综述&#xff01; 目录&#xff1a; 1、动手实战人工智能 Hands-on Al2、huggingface的NLP、深度强化学习、语音课3、Awesome Jupyter4、计算机科学热门论文5、LLM开发者必读论文:检索增强 (RAG) 生…

工业智能网关如何保障数据通信安全

工业智能网关是组成工业物联网的重要设备&#xff0c;不仅可以起到数据交换、通信、边缘计算的功能&#xff0c;还可以发挥数据安全保障功能&#xff0c;保障工业物联网稳定、可持续。本篇就为大家简单介绍一下工业智能网关增强和确保数据通信安全的几种措施&#xff1a; 1、软…

UE4 4.21-4.27使用编辑器蓝图EditorBlueprint方法

在UE4 4.21中&#xff0c;编辑器蓝图&#xff08;Editor Blueprint&#xff09;是一个强大的工具&#xff0c;允许开发者扩展和自定义Unreal编辑器的功能。通过编辑器蓝图&#xff0c;我们可以创建自定义的工具和功能&#xff0c;以优化开发流程。 本教程将指导您如何在UE4 4.…

如何顺滑使用华为云编译构建平台?

这两年平台构建服务需求越来越大&#xff0c;却一直苦于找不到一些指南&#xff0c; 这里特意写了一篇&#xff0c; 对在学习代码阶段和新手程序员朋友也蛮友好&#xff0c; 配置真的也不难&#xff0c; 也特别适合想尝试从0到1做个APP的朋友了。 以华为云的CodeArts Build为例…

mysql服务多实例运行

1、官网下载mysql安装包 https://downloads.mysql.com/archives/community/ 2、解压安装包 tar -zxvf mysql-8.1.0-linux-glibc2.28-aarch64.tar.xz -C /usr/localmv /usr/local/mysql-8.1.0-linux-glibc2.28-aarch64 /usr/local/mysql 3、创建mysql用户组 groupadd…

Js--数组(三)

1.什么是数组&#xff1f; 数组&#xff1a;(Array)是一种可以按顺序保存数据的数据类型 2.为什么要数组&#xff1f; 思考&#xff1a;如果我想保存一个班里所有同学的姓名怎么办&#xff1f; 场景&#xff1a;如果有多个数据可以用数组保存起来&#xff0c;然后放到一个变量…

Live800:客户服务中的AI辅助培训与员工成长

随着科技的发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经广泛应用于各个行业&#xff0c;其中包括客户服务领域。以下是关于如何运用AI技术辅助客服人员进行培训和学习&#xff0c;提高员工的专业素质和服务能力的详细探讨。 一、AI在客户服务中的应用 AI技术在…

安卓版本与鸿蒙将不再兼容,鸿蒙工程师究竟有多抢手?

年薪最高160万&#xff01; 鸿蒙工程师究竟有多抢手&#xff1f; 套壳安卓”的质疑言犹在耳&#xff0c;如今华为正在计划将鸿蒙OS与安卓完全脱离。 此前&#xff0c;鸿蒙OS为了迅速扩大用户规模&#xff0c;采取了兼容安卓的策略。而如今&#xff0c;已有数亿设备搭载的鸿蒙…

短视频发展电商,哪个平台更占优势,新手如何选择?

我是电商珠珠 众所周知&#xff0c;自19年抖音开始发展短视频时&#xff0c;短短两年的时间&#xff0c;就将电商圈拉高了一个度。 20年是抖音发展的鼎盛时期&#xff0c;也是很多新手容易财富自由的时期&#xff0c;平台的各项红利都纷纷向商家靠拢。 如今已经发展了四年的…

Ubuntu22.04开机左上角下划线闪烁不开机

按下CtrlAltF2&#xff0c;打开TTY系统&#xff0c;然后通过用户名和密码登录&#xff0c;随后使用 sudo apt --fix-broken install 根据提示排除错误信息&#xff0c;然后使用apt安装lightdm安装就行。 tips:当使用EasyConnect的时候&#xff0c;你可能参考了下面这篇文章知…

中国京津冀国际光伏展

中国京津冀国际光伏展是一个为光伏行业搭建交流合作平台的国际展览会。该展览会主要展示光伏发电技术、光伏产品、光伏材料、光伏设备等相关领域的最新产品和技术。展会吸引了来自国内外光伏行业的企业、专家和观众参与&#xff0c;为他们提供了一个了解行业最新动态、展示自身…

Kafka之集群搭建

1. 为什么要使用kafka集群 单机服务下&#xff0c;Kafka已经具备了非常高的性能。TPS能够达到百万级别。但是&#xff0c;在实际工作中使用时&#xff0c;单机搭建的Kafka会有很大的局限性。 ​ 消息太多&#xff0c;需要分开保存。Kafka是面向海量消息设计的&#xff0c;一个T…

Linux 简述

文章目录 1. 背景2. Linux 环境搭建2.1 环境搭建方式2.2 使用云服务器2.3 使用终端软件连接到 Linux 3. Linux 常用命令3.1 ls3.2 cd3.3 pwd3.4 touch3.5 cat3.6 echo3.7 vim3.8 mkdir3.9 rm3.10 mv3.11 cp3.12 grep3.13 ps3.14 netstat 4. 搭建 Java 部署环境4.1 jdk4.2 tomca…