private static ReactiveServiceType[][] Validate(params ReactiveServiceType[][] groups)
        {
            if (groups == null)
            {
                groups = Array.Empty <ReactiveServiceType[]>();
            }

            var roles        = new HashSet <ReactiveServiceType>();
            var missingRoles = new List <ReactiveServiceType>();

            foreach (var group in groups)
            {
                foreach (var role in group)
                {
                    if (!roles.Add(role))
                    {
                        throw new ArgumentException(
                                  string.Format(CultureInfo.InvariantCulture, "More than one role for '{0}' specified.", role));
                    }
                }
            }

            if (!roles.Contains(ReactiveServiceType.MessagingService))
            {
                missingRoles.Add(ReactiveServiceType.MessagingService);
            }
            if (!roles.Contains(ReactiveServiceType.MetadataService))
            {
                missingRoles.Add(ReactiveServiceType.MetadataService);
            }
            if (!roles.Contains(ReactiveServiceType.StateStoreService))
            {
                missingRoles.Add(ReactiveServiceType.StateStoreService);
            }
            if (!roles.Contains(ReactiveServiceType.KeyValueStoreService))
            {
                missingRoles.Add(ReactiveServiceType.KeyValueStoreService);
            }
            if (!roles.Contains(ReactiveServiceType.QueryEvaluator))
            {
                missingRoles.Add(ReactiveServiceType.QueryEvaluator);
            }
            if (!roles.Contains(ReactiveServiceType.QueryCoordinator))
            {
                missingRoles.Add(ReactiveServiceType.QueryCoordinator);
            }

            if (missingRoles.Count > 0)
            {
                var newGroups = new ReactiveServiceType[groups.Length + 1][];
                Array.Copy(groups, newGroups, groups.Length);
                newGroups[groups.Length] = missingRoles.ToArray();
                groups = newGroups;
            }

            return(groups);
        }
示例#2
0
 protected ReactivePlatformServiceBase(IReactivePlatform platform, IRunnable runnable, ReactiveServiceType serviceType)
     : base(runnable, serviceType)
 {
     Platform = platform;
 }
 protected ReactiveServiceBase(IRunnable runnable, ReactiveServiceType serviceType)
 {
     Runnable    = runnable;
     ServiceType = serviceType;
 }
示例#4
0
 protected ReactiveQueryEvaluatorBase(IReactivePlatform platform, IRunnable runnable, ReactiveServiceType serviceType)
     : base(platform, runnable, serviceType)
 {
 }