예제 #1
0
        internal ClusterActorSystem(
            ClusterConfiguration configuration,
            Assembly[] assemblies,
            Action <IServiceCollection> di,
            ActorInvocationPipeline pipeline,
            IActorRefInvoker invoker)
            : base(invoker)
        {
            Pipeline = pipeline;

            using (Trace.Execution("Orleans silo initialization"))
            {
                var builder = new SiloHostBuilder()
                              .UseConfiguration(configuration)
                              .ConfigureServices(services =>
                {
                    services.AddSingleton <IActorSystem>(this);
                    services.AddSingleton(this);
                    services.TryAddSingleton <IActorActivator>(x => new DefaultActorActivator(x));
                    services.AddSingleton <Func <MethodInfo, InvokeMethodRequest, IGrain, string> >(DashboardIntegration.Format);

                    di?.Invoke(services);
                });

                builder.ConfigureApplicationParts(apm => apm
                                                  .AddFromAppDomain()
                                                  .WithCodeGeneration());

                Host = builder.Build();
            }

            Silo = Host.Services.GetRequiredService <Silo>();
            Initialize(Host.Services);
        }
예제 #2
0
        private static async Task <ISiloHost> StartSilo(Type[] types)
        {
            // define the cluster configuration
            var builder = new SiloHostBuilder()
                          .UseLocalhostClustering()
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "NekaraOrleansBenchmarks";
            });

            //.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(LockGrain).Assembly).WithReferences());
            //.ConfigureLogging(logging => logging.AddConsole());

            types.ToList().ForEach(t => {
                Console.WriteLine("[Orleans TestPlatform] - Adding Type " + t.FullName + "'s Assembly " + t.Assembly.FullName);
                builder.ConfigureApplicationParts(parts => parts.AddApplicationPart(t.Assembly).WithReferences());
            });

            var host = builder.Build();
            await host.StartAsync();

            Console.WriteLine("... Silo successfully started \n");
            return(host);
        }
예제 #3
0
        private static async Task <ISiloHost> InitialiseSilo()
        {
            var builder = new SiloHostBuilder()
                          .UseLocalhostClustering()
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = GameConstant.ClusterId;
                options.ServiceId = GameConstant.ServiceId;
            })
                          .Configure <GrainCollectionOptions>(options =>
            {
                options.CollectionAge       = TimeSpan.FromSeconds(61);
                options.DeactivationTimeout = TimeSpan.FromSeconds(5);
                options.CollectionQuantum   = TimeSpan.FromSeconds(1);
            })
                          .ConfigureLogging(log => log.SetMinimumLevel(LogLevel.Warning).AddConsole());

            builder.ConfigureApplicationParts(parts =>
            {
                parts.AddApplicationPart(typeof(GChatRoomEntry).Assembly).WithReferences();
            });
            var host = builder.Build();
            await host.StartAsync();



            return(host);
        }
예제 #4
0
 protected Task RunSilo()
 {
     try
     {
         var builder = new SiloHostBuilder();
         builder.Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
         .UseLocalhostClustering()
         .Configure <ClusterOptions>(options =>
         {
             options.ClusterId = TableRoom.GameConstant.ClusterId;
             options.ServiceId = TableRoom.GameConstant.ServiceId;
         })
         .Configure <GrainCollectionOptions>(options =>
         {
             options.CollectionAge       = TimeSpan.FromSeconds(61);
             options.DeactivationTimeout = TimeSpan.FromSeconds(5);
             options.CollectionQuantum   = TimeSpan.FromSeconds(1);
         })
         .ConfigureLogging(log => log.SetMinimumLevel(LogLevel.Error).AddConsole());//LogLevel.Warning
         builder.ConfigureApplicationParts(parts =>
         {
             parts.AddApplicationPart(typeof(GChatRoomEntry).Assembly).WithReferences();
         });
         m_Host = builder.Build();
         m_Host.StartAsync().Wait();
     }
     catch (Exception e)
     {
         Log.Debug(e.ToString());
     }
     return(Task.CompletedTask);
 }
예제 #5
0
        static void Main(string[] args)
        {
            config = new ConfigurationBuilder()

                     .AddJsonFile("appsettings.json", true, true)
                     .AddEnvironmentVariables()
                     .Build();


            //     Console.WriteLine($"DBConnection is :{dbConnection}");
            var siloBuilder = new SiloHostBuilder()
                              .UseDashboard(option =>
            {
            })
                              .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = config.GetValue <string>("ClusterId");
                options.ServiceId = config.GetValue <string>("ServiceId");
            });

#if (DEBUG)
            siloBuilder = configLocalEnv(siloBuilder);
#else
            siloBuilder = configAzureEnv(siloBuilder, config);
#endif



            siloBuilder.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(Player).Assembly).WithReferences())
            .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(WorldService).Assembly).WithReferences())
            .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(Game.Combat.Grains.Combat).Assembly).WithReferences())
            .ConfigureLogging(builder => builder.SetMinimumLevel(LogLevel.Warning).AddConsole())
            .AddApplicationInsightsTelemetryConsumer(config.GetValue <string>("AIKey"))
            .ConfigureAppConfiguration(c =>
            {
                c.AddJsonFile("appsettings.json", true, true)
                .AddEnvironmentVariables();
            })
            .ConfigureServices(service =>
            {
                service.AddSingleton <ICharacterFactory, CharacterFactory>();
                service.AddSingleton <RoomFactory>();
            });

            silo = siloBuilder.Build();
            CommandHelper.BasePath = config.GetValue <string>(Constants.MudLibKey);
            Task.Run(StartSilo);

            AssemblyLoadContext.Default.Unloading += context =>
            {
                Task.Run(StopSilo);
                siloStopped.WaitOne();
            };

            siloStopped.WaitOne();
        }
예제 #6
0
        protected override Task OnInit()
        {
            var builder = new SiloHostBuilder()
                          .UseLocalhostClustering()
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "AdventureApp";
            })
                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback);

            foreach (var t in types)
            {
                builder.ConfigureApplicationParts(parts => parts.AddApplicationPart(t.Assembly).WithReferences());
            }

            builder.ConfigureLogging(logging => logging.AddConsole());
            silo = builder.Build();
            return(Task.CompletedTask);
        }
예제 #7
0
        public PingBenchmark(int numSilos, bool startClient, bool grainsOnSecondariesOnly = false)
        {
            for (var i = 0; i < numSilos; ++i)
            {
                var primary     = i == 0 ? null : new IPEndPoint(IPAddress.Loopback, 11111);
                var siloBuilder = new SiloHostBuilder()
                                  .ConfigureDefaults()
                                  .UseLocalhostClustering(
                    siloPort: 11111 + i,
                    gatewayPort: 30000 + i,
                    primarySiloEndpoint: primary);

                if (i == 0 && grainsOnSecondariesOnly)
                {
                    siloBuilder.ConfigureApplicationParts(parts =>
                                                          parts.AddApplicationPart(typeof(IPingGrain).Assembly));
                    siloBuilder.ConfigureServices(services =>
                    {
                        services.Remove(services.First(s => s.ImplementationType?.Name == "ApplicationPartValidator"));
                    });
                }
                else
                {
                    siloBuilder.ConfigureApplicationParts(parts =>
                                                          parts.AddApplicationPart(typeof(IPingGrain).Assembly)
                                                          .AddApplicationPart(typeof(PingGrain).Assembly));
                }

                var silo = siloBuilder.Build();
                silo.StartAsync().GetAwaiter().GetResult();
                this.hosts.Add(silo);
            }

            if (grainsOnSecondariesOnly)
            {
                Thread.Sleep(4000);
            }

            if (startClient)
            {
                var clientBuilder = new ClientBuilder()
                                    .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IPingGrain).Assembly))
                                    .Configure <ClusterOptions>(options => options.ClusterId = options.ServiceId = "dev");

                if (numSilos == 1)
                {
                    clientBuilder.UseLocalhostClustering();
                }
                else
                {
                    var gateways = Enumerable.Range(30000, numSilos).Select(i => new IPEndPoint(IPAddress.Loopback, i)).ToArray();
                    clientBuilder.UseStaticClustering(gateways);
                }

                this.client = clientBuilder.Build();
                this.client.Connect().GetAwaiter().GetResult();
                var grainFactory = this.client;

                this.grain = grainFactory.GetGrain <IPingGrain>(Guid.NewGuid().GetHashCode());
                this.grain.Run().GetAwaiter().GetResult();
            }
        }
예제 #8
0
        private ISiloHost InitialiseSilo(int siloPort, int gatewayPort)
        {
            var gameconfig = GameModuleManager.Instance.GetModule <ConfigManager>().GameConfig;
            var builder    = new SiloHostBuilder()

                             /*
                              * .Configure<EndpointOptions>(options =>
                              * {
                              *  options.AdvertisedIPAddress = IPAddress.Parse(gameconfig.SiloIp);
                              *  options.SiloPort = gameconfig.SiloPort;
                              *  options.GatewayPort = gameconfig.SiloGatePort;
                              *
                              *  options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, 40000);
                              *  options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, 50000);
                              * })*/
                             //.UseLocalhostClustering(gameconfig.SiloPort, gameconfig.SiloGatePort)
                             //.ConfigureEndpoints(gameconfig.SiloIp, gameconfig.SiloPort, gameconfig.SiloGatePort)
                             //.UseLocalhostClustering()
                             .UseAdoNetClustering(options =>
            {
                options.Invariant        = gameconfig.DB_Name;          //GameConstant.DB_Name;
                options.ConnectionString = gameconfig.Str_DBConnection; //GameConstant.Str_DBConnection;
            })
                             .ConfigureEndpoints(siloPort: siloPort, gatewayPort: gatewayPort)
                             .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = gameconfig.ClusterId;
                options.ServiceId = gameconfig.ServiceId;
            })
                             .Configure <GrainCollectionOptions>(options =>
            {
                options.CollectionAge       = TimeSpan.FromSeconds(61);
                options.DeactivationTimeout = TimeSpan.FromSeconds(5);
                options.CollectionQuantum   = TimeSpan.FromSeconds(1);
            })
                             .ConfigureLogging(log => log.SetMinimumLevel(LogLevel.Warning).AddConsole());



            builder.ConfigureApplicationParts(parts =>
            {
                parts.AddApplicationPart(typeof(HallGrains.GateWayGrain).Assembly).WithReferences();
            });

            /*
             * if(gatewayPort == 30000)
             * {
             *  builder.ConfigureApplicationParts(parts =>
             *  {
             *      parts.AddApplicationPart(typeof(HallGrains.MainEntryGrain).Assembly).WithReferences();
             *  });
             * }
             * else
             * {
             *  builder.ConfigureApplicationParts(parts =>
             *  {
             *      parts.AddApplicationPart(typeof(MysqlGrains.MysqlEntryGrain).Assembly).WithReferences();
             *  });
             * }*/

            var host = builder.Build();

            host.StartAsync().Wait();



            return(host);
        }
예제 #9
0
파일: Program.cs 프로젝트: yymqwl/Barrage
        private static async Task <ISiloHost> InitialiseSilo(int siloPort, int gatewayPort)
        {
            var builder = new SiloHostBuilder()

                          /*
                           * .UseAdoNetClustering(options =>
                           * {
                           *  options.Invariant = Invariant;
                           *  options.ConnectionString = ConnectionString;
                           * })
                           * .UseAdoNetReminderService(options =>
                           * {
                           *  options.Invariant = Invariant;
                           *  options.ConnectionString = ConnectionString;
                           * })*/
                          /*
                           * .AddAdoNetGrainStorage("OrleansStorage", options =>
                           * {
                           *  options.Invariant = Invariant;
                           *  options.ConnectionString = ConnectionString;
                           *  options.UseJsonFormat = true;
                           * })*/
                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                          //.ConfigureEndpoints(siloPort: siloPort, gatewayPort: gatewayPort)
                          .UseLocalhostClustering()
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = ClusterId;
                options.ServiceId = ServiceId;
            })
                          .Configure <GrainCollectionOptions>(options =>
            {
                options.CollectionAge       = TimeSpan.FromSeconds(61);
                options.DeactivationTimeout = TimeSpan.FromSeconds(5);
                options.CollectionQuantum   = TimeSpan.FromSeconds(1);
            })
                          //.AddMemoryGrainStorageAsDefault()
                          //.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(MainEntryGrain).Assembly).WithReferences())
                          .ConfigureLogging(log => log.SetMinimumLevel(LogLevel.Warning).AddConsole());

            //.ConfigureLogging(log => log.AddConsole())
            //.AddMemoryGrainStorage(HallGrains.GameConstant.HallPubSubStore)
            //.AddSimpleMessageStreamProvider(HallGrains.GameConstant.HallStreamProvider) ;

            builder.ConfigureApplicationParts(parts =>
            {
                parts.AddApplicationPart(typeof(HallGrains.MainEntryGrain).Assembly).WithReferences();
                //parts.AddApplicationPart(typeof(MysqlGrains.MysqlEntryGrain).Assembly).WithReferences();
            });

            /*
             * if(gatewayPort == 30000)
             * {
             *  builder.ConfigureApplicationParts(parts =>
             *  {
             *      parts.AddApplicationPart(typeof(HallGrains.MainEntryGrain).Assembly).WithReferences();
             *  });
             * }
             * else
             * {
             *  builder.ConfigureApplicationParts(parts =>
             *  {
             *      parts.AddApplicationPart(typeof(MysqlGrains.MysqlEntryGrain).Assembly).WithReferences();
             *  });
             * }*/

            var host = builder.Build();
            await host.StartAsync();



            return(host);
        }