From 98187f2cedbf21ee3b972bb2cb2d357cee92654b Mon Sep 17 00:00:00 2001 From: MuHua-123 <136542559+MuHua-123@users.noreply.github.com> Date: Thu, 16 Jan 2025 17:58:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleExecute/ExecuteWebRequest.cs} | 33 +++++++++-------- .../ModuleExecute/ExecuteWebRequest.cs.meta} | 2 +- .../ModuleCore/ModuleExecute/ModuleExecute.cs | 2 +- Assets/ModuleFixed/ModuleFixed.cs | 2 +- Assets/ModuleSingle.meta | 8 +++++ Assets/ModuleTools/JsonTool.cs | 35 +++++++++++++++++++ Assets/ModuleTools/JsonTool.cs.meta | 11 ++++++ Assets/ModuleTools/ModuleTool/ModuleSingle.cs | 10 +++--- 8 files changed, 82 insertions(+), 21 deletions(-) rename Assets/{ModuleTools/WebRequest.cs => ModuleCore/ModuleExecute/ExecuteWebRequest.cs} (92%) rename Assets/{ModuleTools/WebRequest.cs.meta => ModuleCore/ModuleExecute/ExecuteWebRequest.cs.meta} (83%) create mode 100644 Assets/ModuleSingle.meta create mode 100644 Assets/ModuleTools/JsonTool.cs create mode 100644 Assets/ModuleTools/JsonTool.cs.meta diff --git a/Assets/ModuleTools/WebRequest.cs b/Assets/ModuleCore/ModuleExecute/ExecuteWebRequest.cs similarity index 92% rename from Assets/ModuleTools/WebRequest.cs rename to Assets/ModuleCore/ModuleExecute/ExecuteWebRequest.cs index cedc848..7d1a791 100644 --- a/Assets/ModuleTools/WebRequest.cs +++ b/Assets/ModuleCore/ModuleExecute/ExecuteWebRequest.cs @@ -7,19 +7,14 @@ using System.Runtime.CompilerServices; using System.Threading.Tasks; /// -/// 网络请求工具 +/// Web请求执行模块 /// -public static class WebRequest { - public static TaskAwaiter GetAwaiter(this UnityWebRequestAsyncOperation op) { - var tcs = new TaskCompletionSource(); - op.completed += (obj) => { tcs.SetResult(null); }; - return tcs.Task.GetAwaiter(); - } +public class ExecuteWebRequest : ModuleExecute { /// 发送请求 - public static void Send(DataRequest request) { + public void Execute(DataRequest request) { if (request.RequestType == WebRequestType.GET) { Get(request); } - if (request.RequestType == WebRequestType.POSTFORM) { PostForm(request); } - if (request.RequestType == WebRequestType.POSTJSON) { PostJson(request); } + if (request.RequestType == WebRequestType.PostForm) { PostForm(request); } + if (request.RequestType == WebRequestType.PostJson) { PostJson(request); } if (request.RequestType == WebRequestType.Texture) { Texture(request); } } public static async void Get(DataRequest request) { @@ -63,15 +58,25 @@ public static class WebRequest { } } /// +/// Web请求执行模块工具 +/// +public static class ExecuteWebRequestTool { + public static TaskAwaiter GetAwaiter(this UnityWebRequestAsyncOperation op) { + var tcs = new TaskCompletionSource(); + op.completed += (obj) => { tcs.SetResult(null); }; + return tcs.Task.GetAwaiter(); + } +} +/// /// Web请求类型 /// public enum WebRequestType { /// GET GET = 0, /// POST 表单 - POSTFORM = 1, + PostForm = 1, /// POST Json - POSTJSON = 2, + PostJson = 2, /// GET 获取图片 Texture = 3 } @@ -136,14 +141,14 @@ public class DataRequestPost : DataRequest { this.url = url; this.json = json; this.OnCallback = OnCallback; - type = WebRequestType.POSTJSON; + type = WebRequestType.PostJson; } /// Web Post请求 提交WWWForm数据 public DataRequestPost(string url, WWWForm form, Action OnCallback = null) { this.url = url; this.form = form; this.OnCallback = OnCallback; - type = WebRequestType.POSTFORM; + type = WebRequestType.PostForm; } public override void RequestResultHandle(bool isDone, DownloadHandler downloadHandler) { diff --git a/Assets/ModuleTools/WebRequest.cs.meta b/Assets/ModuleCore/ModuleExecute/ExecuteWebRequest.cs.meta similarity index 83% rename from Assets/ModuleTools/WebRequest.cs.meta rename to Assets/ModuleCore/ModuleExecute/ExecuteWebRequest.cs.meta index 1e9fe05..8656657 100644 --- a/Assets/ModuleTools/WebRequest.cs.meta +++ b/Assets/ModuleCore/ModuleExecute/ExecuteWebRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fdd231128f69bd54a915b218d734fef6 +guid: 031fdf250828c30419ed1a945eb538f8 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ModuleCore/ModuleExecute/ModuleExecute.cs b/Assets/ModuleCore/ModuleExecute/ModuleExecute.cs index 3aca905..a32bba9 100644 --- a/Assets/ModuleCore/ModuleExecute/ModuleExecute.cs +++ b/Assets/ModuleCore/ModuleExecute/ModuleExecute.cs @@ -7,5 +7,5 @@ using UnityEngine; /// public interface ModuleExecute { /// 执行 - public void Compute(Data data); + public void Execute(Data data); } diff --git a/Assets/ModuleFixed/ModuleFixed.cs b/Assets/ModuleFixed/ModuleFixed.cs index 9eec4eb..d2c0ec1 100644 --- a/Assets/ModuleFixed/ModuleFixed.cs +++ b/Assets/ModuleFixed/ModuleFixed.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using UnityEngine; /// -/// 固定数据物体模块 +/// 场景中的固定模块 /// public abstract class ModuleFixed : MonoBehaviour { /// 核心模块 diff --git a/Assets/ModuleSingle.meta b/Assets/ModuleSingle.meta new file mode 100644 index 0000000..85ed934 --- /dev/null +++ b/Assets/ModuleSingle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fcb15023389a9c141b1b07fe53f06e5c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleTools/JsonTool.cs b/Assets/ModuleTools/JsonTool.cs new file mode 100644 index 0000000..db9b90e --- /dev/null +++ b/Assets/ModuleTools/JsonTool.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +/// json解析与保存 +public static class JsonTool { + /// 内部包装类 + private class Pack { public T data; } + /// 把对象转换为Json字符串 + /// 对象 + public static string ToJson(T obj) { + if (obj == null) return "null"; + if (obj.GetType().GetInterface("IList") != null) { + Pack pack = new Pack(); + pack.data = obj; + string json = JsonUtility.ToJson(pack); + return json.Substring(8, json.Length - 9); + } + return JsonUtility.ToJson(obj); + } + /// 解析Json + /// 类型 + /// Json字符串 + public static T FromJson(string json) { + if (json == "null" && typeof(T).IsClass) return default(T); + if (typeof(T).GetInterface("IList") != null) { + json = "{\"data\":{data}}".Replace("{data}", json); + Pack Pack = JsonUtility.FromJson>(json); + return Pack.data; + } + return JsonUtility.FromJson(json); + } +} diff --git a/Assets/ModuleTools/JsonTool.cs.meta b/Assets/ModuleTools/JsonTool.cs.meta new file mode 100644 index 0000000..3f21419 --- /dev/null +++ b/Assets/ModuleTools/JsonTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 007e3acdca87e1b49b38f504938206cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleTools/ModuleTool/ModuleSingle.cs b/Assets/ModuleTools/ModuleTool/ModuleSingle.cs index 28d6eec..028f176 100644 --- a/Assets/ModuleTools/ModuleTool/ModuleSingle.cs +++ b/Assets/ModuleTools/ModuleTool/ModuleSingle.cs @@ -6,14 +6,16 @@ using UnityEngine; /// /// 单例模块 /// -public abstract class ModuleSingle : MonoBehaviour { +public abstract class ModuleSingle : MonoBehaviour where T : ModuleSingle { /// 模块单例 - public static ModuleSingle I => instance; + public static T I => instance; /// 模块单例 - protected static ModuleSingle instance; + protected static T instance; + /// 核心模块 + protected virtual ModuleCore ModuleCore => ModuleCore.I; /// 初始化 protected virtual void Awake() { if (instance != null) { Destroy(instance.gameObject); } - instance = this; + instance = (T)this; } }