More modules solved

This commit is contained in:
2025-05-04 19:49:15 +03:00
parent 75c5e5a328
commit 8f97e5b0a6
5 changed files with 19 additions and 12 deletions
@@ -94,7 +94,7 @@ namespace mROA.Implementation.Backend
Task.Run(async () => await streamExtractor.LoopedReceive(cts.Token)); Task.Run(async () => await streamExtractor.LoopedReceive(cts.Token));
_ = streamExtractor.SendFromChannel(interaction.TrustedPostChanel, cts.Token); _ = streamExtractor.SendFromChannel(interaction.TrustedPostChanel, cts.Token);
interaction.PostMessageAsync(new NetworkMessageHeader(_serialization!, interaction.PostMessageAsync(new NetworkMessageHeader(_serialization!,
new IdAssignment { Id = -interaction.ConnectionId })); new IdAssignment { Id = -interaction.ConnectionId }, TODO));
_extractorsCTS[interaction.ConnectionId] = cts; _extractorsCTS[interaction.ConnectionId] = cts;
_hub!.RegisterInteraction(interaction); _hub!.RegisterInteraction(interaction);
Console.WriteLine("Client registered"); Console.WriteLine("Client registered");
@@ -129,7 +129,7 @@ namespace mROA.Implementation
if (sendRecovery) if (sendRecovery)
{ {
await PostMessageAsync( 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(); var ping = await ReceiveChanel.Reader.ReadAsync();
Console.WriteLine($"Ping received {ping.Id}"); Console.WriteLine($"Ping received {ping.Id}");
} }
@@ -19,7 +19,7 @@ namespace mROA.Implementation.Frontend
private IContextualSerializationToolKit? _serialization; private IContextualSerializationToolKit? _serialization;
private ChannelInteractionModule.StreamExtractor _currentExtractor; private ChannelInteractionModule.StreamExtractor _currentExtractor;
private CancellationTokenSource _rawExtractorCancellation; private CancellationTokenSource _rawExtractorCancellation;
private IEndPointContext _context;
public NetworkFrontendBridge(IPEndPoint serverEndPoint) public NetworkFrontendBridge(IPEndPoint serverEndPoint)
{ {
_serverEndPoint = serverEndPoint; _serverEndPoint = serverEndPoint;
@@ -36,6 +36,9 @@ namespace mROA.Implementation.Frontend
case IContextualSerializationToolKit toolkit: case IContextualSerializationToolKit toolkit:
_serialization = toolkit; _serialization = toolkit;
break; break;
case IEndPointContext endPointContext:
_context = endPointContext;
break;
} }
} }
@@ -52,7 +55,7 @@ namespace mROA.Implementation.Frontend
_interactionModule.IsConnected = () => _currentExtractor.IsConnected; _interactionModule.IsConnected = () => _currentExtractor.IsConnected;
_interactionModule.OnDisconnected += _ => { Reconnect(); }; _interactionModule.OnDisconnected += _ => { Reconnect(); };
_interactionModule.PostMessageAsync(new NetworkMessageHeader(_serialization, new ClientConnect())).Wait(); _interactionModule.PostMessageAsync(new NetworkMessageHeader(_serialization, new ClientConnect(), _context)).Wait();
_currentExtractor.SingleReceive(); _currentExtractor.SingleReceive();
var idMessage = _interactionModule.GetNextMessageReceiving(false).GetAwaiter().GetResult(); var idMessage = _interactionModule.GetNextMessageReceiving(false).GetAwaiter().GetResult();
@@ -66,14 +69,14 @@ namespace mROA.Implementation.Frontend
Task.Run(async () => await _currentExtractor.LoopedReceive(_rawExtractorCancellation.Token)); Task.Run(async () => await _currentExtractor.LoopedReceive(_rawExtractorCancellation.Token));
var assignment = _serialization.Deserialize<IdAssignment>(idMessage.Data)!; var assignment = _serialization.Deserialize<IdAssignment>(idMessage.Data, _context)!;
_interactionModule.ConnectionId = -assignment.Id; _interactionModule.ConnectionId = -assignment.Id;
TransmissionConfig.OwnershipRepository = new StaticOwnershipRepository(assignment.Id); TransmissionConfig.OwnershipRepository = new StaticOwnershipRepository(assignment.Id);
} }
private void PrepareExtractor() private void PrepareExtractor()
{ {
_currentExtractor = new ChannelInteractionModule.StreamExtractor(_tcpClient.GetStream(), _serialization!); _currentExtractor = new ChannelInteractionModule.StreamExtractor(_tcpClient.GetStream(), _serialization!, _context);
_ = _currentExtractor.SendFromChannel(_interactionModule!.TrustedPostChanel, _ = _currentExtractor.SendFromChannel(_interactionModule!.TrustedPostChanel,
_rawExtractorCancellation.Token); _rawExtractorCancellation.Token);
@@ -105,7 +108,7 @@ namespace mROA.Implementation.Frontend
public void Disconnect() public void Disconnect()
{ {
_ = _interactionModule!.PostMessageAsync(new NetworkMessageHeader(_serialization!, new ClientDisconnect())); _ = _interactionModule!.PostMessageAsync(new NetworkMessageHeader(_serialization!, new ClientDisconnect(), _context));
_interactionModule.Dispose(); _interactionModule.Dispose();
_tcpClient.Dispose(); _tcpClient.Dispose();
} }
@@ -17,7 +17,7 @@ namespace mROA.Implementation.Frontend
private IContextRepository? _remoteContextRepository; private IContextRepository? _remoteContextRepository;
private IRepresentationModule? _representationModule; private IRepresentationModule? _representationModule;
private IContextualSerializationToolKit? _serializationToolkit; private IContextualSerializationToolKit? _serializationToolkit;
private IEndPointContext _context;
public void Inject<T>(T dependency) public void Inject<T>(T dependency)
{ {
switch (dependency) switch (dependency)
@@ -41,6 +41,9 @@ namespace mROA.Implementation.Frontend
case IContextualSerializationToolKit serializationToolkit: case IContextualSerializationToolKit serializationToolkit:
_serializationToolkit = serializationToolkit; _serializationToolkit = serializationToolkit;
break; break;
case IEndPointContext remoteContext:
_context = remoteContext;
break;
} }
} }
@@ -67,7 +70,7 @@ namespace mROA.Implementation.Frontend
var query = _representationModule!.GetStream(m => var query = _representationModule!.GetStream(m =>
m.MessageType is EMessageType.CallRequest or EMessageType.CancelRequest 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.CallRequest ? typeof(DefaultCallRequest) : null,
m => m.MessageType == EMessageType.CancelRequest ? typeof(CancelRequest) : null, m => m.MessageType == EMessageType.CancelRequest ? typeof(CancelRequest) : null,
m => m.MessageType == EMessageType.EventRequest ? typeof(DefaultCallRequest) : null, m => m.MessageType == EMessageType.EventRequest ? typeof(DefaultCallRequest) : null,
@@ -144,7 +147,7 @@ namespace mROA.Implementation.Frontend
return; return;
} }
_representationModule!.PostCallMessage(request.Id, resultType, result, result.GetType()); _representationModule!.PostCallMessage(request.Id, resultType, result, _context);
} }
private void HandleEventRequest(DefaultCallRequest request) private void HandleEventRequest(DefaultCallRequest request)
+3 -2
View File
@@ -34,10 +34,11 @@ namespace mROA.Implementation
MessageType = EMessageType.Unknown; MessageType = EMessageType.Unknown;
Data = Array.Empty<byte>(); Data = Array.Empty<byte>();
} }
public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit, INetworkMessage networkMessage) public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit,
INetworkMessage networkMessage, IEndPointContext context)
{ {
MessageType = networkMessage.MessageType; MessageType = networkMessage.MessageType;
Data = serializationToolkit.Serialize(networkMessage); Data = serializationToolkit.Serialize(networkMessage, context);
Id = Guid.NewGuid(); Id = Guid.NewGuid();
} }
public Guid Id { get; set; } public Guid Id { get; set; }