All modules solved, just NetworkGatewayModule.cs logic must remake

This commit is contained in:
2025-05-04 20:18:39 +03:00
parent 149ea07569
commit b86e13210c
4 changed files with 17 additions and 11 deletions
@@ -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<ClientRecovery>(connectionRequest.Data)!;
var recoveryRequest = _serialization!.Deserialize<ClientRecovery>(connectionRequest.Data, null);
var recoveryInteraction = _hub.GetInteraction(recoveryRequest.Id);
_extractorsCTS[recoveryRequest.Id].Cancel();
@@ -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);
}
}
}
@@ -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<byte>((await udpClient.ReceiveAsync()).Buffer);
var parsed = _serializationToolkit.Deserialize<NetworkMessageHeader>(message.Span)!;
var parsed = _serializationToolkit.Deserialize<NetworkMessageHeader>(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;
}
}
}
+1 -1
View File
@@ -35,7 +35,7 @@ namespace mROA.Implementation
Data = Array.Empty<byte>();
}
public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit,
INetworkMessage networkMessage, IEndPointContext context)
INetworkMessage networkMessage, IEndPointContext? context)
{
MessageType = networkMessage.MessageType;
Data = serializationToolkit.Serialize(networkMessage, context);