Exemplo n.º 1
0
        public IDisposable ProcessEntity(ISetupSystem system, IEntity entity)
        {
            var hasEntityPredicate = system.Group is IHasPredicate;

            if (!hasEntityPredicate)
            {
                system.Setup(entity);
                return(null);
            }

            var groupPredicate = system.Group as IHasPredicate;

            if (groupPredicate.CanProcessEntity(entity))
            {
                system.Setup(entity);
                return(null);
            }

            var disposable = entity
                             .WaitForPredicateMet(groupPredicate.CanProcessEntity)
                             .ContinueWith(x =>
            {
                _entitySubscriptions[system].Remove(x.Result.Id);
                system.Setup(x.Result);
            });

            return(disposable);
        }
Exemplo n.º 2
0
        public SubscriptionToken ProcessEntity(ISetupSystem system, IEntity entity)
        {
            var hasEntityPredicate = system.TargetGroup is IHasPredicate;

            if (!hasEntityPredicate)
            {
                system.Setup(entity);
                return(null);
            }

            var groupPredicate = system.TargetGroup as IHasPredicate;

            if (groupPredicate.CanProcessEntity(entity))
            {
                system.Setup(entity);
                return(null);
            }

            var subscription = entity.WaitForPredicateMet(groupPredicate.CanProcessEntity)
                               .Subscribe(system.Setup);

            var subscriptionToken = new SubscriptionToken(entity, subscription);

            return(subscriptionToken);
        }
Exemplo n.º 3
0
        public IDisposable ProcessEntity(ISetupSystem system, IEntity entity)
        {
            var hasEntityPredicate = system.TargetGroup is IHasPredicate;

            if (!hasEntityPredicate)
            {
                system.Setup(entity);
                return(null);
            }

            var groupPredicate = system.TargetGroup as IHasPredicate;

            if (groupPredicate.CanProcessEntity(entity))
            {
                system.Setup(entity);
                return(null);
            }

            return(entity.WaitForPredicateMet(groupPredicate.CanProcessEntity)
                   .FirstAsync()
                   .Subscribe(x =>
            {
                _entitySubscriptions[system].Remove(x.Id);
                system.Setup(x);
            }));
        }
Exemplo n.º 4
0
        public IEnumerable <SubscriptionToken> Setup(ISetupSystem system)
        {
            var subscriptions = new List <SubscriptionToken>();
            var entities      = PoolManager.GetEntitiesFor(system.TargetGroup);

            entities.ForEachRun(x =>
            {
                var possibleSubscription = ProcessEntity(system, x);
                if (possibleSubscription != null)
                {
                    subscriptions.Add(possibleSubscription);
                }
            });

            return(subscriptions);
        }
Exemplo n.º 5
0
        public void Setup(ISetupSystem system)
        {
            var hasEntityPredicate = system.TargetGroup.TargettedEntities != null;
            var groupAccessor      = PoolManager.CreateGroupAccessor(system.TargetGroup);

            groupAccessor.Entities.ForEachRun(x =>
            {
                if (hasEntityPredicate)
                {
                    if (system.TargetGroup.TargettedEntities(x))
                    {
                        system.Setup(x);
                    }
                    return;
                }

                system.Setup(x);
            });
        }
Exemplo n.º 6
0
        public SubscriptionToken ProcessEntity(ISetupSystem system, IEntity entity)
        {
            var hasEntityPredicate = system.TargetGroup.TargettedEntities != null;

            if (!hasEntityPredicate)
            {
                system.Setup(entity);
                return(null);
            }

            if (system.TargetGroup.TargettedEntities(entity))
            {
                system.Setup(entity);
                return(null);
            }

            var subscription = entity.WaitForPredicateMet(system.TargetGroup.TargettedEntities)
                               .Subscribe(system.Setup);

            var subscriptionToken = new SubscriptionToken(entity, subscription);

            return(subscriptionToken);
        }