private Task RegisterHandler <TMessage, THandler>(Func <IActorRef, IMessageProcessor> processorCreator) where THandler : IHandler <TMessage> where TMessage : class, IHaveProcessId, IHaveId { var handlerActorType = typeof(MessageHandleActor <TMessage, THandler>); var handlerActor = CreateDIActor(handlerActorType, handlerActorType.BeautyName()); _handlersCatalog.Add <TMessage>(processorCreator(handlerActor)); return(Task.CompletedTask); }
public Task RegisterProcess(IProcessDescriptor processDescriptor, string name = null) { var processHubActorType = typeof(ProcessHubActor <>).MakeGenericType(processDescriptor.StateType); var processHubActor = CreateDIActor(processHubActorType, name ?? processDescriptor.ProcessType.BeautyName() + "_Hub"); var processStateHubType = typeof(ProcessStateHubActor <>).MakeGenericType(processDescriptor.StateType); //will be consumed in ProcessActor var processStateHubActor = CreateDIActor(processStateHubType, processDescriptor.StateType.BeautyName() + "_Hub"); var processor = new ActorAskMessageProcessor <IProcessCompleted>(processHubActor); foreach (var acceptMsg in processDescriptor.AcceptMessages) { _processCatalog.Add(acceptMsg.MessageType, processor); } return(Task.CompletedTask); }
public static void Add <TMessage>(this ICompositeMessageProcessor proc, IMessageProcessor messageProcessor) { proc.Add(typeof(TMessage), messageProcessor); }