новый подход к логике модуля

This commit is contained in:
2025-02-15 21:52:38 +03:00
parent 224b6c620e
commit 82ff0019e1
5 changed files with 85 additions and 7 deletions
+5 -6
View File
@@ -14,20 +14,19 @@ builder.Modules.Add(new JsonFrontendSerialisationModule());
builder.Modules.Add(new StreamBasedFrontendInteractionModule());
builder.Modules.Add(new NetworkFrontendBridge(new IPEndPoint(IPAddress.Loopback, 4567)));
builder.Modules.Add(new StaticSerialisationModuleProducer());
builder.Modules.Add(new BasicExecutionModule());
builder.Modules.Add(new CoCodegenMethodRepository());
builder.Modules.Add(new StreamBasedVirtualBackendInteractionModule());
builder.Modules.Add(new JsonSerialisationModule());
// builder.Modules.Add(new BasicExecutionModule());
// builder.Modules.Add(new CoCodegenMethodRepository());
// builder.Modules.Add(new StreamBasedVirtualBackendInteractionModule());
// builder.Modules.Add(new JsonSerialisationModule());
builder.UseCollectableContextRepository();
builder.Build();
TransmissionConfig.RealContextRepository = builder.GetModule<ContextRepository>();
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
builder.GetModule<NetworkFrontendBridge>()!.Connect();
builder.GetModule<StreamBasedVirtualBackendInteractionModule>()!.StartVirtualInteraction();
// builder.GetModule<StreamBasedVirtualBackendInteractionModule>()!.StartVirtualInteraction();
Console.WriteLine(TransmissionConfig.OwnershipRepository!.GetOwnershipId());
var context = builder.GetModule<RemoteContextRepository>();
+9
View File
@@ -0,0 +1,9 @@
namespace mROA.Implementation;
public interface ISerializationToolkit
{
public byte[] Serialize<T>(T objectToSerialize);
public byte[] Serialize(object objectToSerialize, Type type);
public T? Deserialize<T>(byte[] rawData);
public object? Deserialize(byte[] rawData, Type type);
}
@@ -0,0 +1,33 @@
namespace mROA.Implementation;
public class AsyncNetworkInteractionModule
{
private ISerializationToolkit _iSerializationToolkit;
private const int BufferSize = ushort.MaxValue;
private Stream? _stream;
private List<NetworkMessage> _unhandledMessages = new(8);
private byte[] _buffer = new byte[BufferSize];
private Task? _currentReadTask;
public Task ReceiveNext()
{
_currentReadTask ??= StartReceiving();
return _currentReadTask;
}
private async Task StartReceiving()
{
await _stream.ReadExactlyAsync(_buffer, 0, 2);
var len = BitConverter.ToUInt16(_buffer, 0);
await _stream.ReadExactlyAsync(_buffer, 0, len);
}
public NetworkMessage GetLastMessage()
{
return _unhandledMessages.Last();
}
}
@@ -5,9 +5,20 @@ namespace mROA.Implementation.Frontend;
public class StreamBasedFrontendInteractionModule : IInteractionModule.IFrontendInteractionModule
{
public Stream? ServerStream { get; set; }
public int ClientId { get; set; }
public NetworkMessage[] UnhandledMessages()
{
return Array.Empty<NetworkMessage>();
}
public NetworkMessage LastMessage()
{
return null;
}
public async Task<byte[]> ReceiveMessage()
{
if (ServerStream is null)
@@ -0,0 +1,26 @@
using System.Text.Json;
namespace mROA.Implementation;
public class JsonSerializationToolkit : ISerializationToolkit
{
public byte[] Serialize<T>(T objectToSerialize)
{
return JsonSerializer.SerializeToUtf8Bytes(objectToSerialize);
}
public byte[] Serialize(object objectToSerialize, Type type)
{
return JsonSerializer.SerializeToUtf8Bytes(objectToSerialize, type);
}
public T? Deserialize<T>(byte[] rawData)
{
return JsonSerializer.Deserialize<T>(rawData);
}
public object? Deserialize(byte[] rawData, Type type)
{
return JsonSerializer.Deserialize(rawData, type);
}
}