示例#1
0
        public static ConreignApi Create(ConreignApiConfiguration apiConfiguration)
        {
            if (apiConfiguration == null)
            {
                throw new ArgumentNullException(nameof(apiConfiguration));
            }
            var loggerConfiguration = new LoggerConfiguration();

            if (!string.IsNullOrEmpty(apiConfiguration.ElasticSearchUri))
            {
                var elasticOptions = new ElasticsearchSinkOptions(new Uri(apiConfiguration.ElasticSearchUri))
                {
                    AutoRegisterTemplate = true,
                    BufferBaseFilename   = "logs/elastic-buffer"
                };
                loggerConfiguration.WriteTo.Elasticsearch(elasticOptions);
            }
            var logger = loggerConfiguration
                         .WriteTo.LiterateConsole()
                         .WriteTo.RollingFile(Path.Combine(ApplicationPath.CurrentDirectory, "logs", "conreign-api-{Date}.log"))
                         .MinimumLevel.Is(apiConfiguration.MinimumLogLevel)
                         .Enrich.FromLogContext()
                         .CreateLogger()
                         .ForContext(new []
            {
                new PropertyEnricher("ApplicationId", "Conreign.Api"),
                new PropertyEnricher("ClusterId", apiConfiguration.ClusterId),
                new PropertyEnricher("InstanceId", apiConfiguration.InstanceId)
            });

            return(new ConreignApi(apiConfiguration, logger));
        }
        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);
 }
示例#4
0
        public override bool OnStart()
        {
            ServicePointManager.DefaultConnectionLimit = 20;
            var env = CloudConfigurationManager.GetSetting("Environment");

            if (string.IsNullOrEmpty(env))
            {
                throw new InvalidOperationException("Unable to determine environment.");
            }
            var config   = ConreignApiConfiguration.Load(Environment.CurrentDirectory, env);
            var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["PublicApi"];

            Api        = ConreignApi.Create(config);
            Log.Logger = Api.Logger;
            // Starting appplication
            var baseUri = $"{endpoint.Protocol}://{endpoint.IPEndpoint}";

            _app = WebApp.Start <Startup>(baseUri);
            Log.Logger.Information("Conreign API ({Environment}) is started at {BaseUri}",
                                   Api.Configuration.Environment, baseUri);
            return(base.OnStart());
        }
示例#5
0
        public static IDisposable Run(string[] args)
        {
            var apiConfiguration = ConreignApiConfiguration.Load(ApplicationPath.CurrentDirectory, args);
            var api    = ConreignApi.Create(apiConfiguration);
            var logger = api.Logger;

            Log.Logger = logger;
            try
            {
                logger.Information("Starting API...");
                var host = apiConfiguration.IsLocalEnvironment ? "localhost" : "*";
                var url  = $"http://{host}:{apiConfiguration.Port}";
                Startup.Api = api;
                var webApp = WebApp.Start <Startup>(url);
                logger.Information($"API is running at {url}.");
                return(webApp);
            }
            catch (Exception ex)
            {
                logger.Fatal(ex, "Failed to start API.");
                throw;
            }
        }
示例#6
0
 private ConreignApi(ConreignApiConfiguration apiConfiguration, ILogger logger)
 {
     Configuration = apiConfiguration;
     Logger        = logger;
 }