новый подход к логике модуля
This commit is contained in:
@@ -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>();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user