Exemplo n.º 1
0
        internal static PID GetGuardianPID(ISupervisorStrategy strategy)
        {
            GuardianProcess ValueFactory(ISupervisorStrategy s) => new GuardianProcess(s);

            var guardian = GuardianStrategies.GetOrAdd(strategy, ValueFactory);

            return(guardian.Pid);
        }
Exemplo n.º 2
0
 internal static PID GetGuardianPID(ISupervisorStrategy strategy)
 {
     if (!_guardians.TryGetValue(strategy, out var guardian))
     {
         guardian             = new GuardianProcess(strategy);
         _guardians[strategy] = guardian;
     }
     return(guardian.Pid);
 }
Exemplo n.º 3
0
        public Context(Func <IActor> producer, ISupervisorStrategy supervisorStrategy, Receive middleware, PID parent)
        {
            _producer           = producer;
            _supervisorStrategy = supervisorStrategy;
            _middleware         = middleware;
            Parent    = parent;
            _behavior = new Stack <Receive>();
            _behavior.Push(ActorReceive);

            IncarnateActor();
        }
Exemplo n.º 4
0
 public Props Copy(Func <IActor> producer          = null, IDispatcher dispatcher = null,
                   Func <IMailbox> mailboxProducer = null, ISupervisorStrategy supervisor = null)
 {
     return(new Props
     {
         Producer = producer ?? Producer,
         _dispatcher = dispatcher ?? Dispatcher,
         _mailboxProducer = mailboxProducer ?? _mailboxProducer,
         _supervisor = supervisor
     });
 }
Exemplo n.º 5
0
        public ActorProcess(
            IActorProcessConfiguration configuration,
            IActorRegistry registry,
            ISupervisorStrategy supervisionStrategy)
        {
            _registry            = registry;
            _supervisionStrategy = supervisionStrategy;
            _mailbox             = new BlockingCollectionMailbox(this, registry);

            Configuration = configuration;
            _children     = new List <IActorProcess>();
        }
Exemplo n.º 6
0
        public LocalContext(Func <IActor> producer, ISupervisorStrategy supervisorStrategy, Receive receiveMiddleware, Sender senderMiddleware, PID parent)
        {
            _producer           = producer;
            _supervisorStrategy = supervisorStrategy;
            _receiveMiddleware  = receiveMiddleware;
            _senderMiddleware   = senderMiddleware;

            //Parents are implicitly watching the child
            //The parent is not part of the Watchers set
            Parent = parent;

            IncarnateActor();
        }
Exemplo n.º 7
0
        internal GuardianProcess(ISupervisorStrategy strategy)
        {
            _supervisorStrategy = strategy;

            var name = $"Guardian{ProcessRegistry.Instance.NextId()}";

            var(pid, absent) = ProcessRegistry.Instance.TryAdd(name, this);
            if (!absent)
            {
                throw new ProcessNameExistException(name, pid);
            }
            Pid = pid;
        }
Exemplo n.º 8
0
        internal GuardianProcess(ActorSystem system, ISupervisorStrategy strategy) : base(system)
        {
            _supervisorStrategy = strategy;

            var name = $"Guardian{System.ProcessRegistry.NextId()}";

            var(pid, ok) = System.ProcessRegistry.TryAdd(name, this);

            if (!ok)
            {
                throw new ProcessNameExistException(name, pid);
            }

            Pid = pid;
        }
Exemplo n.º 9
0
        public Context(Func <IActor> producer, ISupervisorStrategy supervisorStrategy, Receive receiveMiddleware, Sender senderMiddleware, PID parent)
        {
            _producer           = producer;
            _supervisorStrategy = supervisorStrategy;
            _receiveMiddleware  = receiveMiddleware;
            _senderMiddleware   = senderMiddleware;
            Parent = parent;

            IncarnateActor();

            //fast path
            if (parent != null)
            {
                _watchers = new FastSet <PID>();
                _watchers.Add(parent);
            }
        }
Exemplo n.º 10
0
        public Context(Func <IActor> producer, ISupervisorStrategy supervisorStrategy, Receive receiveMiddleware, Sender senderMiddleware, PID parent)
        {
            _producer           = producer;
            _supervisorStrategy = supervisorStrategy;
            _receiveMiddleware  = receiveMiddleware;
            _senderMiddleware   = senderMiddleware;
            Parent    = parent;
            _behavior = new Stack <Receive>();
            _behavior.Push(ActorReceive);

            IncarnateActor();

            //fast path
            if (parent != null)
            {
                _watchers = new HashSet <PID>
                {
                    parent
                };
            }
        }
 public RemoteActorProcess(IActorProcessConfiguration configuration, IActorRegistry registry, ISupervisorStrategy supervisionStrategy, ISerializer serializer) : base(configuration, registry, supervisionStrategy)
 {
     _remoteReaderEndpoint = new RemoteReaderEndpoint(this, serializer, registry);
 }
Exemplo n.º 12
0
 public Props WithSupervisor(ISupervisorStrategy supervisor)
 {
     return(Copy(supervisor: supervisor));
 }