New distribution model base
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user