public static App Initialize(AppConfig config, Func<StartOptions, NancyOptions, IDisposable> hostFunc) { config.ThrowIfInvalid(); var poller = new LeaderInfoPoller(config.StorageAccount); var startOptions = new StartOptions(); startOptions.Urls.Add(config.InternalUri); startOptions.Urls.Add(config.PublicUri); var auth = LoadAuth.LoadFromStorageAccount(config.StorageAccount); AddSystemAccess(auth, config.StorageAccount.GetSysPassword()); var api = ApiImplementation.Create(config.StorageAccount, poller, auth); var nancyOptions = new NancyOptions { Bootstrapper = new NancyBootstrapper(api, new UserValidator(auth)) }; var nodeInfo = new LeaderInfo(config.InternalUri); var selector = new LeaderLock(config.StorageAccount, nodeInfo, api); var cts = new CancellationTokenSource(); // fire up leader and scheduler first var tasks = new List<Task> { selector.KeepTryingToAcquireLock(cts.Token), poller.KeepPollingForLeaderInfo(cts.Token), }; // bind the API var host = hostFunc(startOptions, nancyOptions); return new App(host, cts, tasks); }
public static void Main(params string[] args) { InitLogging(); AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; var range = args.FirstOrDefault() ?? "8"; var config = new AppConfig { PublicUri = "http://127.0.0.1:" + range + "001", InternalUri = "http://127.0.0.1:" + range + "002", StorageAccount = new SingleAccountFactory(CloudStorageAccount.DevelopmentStorageAccount) }; var app = App.Initialize(config); Log.Information( "Console app started on {public} and {private}", config.PublicUri, config.InternalUri ); Console.ReadLine(); app.RequestStop(); app.GetCompletionTask().Wait(); Log.Information("App terminated"); Console.ReadLine(); }
public override bool OnStart() { //Logging. configure ServicePointManager.DefaultConnectionLimit = 12; var storage = RoleEnvironment.GetConfigurationSettingValue("Storage"); var account = CloudStorageAccount.Parse(storage); var config = new AppConfig { InternalUri = GetEndpointAsUri("InternalHttp"), PublicUri = GetEndpointAsUri("Http"), StorageAccount = new SingleAccountFactory(account) }; _app = App.Initialize(config); return base.OnStart(); }
public static App Initialize(AppConfig config) { return Initialize(config, (options, nancyoptions) => WebApp.Start(options, builder => builder.UseNancy())); }