public static IAppBuilder MapConreignApi(
            this IAppBuilder builder,
            IOrleansClientInitializer initializer,
            ConreignApiConfiguration configuration)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (initializer == null)
            {
                throw new ArgumentNullException(nameof(initializer));
            }
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }
            var container = new Container();

            container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
            container.RegisterConreignApi(initializer, configuration);
            var hubConfiguration = ConfigureSignalR(container);

            builder.UseWelcomePage("/");
            builder.MapSignalR <SimpleInjectorHubDispatcher>("/$/api", hubConfiguration);
            return(builder);
        }
 public static Container RegisterConreignApi(this Container container, IOrleansClientInitializer initializer,
                                             ConreignApiConfiguration configuration)
 {
     if (container == null)
     {
         throw new ArgumentNullException(nameof(container));
     }
     if (initializer == null)
     {
         throw new ArgumentNullException(nameof(initializer));
     }
     if (configuration == null)
     {
         throw new ArgumentNullException(nameof(configuration));
     }
     container.Register(() => Log.Logger.ForContext("ApplicationId", "Conreign.Api"), Lifestyle.Singleton);
     container.Register(() => OrleansClient.Initialize(initializer).Result, Lifestyle.Singleton);
     container.Register <GameHubCountersCollection>(Lifestyle.Singleton);
     container.RegisterCollection <HubPipelineModule>(new[] { Assembly.GetExecutingAssembly() });
     RegisterHubs(container);
     container.RegisterSingleton(new SlowConnectionBehaviourOptions(TimeSpan.FromSeconds(3)));
     container.RegisterClientHandlerFactory(c =>
     {
         // c.Behaviours.Add(typeof(SlowConnectionBehaviour<,>));
     });
     return(container);
 }
Beispiel #3
0
        public static Task <OrleansClient> Initialize(IOrleansClientInitializer initializer)
        {
            if (initializer == null)
            {
                throw new ArgumentNullException(nameof(initializer));
            }
            var policy = Policy
                         .Handle <Exception>()
                         .WaitAndRetry(5, attempt => TimeSpan.FromSeconds(attempt * 3));
            var result = policy.ExecuteAndCapture(initializer.Initialize);

            if (result.Outcome == OutcomeType.Failure)
            {
                throw new ConnectionException($"Failed to connect to the cluster: {result.FinalException.Message}",
                                              result.FinalException);
            }
            var client = new OrleansClient(GrainClient.GrainFactory, initializer);

            return(Task.FromResult(client));
        }
Beispiel #4
0
 private OrleansClient(IGrainFactory factory, IOrleansClientInitializer initializer)
 {
     _factory     = factory;
     _initializer = initializer;
 }