From a3fff03ff6cf44963bc4728d56c9b0d2a06bc58e Mon Sep 17 00:00:00 2001 From: xRain Date: Fri, 20 Oct 2023 15:29:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86Exception=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Synapse/EventServer.cs | 2 +- Synapse/RpcServer.cs | 26 +++++++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Synapse/EventServer.cs b/Synapse/EventServer.cs index 5399fa0..5754c68 100644 --- a/Synapse/EventServer.cs +++ b/Synapse/EventServer.cs @@ -46,7 +46,7 @@ public partial class Synapse } catch (Exception e) { - Logger.LogError("Event Processor Error: {Err}", e.Message); + Logger.LogError("Event Processor Error: {Err}", e.InnerException); EventServerChannel.BasicNack(ea.DeliveryTag, false, false); } }; diff --git a/Synapse/RpcServer.cs b/Synapse/RpcServer.cs index 9911270..7706e18 100644 --- a/Synapse/RpcServer.cs +++ b/Synapse/RpcServer.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Reflection; using System.Text; using System.Text.Encodings.Web; using System.Text.Json; @@ -37,13 +38,13 @@ public partial class Synapse { var callClass = Sp.CreateScope().ServiceProvider.GetRequiredService(method.Class); var mt = callClass.GetType().GetMethod(method.Method); + var param = Array.Empty(); try { var pt = mt.GetParameters()[0].ParameterType; if (pt == typeof(string)) { - var ret = mt.Invoke(callClass, new[] { reqBody }); - res = new SimApiBaseResponse(ret); + param = new[] { reqBody }; } else { @@ -51,14 +52,23 @@ public partial class Synapse { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); - var ret = mt.Invoke(callClass, new[] { paramObj }); - res = new SimApiBaseResponse(ret); + param = new[] { paramObj }; } + var ret = mt.Invoke(callClass, param); + res = new SimApiBaseResponse(ret); } - catch (SimApiException e) + catch (TargetInvocationException e) { - Logger.LogDebug("RPC错误: {Err}", e.Message); - res = new SimApiBaseResponse(e.Code, e.Message); + if (e.InnerException is SimApiException) + { + var ie = e.InnerException as SimApiException; + Logger.LogDebug("RPC调用错误: {Err}", ie.Message); + res = new SimApiBaseResponse(ie.Code, ie.Message); + } + else + { + res = new SimApiBaseResponse(500, e.Message); + } } catch (Exception e) { @@ -67,13 +77,11 @@ public partial class Synapse } } - var returnJson = JsonSerializer.Serialize((object)res, new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), PropertyNamingPolicy = JsonNamingPolicy.CamelCase, }); - Console.WriteLine(returnJson); var reply = $"client.{ea.BasicProperties.ReplyTo}.{ea.BasicProperties.AppId}"; var props = RpcServerChannel.CreateBasicProperties(); props.AppId = Options.AppId;