Esempio n. 1
0
        private static IServiceCollection AddExtensions(this IServiceCollection services, IOptionsProvider optionsProvider)
        {
            var configuration     = optionsProvider.Get <NtradaOptions>();
            var extensionProvider = new ExtensionProvider(configuration);

            services.AddSingleton <IExtensionProvider>(extensionProvider);

            foreach (var extension in extensionProvider.GetAll())
            {
                if (extension.Options.Enabled == false)
                {
                    continue;
                }

                extension.Extension.Add(services, optionsProvider);
            }

            return(services);
        }
Esempio n. 2
0
        public void Add(IServiceCollection services, IOptionsProvider optionsProvider)
        {
            var options = optionsProvider.GetForExtension <RabbitMqOptions>(Name);

            services.AddSingleton(options);
            services.AddSingleton(sp =>
            {
                var connectionFactory = new ConnectionFactory
                {
                    HostName    = options.Hostnames?.FirstOrDefault(),
                    Port        = options.Port,
                    VirtualHost = options.VirtualHost,
                    UserName    = options.Username,
                    Password    = options.Password,
                    RequestedConnectionTimeout = options.RequestedConnectionTimeout,
                    SocketReadTimeout          = options.SocketReadTimeout,
                    SocketWriteTimeout         = options.SocketWriteTimeout,
                    RequestedChannelMax        = options.RequestedChannelMax,
                    RequestedFrameMax          = options.RequestedFrameMax,
                    RequestedHeartbeat         = options.RequestedHeartbeat,
                    UseBackgroundThreadsForIO  = options.UseBackgroundThreadsForIO,
                    Ssl = options.Ssl is null
                        ? new SslOption()
                        : new SslOption(options.Ssl.ServerName, options.Ssl.CertificatePath, options.Ssl.Enabled),
                };

                var connection = connectionFactory.CreateConnection(options.ConnectionName);
                if (options.Exchange?.DeclareExchange != true)
                {
                    return(connection);
                }

                var ntradaOptions = optionsProvider.Get <NtradaOptions>();
                var exchanges     = ntradaOptions.Modules
                                    .SelectMany(m => m.Value.Routes)
                                    .Where(m => m.Use.Equals(Name, StringComparison.InvariantCultureIgnoreCase))
                                    .SelectMany(r => r.Config)
                                    .Where(c => c.Key.Equals("exchange", StringComparison.InvariantCultureIgnoreCase))
                                    .Distinct()
                                    .ToList();

                if (!exchanges.Any())
                {
                    return(connection);
                }

                var logger        = sp.GetService <ILogger <IConnection> >();
                var loggerEnabled = options.Logger?.Enabled == true;

                using (var channel = connection.CreateModel())
                {
                    foreach (var exchange in exchanges)
                    {
                        var name = exchange.Value;
                        var type = options.Exchange.Type;
                        if (loggerEnabled)
                        {
                            logger.LogInformation($"Declaring an exchange: '{name}', type: '{type}'.");
                        }

                        channel.ExchangeDeclare(name, type, options.Exchange.Durable, options.Exchange.AutoDelete);
                    }
                }

                return(connection);
            });

            services.AddTransient <IRabbitMqClient, RabbitMqClient>();
            services.AddTransient <RabbitMqHandler>();
            services.AddSingleton <IContextBuilder, NullContextBuilder>();
            services.AddSingleton <ISpanContextBuilder, NullSpanContextBuilder>();
        }
Esempio n. 3
0
        /// <summary>
        /// Creates a new RunManager instance
        /// </summary>
        /// <param name="args">Commandline parameters</param>
        public RunManager(string[] args)
        {
            _doRun = true;
            InstallMultiplexer();
            #if DEBUG
            ShowConsole();
            Thread.CurrentThread.Name = "Main";
            ThreadHelper.Track(Thread.CurrentThread);
            #endif
            _opts = new Opts();
            _files = new FileManager(this);
            var test = _files.GetDir("");
            _commands = new Commands.Executor(this);
            _abortOnExit = new ManualResetEvent(false);
            _notifyHandlers = new List<ValueChangedHandler>();

            foreach (var arg in args)
            {
                switch(arg.Substring(0,1))
                {
                    case "-":
                        var argparts = arg.Substring(1).Split(new[] {"="}, StringSplitOptions.None);
                        switch ( argparts[0].ToLower() )
                        {
                            case "runmode":
                                #region RunmodeSelector

                                RunMode runMode = RunMode.Play;
                                if (argparts.Length < 2)
                                {
                                    Console.WriteLine("[Warning] No runmode supplied!");
                                    break;
                                }
                                switch (argparts[1])
                                {
                                    case "select":
                                        var selectForm = new Form();
                                        selectForm.Text = "Select Runmode";
                                        selectForm.FormBorderStyle = FormBorderStyle.FixedToolWindow;
                                        selectForm.Size = new Size(330, 75);
                                        selectForm.StartPosition = FormStartPosition.CenterScreen;
                                        selectForm.Controls.Add(new Button()
                                                                    {
                                                                        Text = "Game",
                                                                        Location = new Point(5, 3),
                                                                        Size = new Size(75, 44)
                                                                    });
                                        selectForm.Controls.Add(new Button()
                                                                    {
                                                                        Text = "Editor",
                                                                        Location = new Point(84, 3),
                                                                        Size = new Size(75, 44)
                                                                    });
                                        selectForm.Controls.Add(new Button()
                                                                    {
                                                                        Text = "Server",
                                                                        Location = new Point(163, 3),
                                                                        Size = new Size(75, 44)
                                                                    });
                                        selectForm.Controls.Add(new Button()
                                                                    {
                                                                        Text = "Collab Server",
                                                                        Location = new Point(242, 3),
                                                                        Size = new Size(75, 44)
                                                                    });
                                        selectForm.Controls[0].Click +=
                                            delegate
                                                {
                                                    runMode = RunMode.Play;
                                                    selectForm.Close();
                                                };
                                        selectForm.Controls[1].Click +=
                                            delegate
                                                {
                                                    runMode = RunMode.Edit;
                                                    selectForm.Close();
                                                };
                                        selectForm.Controls[2].Click +=
                                            delegate
                                                {
                                                    runMode = RunMode.GameServer;
                                                    selectForm.Close();
                                                };
                                        selectForm.Controls[3].Click +=
                                            delegate
                                                {
                                                    runMode = RunMode.CollabServer;
                                                    selectForm.Close();
                                                };
                                        selectForm.Show();
                                        selectForm.Focus();
                                        Application.Run(selectForm);
                                        break;
                                    case "game":
                                        runMode = RunMode.Play;
                                        break;
                                    case "gameserver":
                                        runMode = RunMode.ServerPlay;
                                        break;
                                    case "edit":
                                    case "editor":
                                        runMode = RunMode.Edit;
                                        break;
                                    case "server":
                                        runMode = RunMode.GameServer;
                                        break;
                                    case "collabserver":
                                    case "editserver":
                                        runMode = RunMode.CollabServer;
                                        break;
                                    case "aioserver":
                                        runMode = RunMode.AIOServer;
                                        break;
                                    default:
                                        Console.WriteLine("[Warning] Unknown runMode: '"+argparts[0]+"'");
                                        break;
                                }
                                Opts.Set("sys_runMode", runMode);
                                #endregion
                                break;
                            case "console":
                                #region ConsoleSection
            #if !DEBUG
                                ShowConsole();
            #else
                                Console.WriteLine("[Info] Commandline-parameter '-console' given, ignoring...");
            #endif
                                #endregion
                                break;
                        }
                        break;
                    case "+":
                        if (arg.Length < 2)
                            continue;
                        _commands.Parse(arg.Substring(1));
                        break;
                }
            }
            ((Options.Options)_opts).LockDownReadonly();
            _views = new List<Base.Abstract.View>();
            #if DEBUG
            ThreadHelper.Start(delegate
                                   {
                                       var dbgWnd = new DebugWindow(this);
                                       Application.Run(dbgWnd);
                                   }, "Dbg_Wnd");
            #endif
            Console.ForegroundColor = _opts.Get<ConsoleColor>("gui_consoleColor");
            _notifyHandlers.Add(_opts.RegisterChangeNotification("gui_consoleColor",
                delegate(string key, object value) { Console.ForegroundColor = (ConsoleColor)value; }));
        }