diff --git a/mROA/Implementation/Backend/NetworkGatewayModule.cs b/mROA/Implementation/Backend/NetworkGatewayModule.cs index 9112bdd..ab3e85a 100644 --- a/mROA/Implementation/Backend/NetworkGatewayModule.cs +++ b/mROA/Implementation/Backend/NetworkGatewayModule.cs @@ -94,7 +94,7 @@ 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 })); + new IdAssignment { Id = -interaction.ConnectionId }, TODO)); _extractorsCTS[interaction.ConnectionId] = cts; _hub!.RegisterInteraction(interaction); Console.WriteLine("Client registered"); diff --git a/mROA/Implementation/ChannelInteractionModule.cs b/mROA/Implementation/ChannelInteractionModule.cs index 400f333..d8b999f 100644 --- a/mROA/Implementation/ChannelInteractionModule.cs +++ b/mROA/Implementation/ChannelInteractionModule.cs @@ -129,7 +129,7 @@ namespace mROA.Implementation if (sendRecovery) { await PostMessageAsync( - new NetworkMessageHeader(_serialization!, new ClientRecovery(Math.Abs(ConnectionId)))); + new NetworkMessageHeader(_serialization!, new ClientRecovery(Math.Abs(ConnectionId)), Context)); var ping = await ReceiveChanel.Reader.ReadAsync(); Console.WriteLine($"Ping received {ping.Id}"); } diff --git a/mROA/Implementation/Frontend/NetworkFrontendBridge.cs b/mROA/Implementation/Frontend/NetworkFrontendBridge.cs index e7ed3c6..eabc2bd 100644 --- a/mROA/Implementation/Frontend/NetworkFrontendBridge.cs +++ b/mROA/Implementation/Frontend/NetworkFrontendBridge.cs @@ -19,7 +19,7 @@ namespace mROA.Implementation.Frontend private IContextualSerializationToolKit? _serialization; private ChannelInteractionModule.StreamExtractor _currentExtractor; private CancellationTokenSource _rawExtractorCancellation; - + private IEndPointContext _context; public NetworkFrontendBridge(IPEndPoint serverEndPoint) { _serverEndPoint = serverEndPoint; @@ -36,6 +36,9 @@ namespace mROA.Implementation.Frontend case IContextualSerializationToolKit toolkit: _serialization = toolkit; break; + case IEndPointContext endPointContext: + _context = endPointContext; + break; } } @@ -52,7 +55,7 @@ namespace mROA.Implementation.Frontend _interactionModule.IsConnected = () => _currentExtractor.IsConnected; _interactionModule.OnDisconnected += _ => { Reconnect(); }; - _interactionModule.PostMessageAsync(new NetworkMessageHeader(_serialization, new ClientConnect())).Wait(); + _interactionModule.PostMessageAsync(new NetworkMessageHeader(_serialization, new ClientConnect(), _context)).Wait(); _currentExtractor.SingleReceive(); var idMessage = _interactionModule.GetNextMessageReceiving(false).GetAwaiter().GetResult(); @@ -66,14 +69,14 @@ namespace mROA.Implementation.Frontend Task.Run(async () => await _currentExtractor.LoopedReceive(_rawExtractorCancellation.Token)); - var assignment = _serialization.Deserialize(idMessage.Data)!; + var assignment = _serialization.Deserialize(idMessage.Data, _context)!; _interactionModule.ConnectionId = -assignment.Id; TransmissionConfig.OwnershipRepository = new StaticOwnershipRepository(assignment.Id); } private void PrepareExtractor() { - _currentExtractor = new ChannelInteractionModule.StreamExtractor(_tcpClient.GetStream(), _serialization!); + _currentExtractor = new ChannelInteractionModule.StreamExtractor(_tcpClient.GetStream(), _serialization!, _context); _ = _currentExtractor.SendFromChannel(_interactionModule!.TrustedPostChanel, _rawExtractorCancellation.Token); @@ -105,7 +108,7 @@ namespace mROA.Implementation.Frontend public void Disconnect() { - _ = _interactionModule!.PostMessageAsync(new NetworkMessageHeader(_serialization!, new ClientDisconnect())); + _ = _interactionModule!.PostMessageAsync(new NetworkMessageHeader(_serialization!, new ClientDisconnect(), _context)); _interactionModule.Dispose(); _tcpClient.Dispose(); } diff --git a/mROA/Implementation/Frontend/RequestExtractor.cs b/mROA/Implementation/Frontend/RequestExtractor.cs index f38152e..8822cb4 100644 --- a/mROA/Implementation/Frontend/RequestExtractor.cs +++ b/mROA/Implementation/Frontend/RequestExtractor.cs @@ -17,7 +17,7 @@ namespace mROA.Implementation.Frontend private IContextRepository? _remoteContextRepository; private IRepresentationModule? _representationModule; private IContextualSerializationToolKit? _serializationToolkit; - + private IEndPointContext _context; public void Inject(T dependency) { switch (dependency) @@ -41,6 +41,9 @@ namespace mROA.Implementation.Frontend case IContextualSerializationToolKit serializationToolkit: _serializationToolkit = serializationToolkit; break; + case IEndPointContext remoteContext: + _context = remoteContext; + break; } } @@ -67,7 +70,7 @@ namespace mROA.Implementation.Frontend var query = _representationModule!.GetStream(m => m.MessageType is EMessageType.CallRequest or EMessageType.CancelRequest - or EMessageType.EventRequest or EMessageType.ClientDisconnect, streamTokenSource.Token, + or EMessageType.EventRequest or EMessageType.ClientDisconnect, _context, streamTokenSource.Token, m => m.MessageType == EMessageType.CallRequest ? typeof(DefaultCallRequest) : null, m => m.MessageType == EMessageType.CancelRequest ? typeof(CancelRequest) : null, m => m.MessageType == EMessageType.EventRequest ? typeof(DefaultCallRequest) : null, @@ -144,7 +147,7 @@ namespace mROA.Implementation.Frontend return; } - _representationModule!.PostCallMessage(request.Id, resultType, result, result.GetType()); + _representationModule!.PostCallMessage(request.Id, resultType, result, _context); } private void HandleEventRequest(DefaultCallRequest request) diff --git a/mROA/Implementation/NetworkMessageHeader.cs b/mROA/Implementation/NetworkMessageHeader.cs index db47fe9..dee20f1 100644 --- a/mROA/Implementation/NetworkMessageHeader.cs +++ b/mROA/Implementation/NetworkMessageHeader.cs @@ -34,10 +34,11 @@ namespace mROA.Implementation MessageType = EMessageType.Unknown; Data = Array.Empty(); } - public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit, INetworkMessage networkMessage) + public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit, + INetworkMessage networkMessage, IEndPointContext context) { MessageType = networkMessage.MessageType; - Data = serializationToolkit.Serialize(networkMessage); + Data = serializationToolkit.Serialize(networkMessage, context); Id = Guid.NewGuid(); } public Guid Id { get; set; }