예제 #1
0
		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);
		}
예제 #2
0
        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();
        }
예제 #3
0
        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();
        }
예제 #4
0
		public static App Initialize(AppConfig config)
		{
			return Initialize(config, (options, nancyoptions) => WebApp.Start(options, builder => builder.UseNancy()));
		}