Пример #1
0
        static void RunOptionsAndReturnExitCode(Options opts)
        {
            if (opts.GenerateConfig)
            {
                const string cTemplate = ".\\config_template.xml";
                new AkkaNodeConfig().ToFile <AkkaNodeConfig>(cTemplate);
                Console.WriteLine(@"Template config file ""{0}"" created.", cTemplate);
                System.Environment.Exit(0);
            }

            try
            {
                var config = NodeConfig.FromFile <AkkaNodeConfig>(opts.ConfigPath);
                using (var system = AkkaXmlMessageSystem.Create(config))
                {
                    system.Start(config);
                    var exitHandler = new WinExitSignal(opts.NotInteractive, system);
                    if (opts.NotInteractive)
                    {
                        exitHandler.Exit += (sender, args) => System.Environment.Exit(0);
                        // Waits forever
                        _quitEvent.WaitOne();
                    }
                    else
                    {
                        Console.CancelKeyPress += (sender, e) =>
                        {
                            _quitEvent.Set();
                            e.Cancel = true;
                        };
                        Console.Title = config.NodeId;
                        Console.WriteLine("Press Control-C to exit, Enter to clear screen.");
                        bool exit = false;
                        do
                        {
                            if (Console.KeyAvailable)
                            {
                                var key = Console.ReadKey(true);
                                if (key.Key == ConsoleKey.Enter)
                                {
                                    Console.Clear();
                                }
                            }
                            exit = _quitEvent.WaitOne(100);
                        } while (!exit);
                    }
                }
                System.Environment.Exit(0);
            }
            catch (Exception ex)
            {
                if (!opts.NotInteractive)
                {
                    Console.WriteLine("Error : {0}", ex.Message);
                }
                System.Environment.Exit(1);
            }
        }
Пример #2
0
        MessageSystem <XmlMessage, XmlMessagePattern> CreateSystem(AkkaNodeConfig config)
        {
            switch (ImplType)
            {
            case EImplType.Akka:
                return(AkkaXmlMessageSystem.Create(config));

            default:
                throw new ArgumentException("only Akka implementation type is handled");
            }
        }
Пример #3
0
 private void Join(RoleName from, RoleName to)
 {
     RunOn(() =>
     {
         Cluster.Join(Node(to).Address);
         _nodeConfig = new AkkaNodeConfig(from.Name)
         {
             GossipTimeFrameInSeconds = 5
         };
         _messageSystem = AkkaXmlMessageSystem.Create(this.Sys);
     }, from);
     EnterBarrier(from.Name + "-joined");
 }
        protected override void EndProcessing()
        {
            var config = Hexagon.NodeConfig.FromFile <AkkaNodeConfig>(NodeConfig);
            MessageSystem <XmlMessage, XmlMessagePattern> xmlMessageSystem = null;

            switch (ImplType)
            {
            case EImplType.Akka:
                xmlMessageSystem = AkkaXmlMessageSystem.Create(config);
                break;

            default:
                throw new ArgumentException("only Akka implementation type is handled");
            }
            xmlMessageSystem.Start(config);
            WriteObject(xmlMessageSystem);
        }
 private void Join(RoleName from, RoleName to)
 {
     RunOn(() =>
     {
         Cluster.Join(Node(to).Address);
         _nodeConfig = new AkkaNodeConfig(from.Name)
         {
             GossipTimeFrameInSeconds = 5
         };
         if (from.Name == "deployer")
         {
             _nodeConfig.AddThisAssembly();
             _nodeConfig.SetProcessingUnitProps(new NodeConfig.ProcessingUnitProps("routed")
             {
                 RouteOnNodeRole = "routeHere", TotalMaxClusterRoutees = 3, AllowLocalRoutee = true
             });
         }
         _messageSystem = AkkaXmlMessageSystem.Create(this.Sys);
     }, from);
     EnterBarrier(from.Name + "-joined");
 }
Пример #6
0
        static void RunOptionsAndReturnExitCode(Options opts)
        {
            if (opts.GenerateConfig)
            {
                const string cTemplate = ".\\config_template.xml";
                new Config().ToFile(cTemplate);
                Console.WriteLine(@"Template config file ""{0}"" created.", cTemplate);
                System.Environment.Exit(0);
            }

            Console.CancelKeyPress += (sender, e) =>
            {
                _quitEvent.Set();
                e.Cancel = true;
            };

            try
            {
                var config = Config.FromFile(opts.ConfigPath);
                RestRequestConvertersRegistry <XmlMessage> convertersRegistry = new RestRequestConvertersRegistry <XmlMessage>();
                if (config.Assemblies.Any())
                {
                    foreach (var assembly in config.Assemblies)
                    {
                        convertersRegistry.AddConvertersFromAssembly(assembly);
                    }
                }

                // We don't want to load message handlers in the Rest server
                config.NodeConfig.Assemblies.Clear();

                using (var messageSystem = AkkaXmlMessageSystem.Create(config.NodeConfig))
                    using (var restServer = new HttpServer())
                    {
                        messageSystem.Start(config.NodeConfig);
                        StartRestServer(
                            messageSystem,
                            restServer,
                            config.Port,
                            TimeSpan.FromSeconds(config.RequestTimeoutInSeconds),
                            convertersRegistry);

                        Console.WriteLine("Press Control-C to exit, Enter to clear screen.");
                        bool exit = false;
                        do
                        {
                            if (Console.KeyAvailable)
                            {
                                var key = Console.ReadKey(true);
                                if (key.Key == ConsoleKey.Enter)
                                {
                                    Console.Clear();
                                }
                            }
                            exit = _quitEvent.WaitOne(100);
                        } while (!exit);
                    }
                System.Environment.Exit(0);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error : {0}", ex.Message);
                System.Environment.Exit(1);
            }
        }