コード例 #1
0
        internal RootManager(WorkspaceSuperviser superviser, IStateDispatcherConfigurator stateDispatcher, IEnumerable <StateBuilderBase> states,
                             IEnumerable <IEffect?> effects, IEnumerable <IMiddleware?> middlewares, bool sendBackSetting, Maybe <IComponentContext> componentContext)
        {
            _sendBackSetting = sendBackSetting;
            _engine          = MutatingEngine.Create(superviser, stateDispatcher.Configurate);
            _effects         = effects.Where(e => e != null).ToArray() !;
            _middlewares     = middlewares.Where(m => m != null).ToArray() !;

            foreach (var stateBuilder in states)
            {
                var(container, key) = stateBuilder.Materialize(_engine, componentContext);

                _stateContainers.GetOrAdd(key.OrElse(string.Empty), _ => new ConcurrentBag <StateContainer>()).Add(container);
            }

            _states = _stateContainers.SelectMany(b => b.Value).ToArray();

            foreach (var middleware in _middlewares)
            {
                middleware.Initialize(this);
            }

            foreach (var middleware in _middlewares)
            {
                middleware.AfterInitializeAllMiddlewares();
            }
        }
コード例 #2
0
        public static RootManager CreateManager(WorkspaceSuperviser superviser, Action <ManagerBuilder> builder)
        {
            var managerBuilder = new ManagerBuilder(superviser);

            builder(managerBuilder);
            return(managerBuilder.Build(Maybe <IComponentContext> .Nothing, Maybe <AutofacOptions> .Nothing));
        }
コード例 #3
0
 public MutatingEngine(IDataSource <TData> dataSource) : base(Task.FromResult <IActorRef>(ActorRefs.Nobody), new WorkspaceSuperviser())
 {
     _mutator    = Task.FromResult <IActorRef>(ActorRefs.Nobody);
     _dataSource = dataSource;
     _superviser = new WorkspaceSuperviser();
     _responder  = new ResponderList(_dataSource.SetData);
 }
コード例 #4
0
 internal MutatingEngine(Task <IActorRef> mutator, IDataSource <TData> dataSource, WorkspaceSuperviser superviser)
     : base(mutator, superviser)
 {
     _mutator    = mutator;
     _dataSource = dataSource;
     _superviser = superviser;
     _responder  = new ResponderList(_dataSource.SetData);
 }
コード例 #5
0
 internal MutatingEngine(Task <IActorRef> mutator, IDataSource <TData> dataSource, WorkspaceSuperviser superviser)
     : base(mutator, superviser)
 {
     _mutator    = mutator;
     _dataSource = dataSource;
     _superviser = superviser;
     _responder  = new Subject <TData>();
     _responder.Subscribe(dataSource.SetData);
 }
コード例 #6
0
        public static MutatingEngine Create(WorkspaceSuperviser superviser, Func <Props, Props>?configurate = null)
        {
            var mutatorProps = Props.Create <MutationActor>();

            mutatorProps = configurate?.Invoke(mutatorProps) ?? mutatorProps;

            var mutator = superviser.Create(mutatorProps, "Mutator");

            return(new MutatingEngine(mutator, superviser));
        }
コード例 #7
0
 public EventSource(WorkspaceSuperviser superviser, Task <IActorRef> mutator, Func <TData, TRespond> transform,
                    Func <TData, bool>?where, IObservable <TData> handler)
     : base(mutator, superviser)
 {
     if (where == null)
     {
         handler.Select(transform).Subscribe(Sender());
     }
     else
     {
         handler.Where(where).Select(transform).Subscribe(Sender());
     }
 }
コード例 #8
0
        public static IAnalyzer <TWorkspace, TData> From <TWorkspace, TData>(TWorkspace workspace,
                                                                             WorkspaceSuperviser superviser)
            where TWorkspace : WorkspaceBase <TData> where TData : class
        {
            var evtSource = new SourceFabricator <TWorkspace, TData>();

            var actor = superviser.Create(
                Props.Create(() => new AnalyzerActor <TWorkspace, TData>(workspace, evtSource.Send)), "AnalyzerActor");

            evtSource.Init(actor, superviser);

            return(new Analyzer <TWorkspace, TData>(actor,
                                                    evtSource.EventSource ?? throw new InvalidOperationException("Create Analyzer")));
        }
コード例 #9
0
 public EventSource(WorkspaceSuperviser superviser, Task <IActorRef> mutator, Func <Maybe <TData>, Maybe <TRespond> > transform, Maybe <Func <Maybe <TData>, Maybe <bool> > > where, IRespondHandler <TData> handler)
     : base(mutator, superviser)
 {
     where.Match
     (
         w =>
     {
         handler.Register(d =>
         {
             if (w(d).OrElse(false))
             {
                 Send(transform(d));
             }
         });
     },
         () => handler.Register(d => Send(transform(d)))
     );
 }
コード例 #10
0
        public static ExtendedMutatingEngine <TData> From <TData>(IExtendedDataSource <TData> source, WorkspaceSuperviser superviser, Func <Props, Props>?configurate = null)
            where TData : class
        {
            var mutatorProps = Props.Create <MutationActor>();

            mutatorProps = configurate?.Invoke(mutatorProps) ?? mutatorProps;

            var mutator = superviser.Create(mutatorProps, "Mutator");

            return(new ExtendedMutatingEngine <TData>(mutator, source, superviser));
        }
コード例 #11
0
 protected MutatingEngine(Task <IActorRef> mutator, WorkspaceSuperviser superviser)
     : base(mutator)
 {
     _mutator   = mutator;
     Superviser = superviser;
 }
コード例 #12
0
 public Buildhelper(WorkspaceSuperviser superviser, Action <ManagerBuilder, Maybe <IComponentContext> > action)
 {
     Superviser = superviser;
     Action     = action;
 }
コード例 #13
0
 public AnalyzerEventSource(Task <IActorRef> mutator, WorkspaceSuperviser superviser)
     : base(mutator, superviser)
 {
 }
コード例 #14
0
 public void Init(Task <IActorRef> actor, WorkspaceSuperviser superviser)
 {
     EventSource = new AnalyzerEventSource <TWorkspace, TData>(actor, superviser);
 }
コード例 #15
0
 public EventSource(WorkspaceSuperviser superviser, Task <IActorRef> mutator, IObservable <TRespond> handler)
     : base(mutator, superviser)
 {
     handler.Subscribe(Sender());
 }