public static NodeEntryPoint StartWithOptions(NodeOptions options, Action <int> termination) { var slim = new ManualResetEventSlim(false); var list = String.Join(Environment.NewLine, options.GetPairs().Select(p => String.Format("{0} : {1}", p.Key, p.Value))); Log.Info(list); var bus = new InMemoryBus("OutputBus"); var controller = new NodeController(bus); var mainQueue = new QueuedHandler(controller, "Main Queue"); controller.SetMainQueue(mainQueue); Application.Start(i => { slim.Set(); termination(i); }); var http = new PlatformServerApiService(mainQueue, String.Format("http://{0}:{1}/", options.LocalHttpIp, options.HttpPort)); bus.Subscribe <SystemMessage.Init>(http); bus.Subscribe <SystemMessage.StartShutdown>(http); var timer = new TimerService(new ThreadBasedScheduler(new RealTimeProvider())); bus.Subscribe <TimerMessage.Schedule>(timer); // switch, based on configuration AzureStoreConfiguration azureConfig; if (AzureStoreConfiguration.TryParse(options.StoreLocation, out azureConfig)) { var storageService = new AzureStorageService(azureConfig, mainQueue); bus.Subscribe <ClientMessage.AppendEvents>(storageService); bus.Subscribe <SystemMessage.Init>(storageService); bus.Subscribe <ClientMessage.ImportEvents>(storageService); bus.Subscribe <ClientMessage.RequestStoreReset>(storageService); } else { var storageService = new FileStorageService(options.StoreLocation, mainQueue); bus.Subscribe <ClientMessage.AppendEvents>(storageService); bus.Subscribe <SystemMessage.Init>(storageService); bus.Subscribe <ClientMessage.ImportEvents>(storageService); bus.Subscribe <ClientMessage.RequestStoreReset>(storageService); } mainQueue.Start(); mainQueue.Enqueue(new SystemMessage.Init()); return(new NodeEntryPoint(mainQueue, slim)); }
static void Main(string[] args) { var bus = new InMemoryBus("OutputBus"); var controller = new NodeController(bus); var mainQueue = new QueuedHandler(controller, "Main Queue"); controller.SetMainQueue(mainQueue); Application.Start(Environment.Exit); int?timeOut = args.Length > 0 ? int.Parse(args[0]) : (int?)null; int port = args.Length > 1 ? int.Parse(args[1]) : 8080; var http = new PlatformServerApiService(mainQueue, string.Format("http://*:{0}/", port)); bus.AddHandler <SystemMessage.Init>(http); bus.AddHandler <SystemMessage.Shutdown>(http); // switch, based on configuration var storageService = new StorageService(CreateFileStore, mainQueue); bus.AddHandler <ClientMessage.AppendEvents>(storageService); bus.AddHandler <SystemMessage.Init>(storageService); Console.WriteLine("Starting everything. Press enter to initiate shutdown"); mainQueue.Start(); mainQueue.Enqueue(new SystemMessage.Init()); if (timeOut == null) { Console.ReadLine(); mainQueue.Enqueue(new SystemMessage.Shutdown()); Console.ReadLine(); } else { Task.Factory.StartNew(() => { Thread.Sleep(timeOut.Value * 1000); Application.Exit(ExitCode.Success, ""); }); _exitEvent.Wait(); } }