From b86e13210c2476f42a82bde392973215b1c589a2 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Sun, 4 May 2025 20:18:39 +0300 Subject: [PATCH] All modules solved, just NetworkGatewayModule.cs logic must remake --- mROA/Implementation/Backend/NetworkGatewayModule.cs | 9 ++++++--- mROA/Implementation/Frontend/RequestExtractor.cs | 6 +++--- .../Frontend/UdpUntrustedInteraction.cs | 11 +++++++---- mROA/Implementation/NetworkMessageHeader.cs | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/mROA/Implementation/Backend/NetworkGatewayModule.cs b/mROA/Implementation/Backend/NetworkGatewayModule.cs index ab3e85a..e170b2d 100644 --- a/mROA/Implementation/Backend/NetworkGatewayModule.cs +++ b/mROA/Implementation/Backend/NetworkGatewayModule.cs @@ -80,7 +80,10 @@ namespace mROA.Implementation.Backend interaction!.Inject(_serialization); - var streamExtractor = new ChannelInteractionModule.StreamExtractor(client.GetStream(), _serialization); + //TODO сделать контекст + var context = new EndPointContext(); + + var streamExtractor = new ChannelInteractionModule.StreamExtractor(client.GetStream(), _serialization, context); interaction.IsConnected = () => streamExtractor.IsConnected; streamExtractor.MessageReceived = message => { interaction.ReceiveChanel.Writer.WriteAsync(message); }; streamExtractor.SingleReceive(); @@ -94,14 +97,14 @@ namespace mROA.Implementation.Backend Task.Run(async () => await streamExtractor.LoopedReceive(cts.Token)); _ = streamExtractor.SendFromChannel(interaction.TrustedPostChanel, cts.Token); interaction.PostMessageAsync(new NetworkMessageHeader(_serialization!, - new IdAssignment { Id = -interaction.ConnectionId }, TODO)); + new IdAssignment { Id = -interaction.ConnectionId }, null)); _extractorsCTS[interaction.ConnectionId] = cts; _hub!.RegisterInteraction(interaction); Console.WriteLine("Client registered"); break; case EMessageType.ClientRecovery: { - var recoveryRequest = _serialization!.Deserialize(connectionRequest.Data)!; + var recoveryRequest = _serialization!.Deserialize(connectionRequest.Data, null); var recoveryInteraction = _hub.GetInteraction(recoveryRequest.Id); _extractorsCTS[recoveryRequest.Id].Cancel(); diff --git a/mROA/Implementation/Frontend/RequestExtractor.cs b/mROA/Implementation/Frontend/RequestExtractor.cs index ef88ddc..821b035 100644 --- a/mROA/Implementation/Frontend/RequestExtractor.cs +++ b/mROA/Implementation/Frontend/RequestExtractor.cs @@ -137,12 +137,12 @@ namespace mROA.Implementation.Frontend private void HandleCancelRequest(CancelRequest req) { - _executeModule!.Execute(req, _realContextRepository!, _representationModule!); + _executeModule!.Execute(req, _realContextRepository!, _representationModule!, _context); } private void HandleCallRequest(DefaultCallRequest request) { - var result = _executeModule!.Execute(request, _realContextRepository!, _representationModule!); + var result = _executeModule!.Execute(request, _realContextRepository!, _representationModule!, _context); var resultType = result.MessageType; @@ -156,7 +156,7 @@ namespace mROA.Implementation.Frontend private void HandleEventRequest(DefaultCallRequest request) { - _executeModule!.Execute(request, _remoteContextRepository!, _representationModule!); + _executeModule!.Execute(request, _remoteContextRepository!, _representationModule!, _context); } } } \ No newline at end of file diff --git a/mROA/Implementation/Frontend/UdpUntrustedInteraction.cs b/mROA/Implementation/Frontend/UdpUntrustedInteraction.cs index 07896f3..e2e7421 100644 --- a/mROA/Implementation/Frontend/UdpUntrustedInteraction.cs +++ b/mROA/Implementation/Frontend/UdpUntrustedInteraction.cs @@ -12,7 +12,7 @@ namespace mROA.Implementation.Frontend private IContextualSerializationToolKit _serializationToolkit; private IChannelInteractionModule _channelInteractionModule; private CancellationTokenSource _tokenSource = new(); - + private IEndPointContext _context; public void Dispose() { _tokenSource.Cancel(); @@ -35,7 +35,7 @@ namespace mROA.Implementation.Frontend while (token.IsCancellationRequested == false) { var message = new Memory((await udpClient.ReceiveAsync()).Buffer); - var parsed = _serializationToolkit.Deserialize(message.Span)!; + var parsed = _serializationToolkit.Deserialize(message, _context); await writer.WriteAsync(parsed, token); } @@ -49,7 +49,7 @@ namespace mROA.Implementation.Frontend Data = BitConverter.GetBytes(Math.Abs(_channelInteractionModule.ConnectionId)) }; - var initParsed = _serializationToolkit.Serialize(initMessage); + var initParsed = _serializationToolkit.Serialize(initMessage, _context); await udpClient.SendAsync(initParsed, initParsed.Length); @@ -59,7 +59,7 @@ namespace mROA.Implementation.Frontend or EMessageType.EventRequest)) continue; - var serialized = _serializationToolkit.Serialize(post); + var serialized = _serializationToolkit.Serialize(post, _context); #if TRACE Console.WriteLine("Untrusted write start"); #endif @@ -80,6 +80,9 @@ namespace mROA.Implementation.Frontend case IContextualSerializationToolKit serializationToolkit: _serializationToolkit = serializationToolkit; break; + case IEndPointContext endPointContext: + _context = endPointContext; + break; } } } diff --git a/mROA/Implementation/NetworkMessageHeader.cs b/mROA/Implementation/NetworkMessageHeader.cs index dee20f1..cb31c3e 100644 --- a/mROA/Implementation/NetworkMessageHeader.cs +++ b/mROA/Implementation/NetworkMessageHeader.cs @@ -35,7 +35,7 @@ namespace mROA.Implementation Data = Array.Empty(); } public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit, - INetworkMessage networkMessage, IEndPointContext context) + INetworkMessage networkMessage, IEndPointContext? context) { MessageType = networkMessage.MessageType; Data = serializationToolkit.Serialize(networkMessage, context);