diff --git a/Example.Frontend/Program.cs b/Example.Frontend/Program.cs index a2d5fca..c1d6086 100644 --- a/Example.Frontend/Program.cs +++ b/Example.Frontend/Program.cs @@ -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(); TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule(); builder.GetModule()!.Connect(); -builder.GetModule()!.StartVirtualInteraction(); +// builder.GetModule()!.StartVirtualInteraction(); Console.WriteLine(TransmissionConfig.OwnershipRepository!.GetOwnershipId()); var context = builder.GetModule(); diff --git a/mROA/Abstract/ISerializationToolkit.cs b/mROA/Abstract/ISerializationToolkit.cs new file mode 100644 index 0000000..2653121 --- /dev/null +++ b/mROA/Abstract/ISerializationToolkit.cs @@ -0,0 +1,9 @@ +namespace mROA.Implementation; + +public interface ISerializationToolkit +{ + public byte[] Serialize(T objectToSerialize); + public byte[] Serialize(object objectToSerialize, Type type); + public T? Deserialize(byte[] rawData); + public object? Deserialize(byte[] rawData, Type type); +} \ No newline at end of file diff --git a/mROA/Implementation/AsyncNetworkInteractionModule.cs b/mROA/Implementation/AsyncNetworkInteractionModule.cs new file mode 100644 index 0000000..d3c4a96 --- /dev/null +++ b/mROA/Implementation/AsyncNetworkInteractionModule.cs @@ -0,0 +1,33 @@ +namespace mROA.Implementation; + +public class AsyncNetworkInteractionModule +{ + private ISerializationToolkit _iSerializationToolkit; + private const int BufferSize = ushort.MaxValue; + private Stream? _stream; + private List _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(); + } + + +} \ No newline at end of file diff --git a/mROA/Implementation/Frontend/StreamBasedFrontendInteractionModule.cs b/mROA/Implementation/Frontend/StreamBasedFrontendInteractionModule.cs index 0426264..cb6fcb9 100644 --- a/mROA/Implementation/Frontend/StreamBasedFrontendInteractionModule.cs +++ b/mROA/Implementation/Frontend/StreamBasedFrontendInteractionModule.cs @@ -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(); + } + + public NetworkMessage LastMessage() + { + return null; + } + + + public async Task ReceiveMessage() { if (ServerStream is null) diff --git a/mROA/Implementation/JsonSerializationToolkit.cs b/mROA/Implementation/JsonSerializationToolkit.cs new file mode 100644 index 0000000..1973217 --- /dev/null +++ b/mROA/Implementation/JsonSerializationToolkit.cs @@ -0,0 +1,26 @@ +using System.Text.Json; + +namespace mROA.Implementation; + +public class JsonSerializationToolkit : ISerializationToolkit +{ + public byte[] Serialize(T objectToSerialize) + { + return JsonSerializer.SerializeToUtf8Bytes(objectToSerialize); + } + + public byte[] Serialize(object objectToSerialize, Type type) + { + return JsonSerializer.SerializeToUtf8Bytes(objectToSerialize, type); + } + + public T? Deserialize(byte[] rawData) + { + return JsonSerializer.Deserialize(rawData); + } + + public object? Deserialize(byte[] rawData, Type type) + { + return JsonSerializer.Deserialize(rawData, type); + } +} \ No newline at end of file