From 42a5e31557bba0ad08416960cd7ddf723af4055e Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Tue, 24 Dec 2024 23:35:32 +0800 Subject: [PATCH] =?UTF-8?q?axihttp=20=E7=BA=BF=E7=A8=8B=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/Script/AppMain/AxiHttp/AxiHttp.cs | 84 ++++++++++++++++--- .../Script/AppMain/AxiHttp/AxiHttpProxy.cs | 20 ++++- 2 files changed, 92 insertions(+), 12 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiHttp/AxiHttp.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiHttp/AxiHttp.cs index 7b5d29d..fa7717c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiHttp/AxiHttp.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiHttp/AxiHttp.cs @@ -11,8 +11,65 @@ using System.Security.Cryptography.X509Certificates; using System.Text; using System.Text.RegularExpressions; using System.Threading; -using System.Threading.Tasks; +public static class PSVThread +{ + static Thread psvThread = new Thread(Loop); + static AutoResetEvent autoEvent = new AutoResetEvent(false); + static Queue qActs = new Queue(); + static Queue qWork = new Queue(); + + public static void DoTask(Action act) + { +#if UNITY_PSP2 + AddSingleTask(act); +#else + ThreadPool.QueueUserWorkItem(new WaitCallback((state) => act.Invoke())); +#endif + } + +#if UNITY_PSP2 + static bool bSingleInit = false; + static void SingleInit() + { + if (bSingleInit) return; + psvThread.Start(); + bSingleInit = true; + } + static void AddSingleTask(Action act) + { + SingleInit(); + lock (qActs) + { + qActs.Enqueue(act); + } + autoEvent.Set(); + } + + static void Loop() + { + while (autoEvent.WaitOne()) + { + lock (qActs) + { + while (qActs.Count > 0) { qWork.Enqueue(qActs.Dequeue()); } + } + while (qWork.Count > 0) + { + Action act = qWork.Dequeue(); + try + { + act.Invoke(); + } + catch (Exception ex) + { + UnityEngine.Debug.Log(ex.ToString()); + } + } + } + } +#endif +} public static class AxiHttp { @@ -127,14 +184,15 @@ public static class AxiHttp AxiRespInfo respInfo = new AxiRespInfo(); respInfo.downloadMode = AxiDownLoadMode.NotDownLoad; WaitAxiRequest respAsync = new WaitAxiRequest(respInfo); - Task task = new Task(() => SendAxiRequest(url, ref respInfo)); - task.Start(); + //Task task = new Task(() => SendAxiRequest(url, ref respInfo)); + //task.Start() + PSVThread.DoTask(() => SendAxiRequest(url, ref respInfo)); return respAsync; } public static AxiRespInfo AxiDownload(string url) { - AxiRespInfo respInfo = new AxiRespInfo(); + AxiRespInfo respInfo = new AxiRespInfo(); respInfo.downloadMode = AxiDownLoadMode.DownLoadBytes; SendAxiRequest(url, ref respInfo); return respInfo; @@ -142,19 +200,20 @@ public static class AxiHttp public static AxiRespInfo AxiDownloadAsync(string url) { - AxiRespInfo respInfo = new AxiRespInfo(); + AxiRespInfo respInfo = new AxiRespInfo(); respInfo.downloadMode = AxiDownLoadMode.DownLoadBytes; - Task task = new Task(() => SendAxiRequest(url, ref respInfo)); - task.Start(); + //Task task = new Task(() => SendAxiRequest(url, ref respInfo)); + //task.Start(); + PSVThread.DoTask(() => SendAxiRequest(url, ref respInfo)); return respInfo; } - static void SendAxiRequest(string url, ref AxiRespInfo respinfo,int timeout = 1000 * 1000, string encoding = "UTF-8") + static void SendAxiRequest(string url, ref AxiRespInfo respinfo, int timeout = 1000 * 1000, string encoding = "UTF-8") { if (url.ToLower().StartsWith("https://")) - SendAxiRequestHttps(url, ref respinfo,timeout, encoding);// SendAxiRequestHttps(url, ref respinfo, timeout, encoding); + SendAxiRequestHttps(url, ref respinfo, timeout, encoding);// SendAxiRequestHttps(url, ref respinfo, timeout, encoding); else - SendAxiRequestHttp(url, ref respinfo,timeout, encoding); + SendAxiRequestHttp(url, ref respinfo, timeout, encoding); } static void SendAxiRequestHttp(string url, ref AxiRespInfo respinfo, int timeout, string encoding) @@ -735,6 +794,9 @@ public static class AxiHttp //} respinfo.isDone = true; } + + if (client != null) + client.Dispose(); } @@ -1023,7 +1085,7 @@ public static class AxiHttp { try { - Log($"convertToIntBy16 str- {str} lenght->{str.Length}"); + //Log($"convertToIntBy16 str- {str} lenght->{str.Length}"); if (str.Length == 0) return 0; return Convert.ToInt32(str, 16); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiHttp/AxiHttpProxy.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiHttp/AxiHttpProxy.cs index ec6172e..16d81d2 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiHttp/AxiHttpProxy.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiHttp/AxiHttpProxy.cs @@ -1,4 +1,3 @@ -using System.Collections; using UnityEngine; using static AxiHttp; @@ -46,6 +45,8 @@ public static class AxiHttpProxy public static void ShowAxiHttpDebugInfo(AxiRespInfo resp) { + +#if UNITY_EDITOR Debug.Log($""); Debug.Log($"==== request ===="); Debug.Log($"url =>{resp.url}"); @@ -70,6 +71,23 @@ public static class AxiHttpProxy Debug.Log($"respInfo.fileName =>{resp.fileName}"); Debug.Log($"respInfo.NeedloadedLenght =>{resp.NeedloadedLenght}"); Debug.Log($"respInfo.loadedLenght =>{resp.loadedLenght}"); +#else + Debug.Log($"==== request url => { resp.url}"); + Debug.Log($"code =>{resp.code}"); + Debug.Log($"respInfo.bTimeOut =>{resp.bTimeOut}"); + Debug.Log($"==== response ===="); + if (resp.downloadMode == AxiDownLoadMode.NotDownLoad) + { + Debug.Log($"body_text =>{resp.body}"); + Debug.Log($"body_text.Length =>{resp.body.Length}"); + } + else + { + Debug.Log($"==== download ===="); + Debug.Log($"respInfo.loadedLenght =>{resp.loadedLenght}"); + } +#endif + //if (resp.downloadMode == AxiDownLoadMode.DownLoadBytes) //{ // if (resp.bTimeOut)