Exemple #1
0
        public async Task <PlacementResult> SelectOrAddActivation(
            ActivationAddress sendingAddress,
            GrainId targetGrain,
            IPlacementContext context,
            PlacementStrategy strategy)
        {
            if (targetGrain.IsClient)
            {
                var res = await clientObserversPlacementDirector.OnSelectActivation(strategy, targetGrain, context);

                if (res == null)
                {
                    throw new ClientNotAvailableException(targetGrain);
                }
                return(res);
            }

            var actualStrategy = strategy ?? defaultPlacementStrategy;
            var result         = await SelectActivation(targetGrain, context, actualStrategy);

            if (result != null)
            {
                return(result);
            }

            return(await AddActivation(targetGrain, context, actualStrategy));
        }
        public async Task <PlacementResult> SelectOrAddActivation(
            PlacementTarget targetGrain,
            IPlacementRuntime context,
            PlacementStrategy strategy)
        {
            if (targetGrain.IsClient)
            {
                var res = await clientObserversPlacementDirector.OnSelectActivation(strategy, (GrainId)targetGrain.GrainIdentity, context);

                if (res == null)
                {
                    throw new ClientNotAvailableException(targetGrain.GrainIdentity);
                }
                return(res);
            }

            var actualStrategy = strategy ?? defaultPlacementStrategy;
            var director       = ResolveSelector(actualStrategy);
            var result         = await director.OnSelectActivation(strategy, targetGrain.GrainIdentity, context);

            if (result != null)
            {
                return(result);
            }

            return(await AddActivation(targetGrain, context, actualStrategy));
        }