New distribution model base

This commit is contained in:
2025-07-14 21:03:12 +03:00
parent 95ec6767fa
commit 17a6d3aad6
13 changed files with 94 additions and 79 deletions
@@ -9,72 +9,65 @@ namespace mROA.Implementation.Frontend
{
public class RequestExtractor : IRequestExtractor
{
private IExecuteModule _executeModule;
private IMethodRepository _methodRepository;
private IRepresentationModule _representationModule;
private IContextualSerializationToolKit _serializationToolkit;
private IEndPointContext _context;
public RequestExtractor(IExecuteModule executeModule, IMethodRepository methodRepository, IRepresentationModule representationModule, IContextualSerializationToolKit serializationToolkit, IEndPointContext context)
public RequestExtractor(IExecuteModule executeModule, IRepresentationModule representationModule, IEndPointContext context)
{
_executeModule = executeModule;
_methodRepository = methodRepository;
_representationModule = representationModule;
_serializationToolkit = serializationToolkit;
_context = context;
}
public async Task StartExtraction()
{
ThrowIfNotInjected();
var streamTokenSource = new CancellationTokenSource();
var query = _representationModule.GetStream(m =>
m.MessageType is EMessageType.CallRequest or EMessageType.CancelRequest
or EMessageType.EventRequest or EMessageType.ClientDisconnect, _context,
var query = _representationModule.GetStream(Rule, _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,
m => m.MessageType == EMessageType.ClientDisconnect ? typeof(ClientDisconnect) : null);
Converters);
await foreach (var command in query)
{
switch (command.originalType)
{
case EMessageType.CallRequest:
HandleCallRequest((DefaultCallRequest)command.parced);
break;
case EMessageType.ClientDisconnect:
return;
case EMessageType.EventRequest:
HandleEventRequest((DefaultCallRequest)command.parced);
break;
case EMessageType.CancelRequest:
HandleCancelRequest((command.parced as CancelRequest)!);
break;
default:
continue;
}
PushMessage(command.parced, command.originalType);
}
}
private void ThrowIfNotInjected()
public void PushMessage(object parced, EMessageType originalType)
{
if (_serializationToolkit == null)
throw new NullReferenceException("Serializing toolkit is null.");
if (_executeModule == null)
throw new NullReferenceException("Execute module is null.");
if (_representationModule == null)
throw new NullReferenceException("Representation module is null.");
if (_methodRepository == null)
throw new NullReferenceException("Method repository is null.");
switch (originalType)
{
case EMessageType.CallRequest:
HandleCallRequest((DefaultCallRequest)parced);
break;
case EMessageType.ClientDisconnect:
return;
case EMessageType.EventRequest:
HandleEventRequest((DefaultCallRequest)parced);
break;
case EMessageType.CancelRequest:
HandleCancelRequest((parced as CancelRequest)!);
break;
default:
return;
}
}
public Predicate<NetworkMessageHeader> Rule { get; } = m =>
m.MessageType is EMessageType.CallRequest or EMessageType.CancelRequest
or EMessageType.EventRequest or EMessageType.ClientDisconnect;
public Func<NetworkMessageHeader, Type?>[] Converters { get; } = {
m => m.MessageType == EMessageType.CallRequest ? typeof(DefaultCallRequest) : null,
m => m.MessageType == EMessageType.CancelRequest ? typeof(CancelRequest) : null,
m => m.MessageType == EMessageType.EventRequest ? typeof(DefaultCallRequest) : null,
m => m.MessageType == EMessageType.ClientDisconnect ? typeof(ClientDisconnect) : null
};
private void HandleCancelRequest(CancelRequest req)
{
_executeModule.Execute(req, _context.RealRepository, _representationModule, _context);