From d9e3e95ddaaa9f35d8875a0511356acae3261dbe Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Tue, 14 Jan 2025 14:16:08 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net9.0/mROA.Performance.AssemblyInfo.cs | 2 +- .../obj/mROA.Performance.csproj.nuget.g.props | 2 +- .../Release/net9.0/mROA.Test.AssemblyInfo.cs | 2 +- mROA.Test/obj/mROA.Test.csproj.nuget.g.props | 2 +- .../PrepairedExecutionModule.cs | 108 ++++++++++-------- mROA/obj/Release/net9.0/mROA.AssemblyInfo.cs | 9 +- mROA/obj/mROA.csproj.nuget.g.props | 2 +- 7 files changed, 72 insertions(+), 55 deletions(-) diff --git a/mROA.Performance/obj/Release/net9.0/mROA.Performance.AssemblyInfo.cs b/mROA.Performance/obj/Release/net9.0/mROA.Performance.AssemblyInfo.cs index d0633e2..ae5fb80 100644 --- a/mROA.Performance/obj/Release/net9.0/mROA.Performance.AssemblyInfo.cs +++ b/mROA.Performance/obj/Release/net9.0/mROA.Performance.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("mROA.Performance")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2f1a1e250b1a9c031df21e3ec1087cb18b8fa784")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9128f3f6ee0d3c89e7e0538ac244a133c746e4df")] [assembly: System.Reflection.AssemblyProductAttribute("mROA.Performance")] [assembly: System.Reflection.AssemblyTitleAttribute("mROA.Performance")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/mROA.Performance/obj/mROA.Performance.csproj.nuget.g.props b/mROA.Performance/obj/mROA.Performance.csproj.nuget.g.props index 566ee42..c738a62 100644 --- a/mROA.Performance/obj/mROA.Performance.csproj.nuget.g.props +++ b/mROA.Performance/obj/mROA.Performance.csproj.nuget.g.props @@ -7,7 +7,7 @@ $(UserProfile)\.nuget\packages\ C:\Users\Mimm\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.10.1 + 6.12.2 diff --git a/mROA.Test/obj/Release/net9.0/mROA.Test.AssemblyInfo.cs b/mROA.Test/obj/Release/net9.0/mROA.Test.AssemblyInfo.cs index 093b6a7..fe2d30c 100644 --- a/mROA.Test/obj/Release/net9.0/mROA.Test.AssemblyInfo.cs +++ b/mROA.Test/obj/Release/net9.0/mROA.Test.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("mROA.Test")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2f1a1e250b1a9c031df21e3ec1087cb18b8fa784")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9128f3f6ee0d3c89e7e0538ac244a133c746e4df")] [assembly: System.Reflection.AssemblyProductAttribute("mROA.Test")] [assembly: System.Reflection.AssemblyTitleAttribute("mROA.Test")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/mROA.Test/obj/mROA.Test.csproj.nuget.g.props b/mROA.Test/obj/mROA.Test.csproj.nuget.g.props index 3598713..8b66f76 100644 --- a/mROA.Test/obj/mROA.Test.csproj.nuget.g.props +++ b/mROA.Test/obj/mROA.Test.csproj.nuget.g.props @@ -7,7 +7,7 @@ $(UserProfile)\.nuget\packages\ C:\Users\Mimm\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.10.1 + 6.12.2 diff --git a/mROA/Implementation/PrepairedExecutionModule.cs b/mROA/Implementation/PrepairedExecutionModule.cs index 4523d4a..4e4552e 100644 --- a/mROA/Implementation/PrepairedExecutionModule.cs +++ b/mROA/Implementation/PrepairedExecutionModule.cs @@ -8,7 +8,7 @@ public class PrepairedExecutionModule : IExecuteModule private readonly ISerialisationModule _serialisationModule; private readonly IContextRepository _contextRepo; private readonly MethodInfo _resultExtractionMethod; - + public PrepairedExecutionModule(IMethodRepository methodRepo, ISerialisationModule serialisationModule, IContextRepository contextRepo) @@ -17,7 +17,6 @@ public class PrepairedExecutionModule : IExecuteModule _serialisationModule = serialisationModule; _contextRepo = contextRepo; _serialisationModule.SetExecuteModule(this); - } public ICommandExecution Execute(ICallRequest command) @@ -26,54 +25,71 @@ public class PrepairedExecutionModule : IExecuteModule if (currentCommand == null) throw new Exception($"Command {command.CommandId} not found"); - var context = command.ObjectId != -1 ? _contextRepo.GetObject(command.ObjectId) : _contextRepo.GetSingleObject(currentCommand.DeclaringType); + var context = command.ObjectId != -1 + ? _contextRepo.GetObject(command.ObjectId) + : _contextRepo.GetSingleObject(currentCommand.DeclaringType); var parameter = command.Parameter; - if (currentCommand.ReturnType.BaseType == typeof(Task) && currentCommand.ReturnType.GenericTypeArguments.Length == 1) - { - var tokenSource = new CancellationTokenSource(); - var token = tokenSource.Token; - - var result = - currentCommand.Invoke(context, parameter is null ? [token] : [parameter, token]) as Task; - var exec = new AsyncCommandExecution(tokenSource) - { CommandId = command.CommandId, ClientId = command.ClientId }; - - result.ContinueWith(task => - { - var result = task.GetType().GetProperty("Result").GetValue(task); - _serialisationModule.PostResponse(new FinalCommandExecution - { - ExecutionId = exec.ExecutionId, Result = result, CommandId = command.CommandId, - ClientId = command.ClientId - }); - }, token); - - return exec; - } - + if (currentCommand.ReturnType.BaseType == typeof(Task) && + currentCommand.ReturnType.GenericTypeArguments.Length == 1) + return TypedExecuteAsync(currentCommand, context, parameter, command); + if (currentCommand.ReturnType == typeof(Task)) - { - var tokenSource = new CancellationTokenSource(); - var token = tokenSource.Token; - - var result = currentCommand.Invoke(context, parameter is null ? [token] : [parameter, token]) as Task; - var exec = new AsyncCommandExecution(tokenSource) - { CommandId = command.CommandId, ClientId = command.ClientId }; - - result.ContinueWith(_ => - { - _serialisationModule.PostResponse(new FinalCommandExecution - { - ExecutionId = exec.ExecutionId, Result = null, CommandId = command.CommandId, - ClientId = command.ClientId - }); - }, token); - - return exec; - } + return ExecuteAsync(currentCommand, context, parameter, command); + + return Execute(currentCommand, context, parameter, command); + } + private ICommandExecution Execute(MethodInfo currentCommand, object context, object parameter, ICallRequest request) + { var finalResult = currentCommand.Invoke(context, parameter is null ? [] : [parameter]); - return new FinalCommandExecution { CommandId = command.CommandId, Result = finalResult }; + return new FinalCommandExecution + { CommandId = request.CommandId, Result = finalResult, ClientId = request.ClientId }; + } + + private ICommandExecution ExecuteAsync(MethodInfo currentCommand, object context, object parameter, + ICallRequest command) + { + var tokenSource = new CancellationTokenSource(); + var token = tokenSource.Token; + + var result = currentCommand.Invoke(context, parameter is null ? [token] : [parameter, token]) as Task; + var exec = new AsyncCommandExecution(tokenSource) + { CommandId = command.CommandId, ClientId = command.ClientId }; + + result.ContinueWith(_ => + { + _serialisationModule.PostResponse(new FinalCommandExecution + { + ExecutionId = exec.ExecutionId, Result = null, CommandId = command.CommandId, + ClientId = command.ClientId + }); + }, token); + + return exec; + } + + private ICommandExecution TypedExecuteAsync(MethodInfo currentCommand, object context, object parameter, + ICallRequest command) + { + var tokenSource = new CancellationTokenSource(); + var token = tokenSource.Token; + + var result = + currentCommand.Invoke(context, parameter is null ? [token] : [parameter, token]) as Task; + var exec = new AsyncCommandExecution(tokenSource) + { CommandId = command.CommandId, ClientId = command.ClientId }; + + result.ContinueWith(task => + { + var result = task.GetType().GetProperty("Result").GetValue(task); + _serialisationModule.PostResponse(new FinalCommandExecution + { + ExecutionId = exec.ExecutionId, Result = result, CommandId = command.CommandId, + ClientId = command.ClientId + }); + }, token); + + return exec; } } \ No newline at end of file diff --git a/mROA/obj/Release/net9.0/mROA.AssemblyInfo.cs b/mROA/obj/Release/net9.0/mROA.AssemblyInfo.cs index 3bbc395..98b76d5 100644 --- a/mROA/obj/Release/net9.0/mROA.AssemblyInfo.cs +++ b/mROA/obj/Release/net9.0/mROA.AssemblyInfo.cs @@ -1,9 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. // //------------------------------------------------------------------------------ @@ -13,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("mROA")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2f1a1e250b1a9c031df21e3ec1087cb18b8fa784")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9128f3f6ee0d3c89e7e0538ac244a133c746e4df")] [assembly: System.Reflection.AssemblyProductAttribute("mROA")] [assembly: System.Reflection.AssemblyTitleAttribute("mROA")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/mROA/obj/mROA.csproj.nuget.g.props b/mROA/obj/mROA.csproj.nuget.g.props index 566ee42..c738a62 100644 --- a/mROA/obj/mROA.csproj.nuget.g.props +++ b/mROA/obj/mROA.csproj.nuget.g.props @@ -7,7 +7,7 @@ $(UserProfile)\.nuget\packages\ C:\Users\Mimm\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.10.1 + 6.12.2