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); }
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)); }
private OrleansClient(IGrainFactory factory, IOrleansClientInitializer initializer) { _factory = factory; _initializer = initializer; }