From 14f74b229c9a354ebe35c9375710cf7dfc92d39a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=93=AE?= <834207172@qq.com> Date: Wed, 24 Sep 2025 14:28:10 +0800 Subject: [PATCH] 1 --- .../Tool/WebRequest/WebRequestSystem.cs | 318 ++++++++++++------ Assets/00.StaryEvo/package.json | 2 +- .../Editor/Script/CreatPointCloudEntity.cs | 52 ++- Assets/11.PointCloudTools/package.json | 2 +- 4 files changed, 255 insertions(+), 119 deletions(-) diff --git a/Assets/00.StaryEvo/Runtime/Tool/WebRequest/WebRequestSystem.cs b/Assets/00.StaryEvo/Runtime/Tool/WebRequest/WebRequestSystem.cs index 0923ed1..49c08c7 100644 --- a/Assets/00.StaryEvo/Runtime/Tool/WebRequest/WebRequestSystem.cs +++ b/Assets/00.StaryEvo/Runtime/Tool/WebRequest/WebRequestSystem.cs @@ -10,6 +10,8 @@ using UnityEngine.Networking; namespace Stary.Evo { + + public static class WebRequestSystem { private static string authorization; @@ -30,11 +32,14 @@ namespace Stary.Evo string postData = JsonConvert.SerializeObject(data); try { -#if UNITY_2021_3_OR_NEWER - using UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData); -#else - using UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData); -#endif + using UnityWebRequest webRequest = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST); + + webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer(); + if (string.IsNullOrEmpty(postData)) + { + Debug.LogError("WebRequestSystem.Login postData is null"); + return false; + } byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData); webRequest.uploadHandler = new UploadHandlerRaw(postBytes); @@ -85,7 +90,10 @@ namespace Stary.Evo authorization = EditorPrefs.GetString("Authorization"); try { - using UnityWebRequest webRequest = UnityWebRequest.Get($"{url}?token={authorization}"); + + using UnityWebRequest webRequest = + new UnityWebRequest($"{url}/{authorization}", UnityWebRequest.kHttpVerbGET); + //using UnityWebRequest webRequest = UnityWebRequest.Get($"{url}?token={authorization}"); webRequest.downloadHandler = new DownloadHandlerBuffer(); webRequest.timeout = 10; await webRequest.SendWebRequest(); @@ -146,6 +154,7 @@ namespace Stary.Evo try { using UnityWebRequest webRequest = UnityWebRequest.Post(url, form); + webRequest.SetRequestHeader("Authorization", authorization); webRequest.disposeUploadHandlerOnDispose = true; webRequest.disposeDownloadHandlerOnDispose = true; @@ -256,8 +265,77 @@ namespace Stary.Evo } } + /// + /// GET请求数据 + /// 携带数据:否 + /// 幂等性:是 + /// + /// 请求数据的URL地址 + /// 请求数据的路径 + /// + public static async Task Get(string url, string path) + { + if (!GetTokenState()) + { + Debug.LogError("用户未登录,请先登录"); + return new ResultMessageEntity() + { + code = 2001, + message = "用户未登录,请先登录" + }; + } + + try + { + string fullUrl = url.TrimEnd('/') + "/" + path.TrimStart('/'); + using UnityWebRequest webRequest = new UnityWebRequest(fullUrl, UnityWebRequest.kHttpVerbGET); + webRequest.downloadHandler = new DownloadHandlerBuffer(); + if (authorization != null) + webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范 + + webRequest.timeout = 20; + await webRequest.SendWebRequest(); + + // 增强错误处理 + if (webRequest.result != UnityWebRequest.Result.Success) + { + var errorMsg = $"HTTP {webRequest.responseCode}\n" + + $"URL: {url}\n" + + $"Error: {webRequest.error}\n" + + $"Response: {webRequest.downloadHandler.text}"; + + Debug.LogError(errorMsg); + return new ResultMessageEntity() + { + code = 5001, + message = errorMsg + }; + } + + ResultMessageEntity resultMessageEntity = + JsonConvert.DeserializeObject(webRequest.downloadHandler.text); + if (resultMessageEntity.code != 200) + { + Debug.LogError(resultMessageEntity.message); + } + + return resultMessageEntity; + } + catch (Exception e) + { + Debug.LogError($"UnityEvo:WebRequestSystem.Get" + e.Message); + return new ResultMessageEntity() + { + code = 5001, + message = e.Message + }; + } + } + /// /// POST请求数据 + /// 携带数据:是 + /// 幂等性:否 /// /// 获取Token值的服务URL地址(很重要) /// 传入请求的参数,此处参数为JOSN格式 @@ -276,44 +354,44 @@ namespace Stary.Evo try { -#if UNITY_2021_3_OR_NEWER - using (UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData)) //第二种写法此行注释 -#else - using (UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData)) //第二种写法此行注释 -#endif + using UnityWebRequest webRequest = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST); +// #if UNITY_2021_3_OR_NEWER +// using (UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData)) //第二种写法此行注释 +// #else +// using (UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData)) //第二种写法此行注释 +// #endif + webRequest.downloadHandler = new DownloadHandlerBuffer(); + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData); + webRequest.uploadHandler = new UploadHandlerRaw(postBytes); + webRequest.SetRequestHeader("Content-Type", "application/json"); + webRequest.SetRequestHeader("Authorization", authorization); + webRequest.disposeUploadHandlerOnDispose = true; + webRequest.disposeDownloadHandlerOnDispose = true; + webRequest.disposeCertificateHandlerOnDispose = true; + webRequest.timeout = 20; + await webRequest.SendWebRequest(); + webRequest.uploadHandler?.Dispose(); + // 更新错误检查方式 + if (webRequest.result == UnityWebRequest.Result.ConnectionError || + webRequest.result == UnityWebRequest.Result.ProtocolError) { - byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData); - webRequest.uploadHandler = new UploadHandlerRaw(postBytes); - webRequest.SetRequestHeader("Content-Type", "application/json"); - webRequest.SetRequestHeader("Authorization", authorization); - webRequest.disposeUploadHandlerOnDispose = true; - webRequest.disposeDownloadHandlerOnDispose = true; - webRequest.disposeCertificateHandlerOnDispose = true; - webRequest.timeout = 20; - await webRequest.SendWebRequest(); - webRequest.uploadHandler?.Dispose(); - // 更新错误检查方式 - if (webRequest.result == UnityWebRequest.Result.ConnectionError || - webRequest.result == UnityWebRequest.Result.ProtocolError) + Debug.LogError(webRequest.error); + return new ResultMessageEntity() { - Debug.LogError(webRequest.error); - return new ResultMessageEntity() - { - code = 5001, - message = webRequest.error - }; + code = 5001, + message = webRequest.error + }; + } + else + { + ResultMessageEntity resultMessageEntity = + JsonConvert.DeserializeObject(webRequest.downloadHandler.text); + if (resultMessageEntity.code != 200) + { + Debug.LogError(resultMessageEntity.message); } - else - { - ResultMessageEntity resultMessageEntity = - JsonConvert.DeserializeObject(webRequest.downloadHandler.text); - if (resultMessageEntity.code != 200) - { - Debug.LogError(resultMessageEntity.message); - } - return resultMessageEntity; - } + return resultMessageEntity; } } catch (Exception e) @@ -328,78 +406,16 @@ namespace Stary.Evo } } - /// - /// GET请求数据 - /// - /// 请求数据的URL地址 - /// 请求数据的路径 - /// - public static async Task Get(string url,string path) - { - if (!GetTokenState()) - { - Debug.LogError("用户未登录,请先登录"); - return new ResultMessageEntity() - { - code = 2001, - message = "用户未登录,请先登录" - }; - } - - try - { - string fullUrl = url.TrimEnd('/') + "/" + path.TrimStart('/'); - using UnityWebRequest webRequest = UnityWebRequest.Get(fullUrl); - webRequest.downloadHandler = new DownloadHandlerBuffer(); - if (authorization != null) - webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范 - - webRequest.timeout = 20; - await webRequest.SendWebRequest(); - - // 增强错误处理 - if (webRequest.result != UnityWebRequest.Result.Success) - { - var errorMsg = $"HTTP {webRequest.responseCode}\n" + - $"URL: {url}\n" + - $"Error: {webRequest.error}\n" + - $"Response: {webRequest.downloadHandler.text}"; - - Debug.LogError(errorMsg); - return new ResultMessageEntity() - { - code = 5001, - message = errorMsg - }; - } - - ResultMessageEntity resultMessageEntity = - JsonConvert.DeserializeObject(webRequest.downloadHandler.text); - if (resultMessageEntity.code != 200) - { - Debug.LogError(resultMessageEntity.message); - } - - return resultMessageEntity; - } - catch (Exception e) - { - Debug.LogError($"UnityEvo:WebRequestSystem.Get" + e.Message); - return new ResultMessageEntity() - { - code = 5001, - message = e.Message - }; - } - } /// /// Delete请求数据 + /// 携带数据:否 + /// 幂等性:是 /// /// 请求数据的URL地址 /// 请求数据的路径 /// - public static async Task Delete(string url,string path) + public static async Task Delete(string url, string path) { if (!GetTokenState()) { @@ -415,7 +431,7 @@ namespace Stary.Evo { // 修复URL拼接 string fullUrl = url.TrimEnd('/') + "/" + path.TrimStart('/'); - using UnityWebRequest webRequest = UnityWebRequest.Delete(fullUrl); + using UnityWebRequest webRequest = new UnityWebRequest(fullUrl, UnityWebRequest.kHttpVerbDELETE); webRequest.downloadHandler = new DownloadHandlerBuffer(); if (authorization != null) webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范 @@ -438,6 +454,7 @@ namespace Stary.Evo message = errorMsg }; } + // 修复空响应处理 string responseText = webRequest.downloadHandler.text; if (string.IsNullOrEmpty(responseText)) @@ -448,6 +465,7 @@ namespace Stary.Evo message = "删除成功" }; } + ResultMessageEntity resultMessageEntity = JsonConvert.DeserializeObject(webRequest.downloadHandler.text); if (resultMessageEntity.code != 200) @@ -467,6 +485,94 @@ namespace Stary.Evo }; } } + + /// + /// PUT请求数据 + /// 携带数据:是 + /// 幂等性:是 + /// + /// 请求数据的URL地址 + /// 请求数据的路径 + /// 要更新的数据(JSON格式) + /// + public static async Task Put(string url, string putData) + { + if (!GetTokenState()) + { + Debug.LogError("用户未登录,请先登录"); + return new ResultMessageEntity() + { + code = 2001, + message = "用户未登录,请先登录" + }; + } + + try + { + // 修复URL拼接 + + using UnityWebRequest webRequest = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPUT); + + // 设置上传处理器 + byte[] putBytes = System.Text.Encoding.UTF8.GetBytes(putData); + webRequest.uploadHandler = new UploadHandlerRaw(putBytes); + webRequest.downloadHandler = new DownloadHandlerBuffer(); + + // 设置请求头 + webRequest.SetRequestHeader("Content-Type", "application/json"); + if (authorization != null) + webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范 + + webRequest.timeout = 20; + await webRequest.SendWebRequest(); + + // 增强错误处理 + if (webRequest.result != UnityWebRequest.Result.Success) + { + var errorMsg = $"HTTP {webRequest.responseCode}\n" + + $"URL: {url}\n" + + $"Error: {webRequest.error}\n" + + $"Response: {webRequest.downloadHandler.text}"; + + Debug.LogError(errorMsg); + return new ResultMessageEntity() + { + code = 5001, + message = errorMsg + }; + } + + // 处理空响应 + string responseText = webRequest.downloadHandler.text; + if (string.IsNullOrEmpty(responseText)) + { + return new ResultMessageEntity() + { + code = 200, + message = "更新成功" + }; + } + + ResultMessageEntity resultMessageEntity = + JsonConvert.DeserializeObject(webRequest.downloadHandler.text); + if (resultMessageEntity.code != 200) + { + Debug.LogError(resultMessageEntity.message); + } + + return resultMessageEntity; + } + catch (Exception e) + { + Debug.LogError($"UnityEvo:WebRequestSystem.Put" + e.Message); + return new ResultMessageEntity() + { + code = 5001, + message = e.Message + }; + } + } + public static bool GetTokenState() { if (string.IsNullOrEmpty(authorization)) diff --git a/Assets/00.StaryEvo/package.json b/Assets/00.StaryEvo/package.json index 121496c..44e16f6 100644 --- a/Assets/00.StaryEvo/package.json +++ b/Assets/00.StaryEvo/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.main", - "version": "2.0.6", + "version": "2.0.7", "displayName": "00.StaryEvo", "description": "This is an Framework package(后台服务器版本,端口9527)", "unity": "2021.3", diff --git a/Assets/11.PointCloudTools/Editor/Script/CreatPointCloudEntity.cs b/Assets/11.PointCloudTools/Editor/Script/CreatPointCloudEntity.cs index 2ab10b5..121bad0 100644 --- a/Assets/11.PointCloudTools/Editor/Script/CreatPointCloudEntity.cs +++ b/Assets/11.PointCloudTools/Editor/Script/CreatPointCloudEntity.cs @@ -12,20 +12,50 @@ namespace Stary.Evo.Editor public class CreatPointCloudEntity { private CreatPointCloudWindow window; - [HideInInspector] - public string id; - [HorizontalGroup("identifier")] [ReadOnly] public string sceneName; - [HorizontalGroup("identifier")][ReadOnly] + [HideInInspector] public string id; + + [HorizontalGroup("identifier")] [ReadOnly] + public string sceneName; + + [HorizontalGroup("identifier")] [ReadOnly] public string identifier; - [ReadOnly] - public string sceneDesc; - [HorizontalGroup("button")] - public bool isActive; + + [ReadOnly] public string sceneDesc; + [HorizontalGroup("button")] public bool isActive; public CreatPointCloudEntity(CreatPointCloudWindow window) { this.window = window; } + + [HorizontalGroup("button")] + [Button("", Icon = SdfIconType.ArrowUpCircleFill, IconAlignment = IconAlignment.RightEdge)] + public async void UpdatePointCloud() + { + string ip = EditorPrefs.GetString("ip"); + if (string.IsNullOrEmpty(ip)) + { + EditorUtility.DisplayDialog("提示", "ip不能为空", "确定"); + return; + } + + var scene = new + { + id = id, + sceneName = sceneName, + sceneDesc = sceneDesc, + isActive = isActive, + }; + string body = JsonConvert.SerializeObject(scene); + ResultMessageEntity entity = await WebRequestSystem.Put($"{ip}/SceneWork/UpdateScene", body); + if (entity.code == 200) + { + + EditorUtility.DisplayDialog("提示", $"更新成功{scene}", "确定"); + } + } + + [HorizontalGroup("button")] [Button("", Icon = SdfIconType.XCircle, IconAlignment = IconAlignment.RightEdge)] public async void DeletePointCloud() @@ -36,13 +66,13 @@ namespace Stary.Evo.Editor EditorUtility.DisplayDialog("提示", "ip不能为空", "确定"); return; } - ResultMessageEntity entity = await WebRequestSystem.Delete(ip,$"/SceneWork/DeleteScenebyId/{id}"); - if (entity.code ==200) + + ResultMessageEntity entity = await WebRequestSystem.Delete(ip, $"/SceneWork/DeleteScenebyId/{id}"); + if (entity.code == 200) { window.SceneWorkEntities.Remove(this); EditorUtility.DisplayDialog("提示", "删除成功", "确定"); } } - } } \ No newline at end of file diff --git a/Assets/11.PointCloudTools/package.json b/Assets/11.PointCloudTools/package.json index 3f0dab0..b93f722 100644 --- a/Assets/11.PointCloudTools/package.json +++ b/Assets/11.PointCloudTools/package.json @@ -1,6 +1,6 @@ { "name": "com.pointcloud", - "version": "1.0.2", + "version": "1.0.3", "displayName": "11.PointCloudTools", "description": "点云开发工具", "unity": "2021.3",