public async Task StartAsync(CancellationToken cancellationToken)
        {
            switch (_store.Options.Events.Daemon.Mode)
            {
            case DaemonMode.Disabled:
                return;

            case DaemonMode.Solo:
                Coordinator = new SoloCoordinator();
                break;

            case DaemonMode.HotCold:
                Coordinator = new HotColdCoordinator(_store, (DaemonSettings)_store.Options.Events.Daemon, _logger);
                break;
            }

            try
            {
                Agent = _store.BuildProjectionDaemon(_logger);
                await Coordinator.Start(Agent, cancellationToken);
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Unable to start the asynchronous projection agent");
                throw;
            }
        }
        public ServerNode(INetProvider externalNetProvider, INetProvider internalNetProvider, INodeCoordinator coordinator,
                          IMessageFactory factory, IOperationDispatcher protocol, IActorRepository repository,
                          Func <S2CPeer> clientPeerFactory)
        {
            _coordinator            = coordinator;
            Repository              = repository;
            Dispatcher              = protocol;
            DefaultActorCoordinator = typeof(IsisActorCoordinator);
            ExternalNet             = new NetNode <S2CPeer>(externalNetProvider, factory, protocol,
                                                            peerFactory: () =>
            {
                S2CPeer peer = clientPeerFactory();
                peer.Node    = this;
                return(peer);
            });
            InternalNet = new NetNode <S2SPeer>(internalNetProvider, factory, protocol,
                                                peerFactory: () => new S2SPeer {
                Node = this
            });

            foreach (ActorDescription actorDesc in repository.ActorDescriptions)
            {
                Type coordinatorType = actorDesc.Attribute.Coordinator ?? DefaultActorCoordinator;
                var  actorCoord      = (IActorCoordinator)Activator.CreateInstance(coordinatorType);
                actorCoord.Init(this, actorDesc.PrimaryContract.TypeId);
                _actorCoordinatorsByPrimaryContractId.Add(actorDesc.PrimaryContract.TypeId, actorCoord);
            }

            Fiber = new ServerFiber();
        }
Beispiel #3
0
 public AsyncProjectionHostedService(INodeAgent agent, INodeCoordinator coordinator, ILogger <AsyncProjectionHostedService> logger)
 {
     _agent       = agent;
     _coordinator = coordinator;
     _logger      = logger;
 }
Beispiel #4
0
        public async Task RegisterCoordinator(INodeCoordinator coordinator)
        {
            await coordinator.Start(this, _cancellation.Token);

            _coordinator = coordinator;
        }