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 ab22524..d0633e2 100644
--- a/mROA.Performance/obj/Release/net9.0/mROA.Performance.AssemblyInfo.cs
+++ b/mROA.Performance/obj/Release/net9.0/mROA.Performance.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.Performance")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+da60eb27f99600ee3a9ee8526d2b26260efd8225")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2f1a1e250b1a9c031df21e3ec1087cb18b8fa784")]
[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 89910f0..566ee42 100644
--- a/mROA.Performance/obj/mROA.Performance.csproj.nuget.g.props
+++ b/mROA.Performance/obj/mROA.Performance.csproj.nuget.g.props
@@ -5,15 +5,12 @@
NuGet
$(MSBuildThisFileDirectory)project.assets.json
$(UserProfile)\.nuget\packages\
- C:\Users\Mikhail\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
+ C:\Users\Mimm\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
PackageReference
- 6.12.0
+ 6.10.1
-
+
-
- C:\Users\Mikhail\.nuget\packages\nunit.analyzers\4.3.0
-
\ No newline at end of file
diff --git a/mROA.Test/ITestController.cs b/mROA.Test/ITestController.cs
index 48a1e1d..c2c2722 100644
--- a/mROA.Test/ITestController.cs
+++ b/mROA.Test/ITestController.cs
@@ -9,12 +9,16 @@ public interface ITestController
Task AAsync(CancellationToken cancellationToken);
int B();
Task BAsync(CancellationToken cancellationToken);
+
+ TransmittedSharedObject SharedObjectTransmitionTest();
}
[SharedObjectSingleton]
public class TestController : ITestController
{
+ public ITestController? ReturnIfNotNull;
private int _bOut = 5;
+
public void A()
{
Console.WriteLine("A called");
@@ -34,4 +38,40 @@ public class TestController : ITestController
{
return Task.FromResult(5);
}
+
+ public TransmittedSharedObject SharedObjectTransmitionTest()
+ {
+ return new TransmittionTestController { ReturnIfNotNull = ReturnIfNotNull ?? new TestController() };
+ }
+}
+
+public class TransmittionTestController : ITestController
+{
+ public ITestController ReturnIfNotNull;
+
+ public void A()
+ {
+ Console.WriteLine("A called alternative");
+ }
+
+ public Task AAsync(CancellationToken cancellationToken)
+ {
+ Thread.Sleep(500);
+ return Task.CompletedTask;
+ }
+
+ public int B()
+ {
+ return 456789;
+ }
+
+ public Task BAsync(CancellationToken cancellationToken)
+ {
+ return Task.FromResult(465789);
+ }
+
+ public TransmittedSharedObject SharedObjectTransmitionTest()
+ {
+ return new TestController { ReturnIfNotNull = this };
+ }
}
\ No newline at end of file
diff --git a/mROA.Test/UnitTest1.cs b/mROA.Test/UnitTest1.cs
index 439e156..2360e94 100644
--- a/mROA.Test/UnitTest1.cs
+++ b/mROA.Test/UnitTest1.cs
@@ -1,6 +1,9 @@
using System.Diagnostics;
using System.Reflection;
+using System.Text.Json;
using mROA.Implementation;
+using Newtonsoft.Json;
+using JsonSerializer = System.Text.Json.JsonSerializer;
namespace mROA.Test;
@@ -11,9 +14,9 @@ public class Tests
private IExecuteModule _executeModule;
private IMethodRepository _methodRepository;
private IContextRepository _contextRepository;
-
+
private ITestController _testController;
-
+
[SetUp]
public void Setup()
{
@@ -25,9 +28,9 @@ public class Tests
var repo2 = new ContextRepository();
repo2.FillSingletons(Assembly.GetExecutingAssembly());
_contextRepository = repo2;
-
- _executeModule = new PrepairedExecutionModule(_methodRepository, _serialisationModule, _contextRepository);
+ _executeModule = new PrepairedExecutionModule(_methodRepository, _serialisationModule, _contextRepository);
+ TransmissionConfig.DefaultContextRepository = _contextRepository;
}
[Test]
@@ -41,7 +44,7 @@ public class Tests
"CommandId": 2
}
""");
- Assert.Pass(sw.ElapsedMilliseconds.ToString());
+ Assert.Pass(_interactionModule.OutputBuffer.Last());
}
[Test]
@@ -55,18 +58,18 @@ public class Tests
}
""");
while (_interactionModule.OutputBuffer.Count != 2) ;
-
- Assert.Pass(sw.ElapsedMilliseconds.ToString());
+
+ Assert.Pass(_interactionModule.OutputBuffer.Last());
}
-
+
[Test]
public void MethodRegistrationTest()
{
var repo = new MethodRepository();
repo.CollectForAssembly(Assembly.GetExecutingAssembly());
- Assert.That(repo.GetMethods().ToList().Count == 4);
+ Assert.That(repo.GetMethods().ToList().Count == 5);
}
-
+
[Test]
public void ContextSupplyTest()
{
@@ -76,4 +79,45 @@ public class Tests
singleObject.B();
Assert.That(singleObject.B() == 6);
}
+
+ [Test]
+ public void TransmissionTest()
+ {
+ _interactionModule.PassCommand(132, """
+ {
+ "CommandId": 4
+ }
+ """);
+ var response =
+ JsonSerializer.Deserialize>(
+ JsonSerializer.Deserialize(_interactionModule.OutputBuffer.Last())
+ ?.Result.ToString()
+ );
+
+ _interactionModule.PassCommand(132,
+ JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId }));
+
+ var firstFull = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result")
+ .GetInt32();
+
+ _interactionModule.PassCommand(132,
+ JsonSerializer.Serialize(new JsonCallRequest { CommandId = 4, ObjectId = response.ContextId }));
+
+ response =
+ JsonSerializer.Deserialize>(
+ JsonSerializer.Deserialize(_interactionModule.OutputBuffer.Last())
+ ?.Result.ToString()
+ );
+
+ _interactionModule.PassCommand(132,
+ JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId }));
+ _interactionModule.PassCommand(132,
+ JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId }));
+
+ var secondFull = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result")
+ .GetInt32();
+
+ Assert.That(firstFull == 456789 && secondFull == 6);
+
+ }
}
\ No newline at end of file
diff --git a/mROA.Test/mROA.Test.csproj b/mROA.Test/mROA.Test.csproj
index 1b7197f..4262b31 100644
--- a/mROA.Test/mROA.Test.csproj
+++ b/mROA.Test/mROA.Test.csproj
@@ -9,15 +9,21 @@
-
-
-
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
-
+
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 1410f8c..093b6a7 100644
--- a/mROA.Test/obj/Release/net9.0/mROA.Test.AssemblyInfo.cs
+++ b/mROA.Test/obj/Release/net9.0/mROA.Test.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.Test")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+da60eb27f99600ee3a9ee8526d2b26260efd8225")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2f1a1e250b1a9c031df21e3ec1087cb18b8fa784")]
[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 6c254f5..3598713 100644
--- a/mROA.Test/obj/mROA.Test.csproj.nuget.g.props
+++ b/mROA.Test/obj/mROA.Test.csproj.nuget.g.props
@@ -5,22 +5,22 @@
NuGet
$(MSBuildThisFileDirectory)project.assets.json
$(UserProfile)\.nuget\packages\
- C:\Users\Mikhail\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
+ C:\Users\Mimm\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
PackageReference
- 6.12.0
+ 6.10.1
-
+
-
-
-
-
+
+
+
+
- C:\Users\Mikhail\.nuget\packages\nunit.analyzers\4.3.0
+ C:\Users\Mimm\.nuget\packages\nunit.analyzers\4.6.0
\ No newline at end of file
diff --git a/mROA.Test/obj/mROA.Test.csproj.nuget.g.targets b/mROA.Test/obj/mROA.Test.csproj.nuget.g.targets
index 56b5729..48aaef6 100644
--- a/mROA.Test/obj/mROA.Test.csproj.nuget.g.targets
+++ b/mROA.Test/obj/mROA.Test.csproj.nuget.g.targets
@@ -1,8 +1,8 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/mROA/Abstract/IContextRepository.cs b/mROA/Abstract/IContextRepository.cs
index 4b27db2..e11c95c 100644
--- a/mROA/Abstract/IContextRepository.cs
+++ b/mROA/Abstract/IContextRepository.cs
@@ -6,4 +6,5 @@ public interface IContextRepository
void ClearObject(int id);
object GetObject(int id);
object GetSingleObject(Type type);
+ int GetObjectIndex(object o);
}
\ No newline at end of file
diff --git a/mROA/Implementation/SharedObjectInterafceAttribute.cs b/mROA/Implementation/Attributes/SharedObjectInterafceAttribute.cs
similarity index 100%
rename from mROA/Implementation/SharedObjectInterafceAttribute.cs
rename to mROA/Implementation/Attributes/SharedObjectInterafceAttribute.cs
diff --git a/mROA/Implementation/SharedObjectSingletonAttribute.cs b/mROA/Implementation/Attributes/SharedObjectSingletonAttribute.cs
similarity index 100%
rename from mROA/Implementation/SharedObjectSingletonAttribute.cs
rename to mROA/Implementation/Attributes/SharedObjectSingletonAttribute.cs
diff --git a/mROA/Implementation/ContextRepository.cs b/mROA/Implementation/ContextRepository.cs
index 1002840..9b51f07 100644
--- a/mROA/Implementation/ContextRepository.cs
+++ b/mROA/Implementation/ContextRepository.cs
@@ -7,9 +7,8 @@ public class ContextRepository : IContextRepository
{
private FrozenDictionary _singletons;
private object[] _storage;
- private int _lastIndex;
- private Task? _lastIndexFinder;
+ private Task? _lastIndexFinder = Task.FromResult(0);
const int StartupSize = 1024;
const int GrowSize = 128;
@@ -32,15 +31,13 @@ public class ContextRepository : IContextRepository
{
if (_lastIndexFinder is not null)
_lastIndexFinder.Wait();
+
+ _storage[_lastIndexFinder.Result] = o;
- var oldIndex = _lastIndex;
- _lastIndex = _lastIndexFinder.Result;
-
- _storage[oldIndex] = o;
-
+ var last = _lastIndexFinder.Result;
_lastIndexFinder = FindLastIndex();
- return _lastIndex;
+ return last;
}
public void ClearObject(int id)
@@ -59,6 +56,14 @@ public class ContextRepository : IContextRepository
return _singletons.TryGetValue(type.GetHashCode(), out var value) ? value : null;
}
+ public int GetObjectIndex(object o)
+ {
+ var index = Array.IndexOf(_storage, o);
+ if (index == -1)
+ return ResisterObject(o);
+ return index;
+ }
+
private async Task FindLastIndex()
{
for (int i = 0; i < _storage.Length; i++)
diff --git a/mROA/Implementation/JsonSerialisationModule.cs b/mROA/Implementation/JsonSerialisationModule.cs
index 55a0172..08104b9 100644
--- a/mROA/Implementation/JsonSerialisationModule.cs
+++ b/mROA/Implementation/JsonSerialisationModule.cs
@@ -12,19 +12,15 @@ public class JsonSerialisationModule : ISerialisationModule
{
_dataSource = dataSource;
_dataSource.SetMessageHandler(HandleIncomingRequest);
- }
+ }
public void SetExecuteModule(IExecuteModule executeModule) => _executeModule = executeModule;
public void HandleIncomingRequest(int clientId, string command)
{
-
-
JsonCallRequest request = JsonSerializer.Deserialize(command);
-
-
-
request.ClientId = clientId;
+
var response = _executeModule.Execute(request);
PostResponse(response);
}
diff --git a/mROA/Implementation/TransmittedSharedObject.cs b/mROA/Implementation/TransmittedSharedObject.cs
new file mode 100644
index 0000000..353f1c6
--- /dev/null
+++ b/mROA/Implementation/TransmittedSharedObject.cs
@@ -0,0 +1,27 @@
+using System.Text.Json.Serialization;
+
+namespace mROA.Implementation;
+
+public static class TransmissionConfig
+{
+ public static IContextRepository DefaultContextRepository { get; set; }
+}
+
+public class TransmittedSharedObject
+{
+ public int ContextId { get; set; } = -1;
+
+ [JsonIgnore]
+ public T Value { get; set; }
+
+ [JsonIgnore]
+ public IContextRepository Context { get; set; }
+
+ public static implicit operator T(TransmittedSharedObject value) => value.Value;
+
+ public static implicit operator TransmittedSharedObject(T value) =>
+ new() { Value = value, ContextId = TransmissionConfig.DefaultContextRepository.GetObjectIndex(value) };
+
+ // public void Fill() => Value = (T)TransmissionConfig.DefaultContextRepository.GetObject(ContextId);
+ // public void Collect() => ContextId = TransmissionConfig.DefaultContextRepository.GetObjectIndex(ContextId);
+}
\ 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 2ed3e1a..3bbc395 100644
--- a/mROA/obj/Release/net9.0/mROA.AssemblyInfo.cs
+++ b/mROA/obj/Release/net9.0/mROA.AssemblyInfo.cs
@@ -13,7 +13,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+da60eb27f99600ee3a9ee8526d2b26260efd8225")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2f1a1e250b1a9c031df21e3ec1087cb18b8fa784")]
[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 721d876..566ee42 100644
--- a/mROA/obj/mROA.csproj.nuget.g.props
+++ b/mROA/obj/mROA.csproj.nuget.g.props
@@ -5,12 +5,12 @@
NuGet
$(MSBuildThisFileDirectory)project.assets.json
$(UserProfile)\.nuget\packages\
- C:\Users\Mikhail\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
+ C:\Users\Mimm\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
PackageReference
- 6.12.0
+ 6.10.1
-
+
\ No newline at end of file