private static IGenericConfig LoadConfigDll(string dllName)
        {
            Assembly       pluginAssembly = Assembly.LoadFrom(dllName);
            IGenericConfig plug           = null;

            foreach (Type pluginType in pluginAssembly.GetTypes())
            {
                if (pluginType.IsPublic)
                {
                    if (!pluginType.IsAbstract)
                    {
                        Type typeInterface = pluginType.GetInterface("IGenericConfig", true);

                        if (typeInterface != null)
                        {
                            plug =
                                (IGenericConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
                        }
                    }
                }
            }

            pluginAssembly = null;
            return(plug);
        }
Example #2
0
        private static void RunKestrelHost <TStartup>(CommandArgs commandArgs, IGenericConfig config, IOutput output)
            where TStartup : class
        {
            var host = new WebHostBuilder()
                       .UseContentRoot(GetContentRoot())
                       .ConfigureServices(collection => collection
                                          .AddSingleton(commandArgs)
                                          .AddSingleton(config)
                                          )
                       .ConfigureKestrel(options => options
                                         .ListenAnyIP(commandArgs.GetOption <int>(ServiceOptions.Port))
                                         )
                       .UseKestrel()
                       .UseStartup <TStartup>()
                       .ConfigureLogging(
                builder => builder.AddNFlagsOutput(c =>
            {
                c.Output   = output;
                c.LogLevel = LogLevel.Information;
            })
                )
                       .Build();

            host.Run();
        }
Example #3
0
 /// <summary>
 /// Creates new instance of NFlags config
 /// </summary>
 /// <param name="name">Application name</param>
 /// <param name="description">Application description</param>
 /// <param name="dialect">NSpec arguments dialect</param>
 /// <param name="output">Output writing interface</param>
 /// <param name="environment">Environment variables provider</param>
 /// <param name="config">Configuration values provider</param>
 /// <param name="genericConfig">Generic configuration values provider</param>
 /// <param name="helpConfig">Help generation configuration</param>
 /// <param name="isExceptionHandlingEnabled">Is Exception handling enabled. Use exit code if enabled, otherwise throw exceptions. Default False</param>
 /// <param name="versionConfig">Version option configuration</param>
 /// <param name="argumentConverters">List of param converters</param>
 public CliConfig(
     string name,
     string description,
     Dialect dialect,
     IOutput output,
     IEnvironment environment,
     IConfig config,
     IGenericConfig genericConfig,
     HelpConfig helpConfig,
     bool isExceptionHandlingEnabled,
     VersionConfig versionConfig,
     IArgumentConverter[] argumentConverters)
 {
     Name        = name;
     Description = description;
     Dialect     = dialect;
     IsExceptionHandlingEnabled = isExceptionHandlingEnabled;
     Output             = output;
     Environment        = environment;
     Config             = config;
     GenericConfig      = genericConfig;
     HelpConfig         = helpConfig;
     ArgumentConverters = argumentConverters;
     VersionConfig      = versionConfig;
 }
Example #4
0
 public static CommandConfigurator RegisterDefaultServiceCommand <TStartup>(
     this CommandConfigurator configurator,
     string commandName,
     string commandDescription,
     IGenericConfig configuration,
     Action <CommandConfigurator, IGenericConfig> additionalConfiguration = null) where TStartup : class
 {
     return(configurator.RegisterDefaultCommand(
                commandName,
                commandDescription,
                c => c.ConfigureService <TStartup>(configuration, additionalConfiguration)
                ));
 }
Example #5
0
        private static CommandConfigurator ConfigureService <TStartup>(
            this CommandConfigurator configurator,
            IGenericConfig configuration,
            Action <CommandConfigurator, IGenericConfig> additionalConfiguration = null) where TStartup : class
        {
            configurator.RegisterOption <int>(b => b
                                              .Name(ServiceOptions.Port)
                                              .Abr("p")
                                              .Description("Listening port")
                                              .EnvironmentVariable("PORT")
                                              .DefaultValue(5000)
                                              )
            .RegisterErrorHandling()
            .SetExecute((commandArgs, output) =>
            {
                RunKestrelHost <TStartup>(commandArgs, configuration, output);
            });

            additionalConfiguration?.Invoke(configurator, configuration);

            return(configurator);
        }
Example #6
0
        private static IGenericConfig LoadConfigDll(string dllName)
        {
            Assembly       pluginAssembly = Assembly.LoadFrom(dllName);
            IGenericConfig plug           = null;

            foreach (Type pluginType in pluginAssembly.GetTypes())
            {
                if (pluginType.IsPublic)
                {
                    if (!pluginType.IsAbstract)
                    {
                        if (typeof(IGenericConfig).IsAssignableFrom(pluginType))
                        {
                            plug =
                                (IGenericConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
                        }
                    }
                }
            }

            pluginAssembly = null;
            return(plug);
        }
        /// <summary>
        /// Performs initialisation of the world, such as loading configuration from disk.
        /// </summary>
        public virtual void StartUp()
        {
            this.regionData = new RegionInfo();
            try
            {
                this.localConfig = new XmlConfig(m_config);
                this.localConfig.LoadData();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            m_console.WriteLine("Main.cs:Startup() - Loading configuration");
            this.regionData.InitConfig(this.m_sandbox, this.localConfig);
            this.localConfig.Close();//for now we can close it as no other classes read from it , but this should change


            GridServers = new Grid();
            if (m_sandbox)
            {
                GridServers.AssetDll = "OpenSim.GridInterfaces.Local.dll";
                GridServers.GridDll  = "OpenSim.GridInterfaces.Local.dll";

                m_console.WriteLine("Starting in Sandbox mode");
            }
            else
            {
                if (this.gridLocalAsset)
                {
                    GridServers.AssetDll = "OpenSim.GridInterfaces.Local.dll";
                }
                else
                {
                    GridServers.AssetDll = "OpenSim.GridInterfaces.Remote.dll";
                }
                GridServers.GridDll = "OpenSim.GridInterfaces.Remote.dll";

                m_console.WriteLine("Starting in Grid mode");
            }

            try
            {
                GridServers.Initialise();
            }
            catch (Exception e)
            {
                m_console.WriteLine(e.Message + "\nSorry, could not setup the grid interface");
                Environment.Exit(1);
            }

            startuptime = DateTime.Now;

            try
            {
                AssetCache     = new AssetCache(GridServers.AssetServer);
                InventoryCache = new InventoryCache();
            }
            catch (Exception e)
            {
                m_console.WriteLine(e.Message + "\nSorry, could not setup local cache");
                Environment.Exit(1);
            }

            //should be passing a IGenericConfig object to these so they can read the config data they want from it
            GridServers.AssetServer.SetServerInfo(regionData.AssetURL, regionData.AssetSendKey);
            IGridServer gridServer = GridServers.GridServer;

            gridServer.SetServerInfo(regionData.GridURL, regionData.GridSendKey, regionData.GridRecvKey);

            this.physManager = new OpenSim.Physics.Manager.PhysicsManager();
            this.physManager.LoadPlugins();

            this.CustomiseStartup();

            m_console.WriteLine("Main.cs:Startup() - Initialising HTTP server");
            // HttpServer = new SimCAPSHTTPServer(GridServers.GridServer, Cfg.IPListenPort);

            BaseHttpServer httpServer       = new BaseHttpServer(regionData.IPListenPort);
            LoginServer    loginServer      = null;
            LoginServer    adminLoginServer = null;

            bool sandBoxWithLoginServer = m_loginserver && m_sandbox;

            if (sandBoxWithLoginServer)
            {
                loginServer = new LoginServer(gridServer, regionData.IPListenAddr, regionData.IPListenPort, regionData.RegionLocX, regionData.RegionLocY, this.user_accounts);
                loginServer.Startup();

                if (user_accounts)
                {
                    //sandbox mode with loginserver using accounts
                    this.GridServers.UserServer = loginServer;
                    adminLoginServer            = loginServer;

                    httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.LocalUserManager.XmlRpcLoginMethod);
                }
                else
                {
                    //sandbox mode with loginserver not using accounts
                    httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.XmlRpcLoginMethod);
                }
            }

            AdminWebFront adminWebFront = new AdminWebFront("Admin", LocalWorld, InventoryCache, adminLoginServer);

            adminWebFront.LoadMethods(httpServer);

            m_console.WriteLine("Main.cs:Startup() - Starting HTTP server");
            httpServer.Start();

            MainServerListener();

            m_heartbeatTimer.Enabled  = true;
            m_heartbeatTimer.Interval = 100;
            m_heartbeatTimer.Elapsed += new ElapsedEventHandler(this.Heartbeat);
        }
Example #8
0
        // TEMP - REMOVE
        public void performConfigurationRetrieve()
        {
            if (cE > 1)
            {
                m_log.Error("[CONFIG]: READING CONFIGURATION COUT: " + cE.ToString());
            }


            configurationPlugin = LoadConfigDll(configurationPluginFilename);
            configurationOptions.Clear();
            if (loadFunction == null)
            {
                m_log.Error("[CONFIG]: Load Function for '" + configurationDescription +
                            "' is null. Refusing to run configuration.");
                return;
            }

            if (resultFunction == null)
            {
                m_log.Error("[CONFIG]: Result Function for '" + configurationDescription +
                            "' is null. Refusing to run configuration.");
                return;
            }

            //m_log.Debug("[CONFIG]: Calling Configuration Load Function...");
            loadFunction();

            if (configurationOptions.Count <= 0)
            {
                m_log.Error("[CONFIG]: No configuration options were specified for '" + configurationOptions +
                            "'. Refusing to continue configuration.");
                return;
            }

            bool useFile = true;

            if (configurationPlugin == null)
            {
                m_log.Error("[CONFIG]: Configuration Plugin NOT LOADED!");
                return;
            }

            if (!String.IsNullOrWhiteSpace(configurationFilename))
            {
                configurationPlugin.SetFileName(configurationFilename);
                try
                {
                    configurationPlugin.LoadData();
                    useFile = true;
                }
                catch (XmlException e)
                {
                    m_log.WarnFormat("[CONFIG]: Not using {0}: {1}",
                                     configurationFilename,
                                     e.Message.ToString());
                    //m_log.Error("Error loading " + configurationFilename + ": " + e.ToString());
                    useFile = false;
                }
            }
            else
            {
                if (configurationFromXMLNode != null)
                {
                    m_log.Info("[CONFIG]: Loading from XML Node, will not save to the file");
                    configurationPlugin.LoadDataFromString(configurationFromXMLNode.OuterXml);
                }

                m_log.Info("[CONFIG]: XML Configuration Filename is not valid; will not save to the file.");
                useFile = false;
            }

            foreach (ConfigurationOption configOption in configurationOptions)
            {
                bool   convertSuccess       = false;
                object return_result        = null;
                string errorMessage         = String.Empty;
                bool   ignoreNextFromConfig = false;
                while (convertSuccess == false)
                {
                    string console_result = String.Empty;
                    string attribute      = null;
                    if (useFile || configurationFromXMLNode != null)
                    {
                        if (!ignoreNextFromConfig)
                        {
                            attribute = configurationPlugin.GetAttribute(configOption.configurationKey);
                        }
                        else
                        {
                            ignoreNextFromConfig = false;
                        }
                    }

                    if (attribute == null)
                    {
                        if (configOption.configurationUseDefaultNoPrompt || useConsoleToPromptOnError == false)
                        {
                            console_result = configOption.configurationDefault;
                        }
                        else
                        {
                            if ((configOption.shouldIBeAsked != null &&
                                 configOption.shouldIBeAsked(configOption.configurationKey)) ||
                                configOption.shouldIBeAsked == null)
                            {
                                if (!String.IsNullOrWhiteSpace(configurationDescription))
                                {
                                    console_result =
                                        MainConsole.Instance.CmdPrompt(
                                            configurationDescription + ": " + configOption.configurationQuestion,
                                            configOption.configurationDefault);
                                }
                                else
                                {
                                    console_result =
                                        MainConsole.Instance.CmdPrompt(configOption.configurationQuestion,
                                                                       configOption.configurationDefault);
                                }
                            }
                            else
                            {
                                //Dont Ask! Just use default
                                console_result = configOption.configurationDefault;
                            }
                        }
                    }
                    else
                    {
                        console_result = attribute;
                    }

                    // If the first character of a multicharacter string is a "$", assume it's the name of an environment variable and substitute with the value of that variable.
                    if (console_result.StartsWith("$", StringComparison.InvariantCulture) && console_result.Length > 1)
                    {
                        // Using a second $ to be an escape character was experimented with, but that would require modifying the write process to re-apply the escape character.  Over-all escapes seem too fragile, and the below code handles it cleanly.  If the admin wants to use a value that collides with an environment variable, then the admin can make sure to unset it first.
                        var env_var_key   = console_result.Substring(1);
                        var env_var_value = Environment.GetEnvironmentVariable(env_var_key);
                        if (env_var_value != null)
                        {
                            // Log the use of an environment variable just in case someone didn't expect it.
                            m_log.Info($"[CONFIG]: Parameter [{configOption.configurationKey}] started with '$'. Value replaced with environment variable '{env_var_key}' value '{env_var_value}'.");
                            console_result = env_var_value;
                        }
                        else
                        {
                            // Unless there is no such variable, in which case just move on with the original and let the user know that happened.
                            m_log.Warn($"[CONFIG]: Parameter [{configOption.configurationKey}] started with '$', however there was no environment variable found with the name '{env_var_key}'.");
                        }
                    }

                    switch (configOption.configurationType)
                    {
                    case ConfigurationOption.ConfigurationTypes.TYPE_STRING:
                        return_result  = console_result;
                        convertSuccess = true;
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY:
                        if (!String.IsNullOrEmpty(console_result))
                        {
                            return_result  = console_result;
                            convertSuccess = true;
                        }
                        errorMessage = "a string that is not empty";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN:
                        bool boolResult;
                        if (Boolean.TryParse(console_result, out boolResult))
                        {
                            convertSuccess = true;
                            return_result  = boolResult;
                        }
                        errorMessage = "'true' or 'false' (Boolean)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_BYTE:
                        byte byteResult;
                        if (Byte.TryParse(console_result, out byteResult))
                        {
                            convertSuccess = true;
                            return_result  = byteResult;
                        }
                        errorMessage = "a byte (Byte)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_CHARACTER:
                        char charResult;
                        if (Char.TryParse(console_result, out charResult))
                        {
                            convertSuccess = true;
                            return_result  = charResult;
                        }
                        errorMessage = "a character (Char)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_INT16:
                        short shortResult;
                        if (Int16.TryParse(console_result, out shortResult))
                        {
                            convertSuccess = true;
                            return_result  = shortResult;
                        }
                        errorMessage = "a signed 32 bit integer (short)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_INT32:
                        int intResult;
                        if (Int32.TryParse(console_result, out intResult))
                        {
                            convertSuccess = true;
                            return_result  = intResult;
                        }
                        errorMessage = "a signed 32 bit integer (int)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_INT64:
                        long longResult;
                        if (Int64.TryParse(console_result, out longResult))
                        {
                            convertSuccess = true;
                            return_result  = longResult;
                        }
                        errorMessage = "a signed 32 bit integer (long)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_IP_ADDRESS:
                        IPAddress ipAddressResult;
                        if (IPAddress.TryParse(console_result, out ipAddressResult))
                        {
                            convertSuccess = true;
                            return_result  = ipAddressResult;
                        }
                        errorMessage = "an IP Address (IPAddress)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UUID:
                        UUID uuidResult;
                        if (UUID.TryParse(console_result, out uuidResult))
                        {
                            convertSuccess = true;
                            return_result  = uuidResult;
                        }
                        errorMessage = "a UUID (UUID)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UUID_NULL_FREE:
                        UUID uuidResult2;
                        if (UUID.TryParse(console_result, out uuidResult2))
                        {
                            convertSuccess = true;

                            if (uuidResult2 == UUID.Zero)
                            {
                                uuidResult2 = UUID.Random();
                            }

                            return_result = uuidResult2;
                        }
                        errorMessage = "a non-null UUID (UUID)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_Vector3:
                        Vector3 vectorResult;
                        if (Vector3.TryParse(console_result, out vectorResult))
                        {
                            convertSuccess = true;
                            return_result  = vectorResult;
                        }
                        errorMessage = "a vector (Vector3)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UINT16:
                        ushort ushortResult;
                        if (UInt16.TryParse(console_result, out ushortResult))
                        {
                            convertSuccess = true;
                            return_result  = ushortResult;
                        }
                        errorMessage = "an unsigned 16 bit integer (ushort)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UINT32:
                        uint uintResult;
                        if (UInt32.TryParse(console_result, out uintResult))
                        {
                            convertSuccess = true;
                            return_result  = uintResult;
                        }
                        errorMessage = "an unsigned 32 bit integer (uint)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UINT64:
                        ulong ulongResult;
                        if (UInt64.TryParse(console_result, out ulongResult))
                        {
                            convertSuccess = true;
                            return_result  = ulongResult;
                        }
                        errorMessage = "an unsigned 64 bit integer (ulong)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_FLOAT:
                        float floatResult;
                        if (
                            float.TryParse(console_result, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, Culture.NumberFormatInfo,
                                           out floatResult))
                        {
                            convertSuccess = true;
                            return_result  = floatResult;
                        }
                        errorMessage = "a single-precision floating point number (float)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE:
                        double doubleResult;
                        if (
                            Double.TryParse(console_result, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, Culture.NumberFormatInfo,
                                            out doubleResult))
                        {
                            convertSuccess = true;
                            return_result  = doubleResult;
                        }
                        errorMessage = "an double-precision floating point number (double)";
                        break;
                    }

                    if (convertSuccess)
                    {
                        if (useFile)
                        {
                            configurationPlugin.SetAttribute(configOption.configurationKey, console_result);
                        }

                        if (!resultFunction(configOption.configurationKey, return_result))
                        {
                            m_log.Info(
                                "[CONFIG]: The handler for the last configuration option denied that input, please try again.");
                            convertSuccess       = false;
                            ignoreNextFromConfig = true;
                        }
                    }
                    else
                    {
                        if (configOption.configurationUseDefaultNoPrompt)
                        {
                            m_log.Error(string.Format(
                                            "[CONFIG]: [{3}]:[{1}] is not valid default for parameter [{0}].\nThe configuration result must be parsable to {2}.\n",
                                            configOption.configurationKey, console_result, errorMessage,
                                            configurationFilename));
                            convertSuccess = true;
                        }
                        else
                        {
                            m_log.Warn(string.Format(
                                           "[CONFIG]: [{3}]:[{1}] is not a valid value [{0}].\nThe configuration result must be parsable to {2}.\n",
                                           configOption.configurationKey, console_result, errorMessage,
                                           configurationFilename));
                            ignoreNextFromConfig = true;
                        }
                    }
                }
            }

            if (useFile)
            {
                configurationPlugin.Commit();
                configurationPlugin.Close();
            }
        }
 protected virtual void SetupFromConfigFile(IGenericConfig configData)
 {
 }
Example #10
0
        /// <summary>
        /// Performs initialisation of the world, such as loading configuration from disk.
        /// </summary>
        public virtual void StartUp()
        {
            this.regionData = new RegionInfo();
            try
            {
                this.localConfig = new XmlConfig(m_config);
                this.localConfig.LoadData();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            m_console.WriteLine("Main.cs:Startup() - Loading configuration");
            this.regionData.InitConfig(this.m_sandbox, this.localConfig);
            this.localConfig.Close();//for now we can close it as no other classes read from it , but this should change

            GridServers = new Grid();
            if (m_sandbox)
            {
                GridServers.AssetDll = "OpenSim.GridInterfaces.Local.dll";
                GridServers.GridDll = "OpenSim.GridInterfaces.Local.dll";

                m_console.WriteLine("Starting in Sandbox mode");
            }
            else
            {
                if (this.gridLocalAsset)
                {
                    GridServers.AssetDll = "OpenSim.GridInterfaces.Local.dll";
                }
                else
                {
                    GridServers.AssetDll = "OpenSim.GridInterfaces.Remote.dll";
                }
                GridServers.GridDll = "OpenSim.GridInterfaces.Remote.dll";

                m_console.WriteLine("Starting in Grid mode");
            }

            try
            {
                GridServers.Initialise();
            }
            catch (Exception e)
            {
                m_console.WriteLine(e.Message + "\nSorry, could not setup the grid interface");
                Environment.Exit(1);
            }

            startuptime = DateTime.Now;

            try
            {
                AssetCache = new AssetCache(GridServers.AssetServer);
                InventoryCache = new InventoryCache();
            }
            catch (Exception e)
            {
                m_console.WriteLine(e.Message + "\nSorry, could not setup local cache");
                Environment.Exit(1);
            }

            //should be passing a IGenericConfig object to these so they can read the config data they want from it
            GridServers.AssetServer.SetServerInfo(regionData.AssetURL, regionData.AssetSendKey);
            IGridServer gridServer = GridServers.GridServer;
            gridServer.SetServerInfo(regionData.GridURL, regionData.GridSendKey, regionData.GridRecvKey);

            this.physManager = new OpenSim.Physics.Manager.PhysicsManager();
            this.physManager.LoadPlugins();

            this.CustomiseStartup();

            m_console.WriteLine("Main.cs:Startup() - Initialising HTTP server");
            // HttpServer = new SimCAPSHTTPServer(GridServers.GridServer, Cfg.IPListenPort);

            BaseHttpServer httpServer = new BaseHttpServer(regionData.IPListenPort);
            LoginServer loginServer = null;
            LoginServer adminLoginServer = null;

            bool sandBoxWithLoginServer = m_loginserver && m_sandbox;
            if (sandBoxWithLoginServer)
            {
                loginServer = new LoginServer(gridServer, regionData.IPListenAddr, regionData.IPListenPort,regionData.RegionLocX, regionData.RegionLocY, this.user_accounts);
                loginServer.Startup();

                if (user_accounts)
                {
                    //sandbox mode with loginserver using accounts
                    this.GridServers.UserServer = loginServer;
                    adminLoginServer = loginServer;

                    httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.LocalUserManager.XmlRpcLoginMethod);
                }
                else
                {
                    //sandbox mode with loginserver not using accounts
                    httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.XmlRpcLoginMethod);
                }
            }

            AdminWebFront adminWebFront = new AdminWebFront("Admin", LocalWorld, InventoryCache, adminLoginServer);
            adminWebFront.LoadMethods(httpServer);

            m_console.WriteLine("Main.cs:Startup() - Starting HTTP server");
            httpServer.Start();

            MainServerListener();

            m_heartbeatTimer.Enabled = true;
            m_heartbeatTimer.Interval = 100;
            m_heartbeatTimer.Elapsed += new ElapsedEventHandler(this.Heartbeat);
        }
Example #11
0
        /// <summary>
        /// Sets NFlags generic configuration values provider.
        /// </summary>
        /// <param name="genericConfig">Configuration values provider</param>
        /// <returns>Self instance</returns>
        public CliConfigurator SetConfiguration(IGenericConfig genericConfig)
        {
            _genericConfig = genericConfig;

            return(this);
        }
Example #12
0
        public void InitConfig(bool sandboxMode, IGenericConfig configData)
        {
            this.isSandbox = sandboxMode;
            try
            {
                // Sim UUID
                string attri = "";
                attri = configData.GetAttribute("SimUUID");
                if (attri == "")
                {
                    this.SimUUID = LLUUID.Random();
                    configData.SetAttribute("SimUUID", this.SimUUID.ToString());
                }
                else
                {
                    this.SimUUID = new LLUUID(attri);
                }

                // Sim name
                attri = "";
                attri = configData.GetAttribute("SimName");
                if (attri == "")
                {
                    this.RegionName = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Name", "OpenSim test");
                    configData.SetAttribute("SimName", this.RegionName);
                }
                else
                {
                    this.RegionName = attri;
                }
                // Sim/Grid location X
                attri = "";
                attri = configData.GetAttribute("SimLocationX");
                if (attri == "")
                {
                    string location = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid Location X", "997");
                    configData.SetAttribute("SimLocationX", location);
                    this.RegionLocX = (uint)Convert.ToUInt32(location);
                }
                else
                {
                    this.RegionLocX = (uint)Convert.ToUInt32(attri);
                }
                // Sim/Grid location Y
                attri = "";
                attri = configData.GetAttribute("SimLocationY");
                if (attri == "")
                {
                    string location = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid Location Y", "996");
                    configData.SetAttribute("SimLocationY", location);
                    this.RegionLocY = (uint)Convert.ToUInt32(location);
                }
                else
                {
                    this.RegionLocY = (uint)Convert.ToUInt32(attri);
                }

                // Local storage datastore
                attri = "";
                attri = configData.GetAttribute("Datastore");
                if (attri == "")
                {
                    string datastore = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Filename for local storage", "localworld.yap");
                    configData.SetAttribute("Datastore", datastore);
                    this.DataStore = datastore;
                }
                else
                {
                    this.DataStore = attri;
                }

                //Sim Listen Port
                attri = "";
                attri = configData.GetAttribute("SimListenPort");
                if (attri == "")
                {
                    string port = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("UDP port for client connections", "9000");
                    configData.SetAttribute("SimListenPort", port);
                    this.IPListenPort = Convert.ToInt32(port);
                }
                else
                {
                    this.IPListenPort = Convert.ToInt32(attri);
                }
                //Sim Listen Address
                attri = "";
                attri = configData.GetAttribute("SimListenAddress");
                if (attri == "")
                {
                    this.IPListenAddr = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("IP Address to listen on for client connections", "127.0.0.1");
                    configData.SetAttribute("SimListenAddress", this.IPListenAddr);
                }
                else
                {
                    this.IPListenAddr = attri;
                }

                this.RegionHandle = Util.UIntsToLong((RegionLocX * 256), (RegionLocY * 256));

                configData.Commit();
            }
            catch (Exception e)
            {
                OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Exception occured");
                OpenSim.Framework.Console.MainConsole.Instance.WriteLine(e.ToString());
            }

            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Sim settings loaded:");
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("UUID: " + this.SimUUID.ToStringHyphenated());
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Name: " + this.RegionName);
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Region Location: [" + this.RegionLocX.ToString() + "," + this.RegionLocY + "]");
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Region Handle: " + this.RegionHandle.ToString());
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Listening on IP: " + this.IPListenAddr + ":" + this.IPListenPort);
        }
Example #13
0
        public void InitConfig(bool sandboxMode, IGenericConfig configData)
        {
            this.isSandbox = sandboxMode;
            try
            {
                // Sim UUID
                string attri = "";
                attri = configData.GetAttribute("SimUUID");
                if (attri == "")
                {
                    this.SimUUID = LLUUID.Random();
                    configData.SetAttribute("SimUUID", this.SimUUID.ToString());
                }
                else
                {
                    this.SimUUID = new LLUUID(attri);
                }

                // Sim name
                attri = "";
                attri = configData.GetAttribute("SimName");
                if (attri == "")
                {
                    this.RegionName = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Name", "OpenSim test");
                    configData.SetAttribute("SimName", this.RegionName);
                }
                else
                {
                    this.RegionName = attri;
                }
                // Sim/Grid location X
                attri = "";
                attri = configData.GetAttribute("SimLocationX");
                if (attri == "")
                {
                    string location = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid Location X", "997");
                    configData.SetAttribute("SimLocationX", location);
                    this.RegionLocX = (uint)Convert.ToUInt32(location);
                }
                else
                {
                    this.RegionLocX = (uint)Convert.ToUInt32(attri);
                }
                // Sim/Grid location Y
                attri = "";
                attri = configData.GetAttribute("SimLocationY");
                if (attri == "")
                {
                    string location = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid Location Y", "996");
                    configData.SetAttribute("SimLocationY", location);
                    this.RegionLocY = (uint)Convert.ToUInt32(location);
                }
                else
                {
                    this.RegionLocY = (uint)Convert.ToUInt32(attri);
                }

                // Local storage datastore
                attri = "";
                attri = configData.GetAttribute("Datastore");
                if (attri == "")
                {
                    string datastore = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Filename for local storage", "localworld.yap");
                    configData.SetAttribute("Datastore", datastore);
                    this.DataStore = datastore;
                }
                else
                {
                    this.DataStore = attri;
                }

                //Sim Listen Port
                attri = "";
                attri = configData.GetAttribute("SimListenPort");
                if (attri == "")
                {
                    string port = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("UDP port for client connections", "9000");
                    configData.SetAttribute("SimListenPort", port);
                    this.IPListenPort = Convert.ToInt32(port);
                }
                else
                {
                    this.IPListenPort = Convert.ToInt32(attri);
                }
                //Sim Listen Address
                attri = "";
                attri = configData.GetAttribute("SimListenAddress");
                if (attri == "")
                {
                    this.IPListenAddr = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("IP Address to listen on for client connections", "127.0.0.1");
                    configData.SetAttribute("SimListenAddress", this.IPListenAddr);
                }
                else
                {
                    this.IPListenAddr = attri;
                }

                this.RegionHandle = Util.UIntsToLong((RegionLocX * 256), (RegionLocY * 256));

                configData.Commit();
            }
            catch (Exception e)
            {
                OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Exception occured");
                OpenSim.Framework.Console.MainConsole.Instance.WriteLine(e.ToString());
            }

            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Sim settings loaded:");
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("UUID: " + this.SimUUID.ToStringHyphenated());
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Name: " + this.RegionName);
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Region Location: [" + this.RegionLocX.ToString() + "," + this.RegionLocY + "]");
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Region Handle: " + this.RegionHandle.ToString());
            OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Listening on IP: " + this.IPListenAddr + ":" + this.IPListenPort);
        }
Example #14
0
 protected virtual void SetupFromConfigFile(IGenericConfig configData)
 {
 }
        // TEMP - REMOVE
        public void performConfigurationRetrieve()
        {
            if (cE > 1)
            {
                m_log.Error("READING CONFIGURATION COUT: " + cE.ToString());
            }


            configurationPlugin = LoadConfigDll(configurationPluginFilename);
            configurationOptions.Clear();
            if (loadFunction == null)
            {
                m_log.Error("Load Function for '" + configurationDescription +
                            "' is null. Refusing to run configuration.");
                return;
            }

            if (resultFunction == null)
            {
                m_log.Error("Result Function for '" + configurationDescription +
                            "' is null. Refusing to run configuration.");
                return;
            }

            //m_log.Debug("[CONFIG]: Calling Configuration Load Function...");
            loadFunction();

            if (configurationOptions.Count <= 0)
            {
                m_log.Error("[CONFIG]: No configuration options were specified for '" + configurationOptions +
                            "'. Refusing to continue configuration.");
                return;
            }

            bool useFile = true;

            if (configurationPlugin == null)
            {
                m_log.Error("[CONFIG]: Configuration Plugin NOT LOADED!");
                return;
            }

            if (configurationFilename.Trim() != String.Empty)
            {
                configurationPlugin.SetFileName(configurationFilename);
                try
                {
                    configurationPlugin.LoadData();
                    useFile = true;
                }
                catch (XmlException e)
                {
                    m_log.WarnFormat("[CONFIG] Not using {0}: {1}",
                                     configurationFilename,
                                     e.Message.ToString());
                    //m_log.Error("Error loading " + configurationFilename + ": " + e.ToString());
                    useFile = false;
                }
            }
            else
            {
                if (configurationFromXMLNode != null)
                {
                    m_log.Info("Loading from XML Node, will not save to the file");
                    configurationPlugin.LoadDataFromString(configurationFromXMLNode.OuterXml);
                }

                m_log.Info("XML Configuration Filename is not valid; will not save to the file.");
                useFile = false;
            }

            foreach (ConfigurationOption configOption in configurationOptions)
            {
                bool   convertSuccess       = false;
                object return_result        = null;
                string errorMessage         = String.Empty;
                bool   ignoreNextFromConfig = false;
                while (convertSuccess == false)
                {
                    string console_result = String.Empty;
                    string attribute      = null;
                    if (useFile || configurationFromXMLNode != null)
                    {
                        if (!ignoreNextFromConfig)
                        {
                            attribute = configurationPlugin.GetAttribute(configOption.configurationKey);
                        }
                        else
                        {
                            ignoreNextFromConfig = false;
                        }
                    }

                    if (attribute == null)
                    {
                        if (configOption.configurationUseDefaultNoPrompt || useConsoleToPromptOnError == false)
                        {
                            console_result = configOption.configurationDefault;
                        }
                        else
                        {
                            if ((configOption.shouldIBeAsked != null &&
                                 configOption.shouldIBeAsked(configOption.configurationKey)) ||
                                configOption.shouldIBeAsked == null)
                            {
                                if (configurationDescription.Trim() != String.Empty)
                                {
                                    console_result =
                                        MainConsole.Instance.Prompt(
                                            configurationDescription + ": " + configOption.configurationQuestion,
                                            configOption.configurationDefault);
                                }
                                else
                                {
                                    console_result =
                                        MainConsole.Instance.Prompt(configOption.configurationQuestion,
                                                                    configOption.configurationDefault);
                                }
                            }
                            else
                            {
                                //Dont Ask! Just use default
                                console_result = configOption.configurationDefault;
                            }
                        }
                    }
                    else
                    {
                        console_result = attribute;
                    }

                    // if the first character is a "$", assume it's the name
                    // of an environment variable and substitute with the value of that variable
                    if (console_result.StartsWith("$"))
                    {
                        console_result = Environment.GetEnvironmentVariable(console_result.Substring(1));
                    }

                    switch (configOption.configurationType)
                    {
                    case ConfigurationOption.ConfigurationTypes.TYPE_STRING:
                        return_result  = console_result;
                        convertSuccess = true;
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY:
                        if (console_result.Length > 0)
                        {
                            return_result  = console_result;
                            convertSuccess = true;
                        }
                        errorMessage = "a string that is not empty";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN:
                        bool boolResult;
                        if (Boolean.TryParse(console_result, out boolResult))
                        {
                            convertSuccess = true;
                            return_result  = boolResult;
                        }
                        errorMessage = "'true' or 'false' (Boolean)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_BYTE:
                        byte byteResult;
                        if (Byte.TryParse(console_result, out byteResult))
                        {
                            convertSuccess = true;
                            return_result  = byteResult;
                        }
                        errorMessage = "a byte (Byte)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_CHARACTER:
                        char charResult;
                        if (Char.TryParse(console_result, out charResult))
                        {
                            convertSuccess = true;
                            return_result  = charResult;
                        }
                        errorMessage = "a character (Char)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_INT16:
                        short shortResult;
                        if (Int16.TryParse(console_result, out shortResult))
                        {
                            convertSuccess = true;
                            return_result  = shortResult;
                        }
                        errorMessage = "a signed 32 bit integer (short)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_INT32:
                        int intResult;
                        if (Int32.TryParse(console_result, out intResult))
                        {
                            convertSuccess = true;
                            return_result  = intResult;
                        }
                        errorMessage = "a signed 32 bit integer (int)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_INT64:
                        long longResult;
                        if (Int64.TryParse(console_result, out longResult))
                        {
                            convertSuccess = true;
                            return_result  = longResult;
                        }
                        errorMessage = "a signed 32 bit integer (long)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_IP_ADDRESS:
                        IPAddress ipAddressResult;
                        if (IPAddress.TryParse(console_result, out ipAddressResult))
                        {
                            convertSuccess = true;
                            return_result  = ipAddressResult;
                        }
                        errorMessage = "an IP Address (IPAddress)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UUID:
                        UUID uuidResult;
                        if (UUID.TryParse(console_result, out uuidResult))
                        {
                            convertSuccess = true;
                            return_result  = uuidResult;
                        }
                        errorMessage = "a UUID (UUID)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UUID_NULL_FREE:
                        UUID uuidResult2;
                        if (UUID.TryParse(console_result, out uuidResult2))
                        {
                            convertSuccess = true;

                            if (uuidResult2 == UUID.Zero)
                            {
                                uuidResult2 = UUID.Random();
                            }

                            return_result = uuidResult2;
                        }
                        errorMessage = "a non-null UUID (UUID)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_Vector3:
                        Vector3 vectorResult;
                        if (Vector3.TryParse(console_result, out vectorResult))
                        {
                            convertSuccess = true;
                            return_result  = vectorResult;
                        }
                        errorMessage = "a vector (Vector3)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UINT16:
                        ushort ushortResult;
                        if (UInt16.TryParse(console_result, out ushortResult))
                        {
                            convertSuccess = true;
                            return_result  = ushortResult;
                        }
                        errorMessage = "an unsigned 16 bit integer (ushort)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UINT32:
                        uint uintResult;
                        if (UInt32.TryParse(console_result, out uintResult))
                        {
                            convertSuccess = true;
                            return_result  = uintResult;
                        }
                        errorMessage = "an unsigned 32 bit integer (uint)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_UINT64:
                        ulong ulongResult;
                        if (UInt64.TryParse(console_result, out ulongResult))
                        {
                            convertSuccess = true;
                            return_result  = ulongResult;
                        }
                        errorMessage = "an unsigned 64 bit integer (ulong)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_FLOAT:
                        float floatResult;
                        if (
                            float.TryParse(console_result, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, Culture.NumberFormatInfo,
                                           out floatResult))
                        {
                            convertSuccess = true;
                            return_result  = floatResult;
                        }
                        errorMessage = "a single-precision floating point number (float)";
                        break;

                    case ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE:
                        double doubleResult;
                        if (
                            Double.TryParse(console_result, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, Culture.NumberFormatInfo,
                                            out doubleResult))
                        {
                            convertSuccess = true;
                            return_result  = doubleResult;
                        }
                        errorMessage = "an double-precision floating point number (double)";
                        break;
                    }

                    if (convertSuccess)
                    {
                        if (useFile)
                        {
                            configurationPlugin.SetAttribute(configOption.configurationKey, console_result);
                        }

                        if (!resultFunction(configOption.configurationKey, return_result))
                        {
                            m_log.Info(
                                "The handler for the last configuration option denied that input, please try again.");
                            convertSuccess       = false;
                            ignoreNextFromConfig = true;
                        }
                    }
                    else
                    {
                        if (configOption.configurationUseDefaultNoPrompt)
                        {
                            m_log.Error(string.Format(
                                            "[CONFIG]: [{3}]:[{1}] is not valid default for parameter [{0}].\nThe configuration result must be parsable to {2}.\n",
                                            configOption.configurationKey, console_result, errorMessage,
                                            configurationFilename));
                            convertSuccess = true;
                        }
                        else
                        {
                            m_log.Warn(string.Format(
                                           "[CONFIG]: [{3}]:[{1}] is not a valid value [{0}].\nThe configuration result must be parsable to {2}.\n",
                                           configOption.configurationKey, console_result, errorMessage,
                                           configurationFilename));
                            ignoreNextFromConfig = true;
                        }
                    }
                }
            }

            if (useFile)
            {
                configurationPlugin.Commit();
                configurationPlugin.Close();
            }
        }
Example #16
0
        // TEMP - REMOVE
        public void performConfigurationRetrieve()
        {
            if (cE > 1)
                m_log.Error("READING CONFIGURATION COUT: " + cE.ToString());


            configurationPlugin = LoadConfigDll(configurationPluginFilename);
            configurationOptions.Clear();
            if (loadFunction == null)
            {
                m_log.Error("Load Function for '" + configurationDescription +
                            "' is null. Refusing to run configuration.");
                return;
            }

            if (resultFunction == null)
            {
                m_log.Error("Result Function for '" + configurationDescription +
                            "' is null. Refusing to run configuration.");
                return;
            }

            //m_log.Debug("[CONFIG]: Calling Configuration Load Function...");
            loadFunction();

            if (configurationOptions.Count <= 0)
            {
                m_log.Error("[CONFIG]: No configuration options were specified for '" + configurationOptions +
                            "'. Refusing to continue configuration.");
                return;
            }

            bool useFile = true;
            if (configurationPlugin == null)
            {
                m_log.Error("[CONFIG]: Configuration Plugin NOT LOADED!");
                return;
            }

            if (configurationFilename.Trim() != String.Empty)
            {
                configurationPlugin.SetFileName(configurationFilename);
                try
                {
                    configurationPlugin.LoadData();
                    useFile = true;
                }
                catch (XmlException e)
                {
                    m_log.WarnFormat("[CONFIG] Not using {0}: {1}",
                            configurationFilename,
                            e.Message.ToString());
                    //m_log.Error("Error loading " + configurationFilename + ": " + e.ToString());
                    useFile = false;
                }
            }
            else
            {
                if (configurationFromXMLNode != null)
                {
                    m_log.Info("Loading from XML Node, will not save to the file");
                    configurationPlugin.LoadDataFromString(configurationFromXMLNode.OuterXml);
                }

                m_log.Info("XML Configuration Filename is not valid; will not save to the file.");
                useFile = false;
            }

            foreach (ConfigurationOption configOption in configurationOptions)
            {
                bool convertSuccess = false;
                object return_result = null;
                string errorMessage = String.Empty;
                bool ignoreNextFromConfig = false;
                while (convertSuccess == false)
                {
                    string console_result = String.Empty;
                    string attribute = null;
                    if (useFile || configurationFromXMLNode != null)
                    {
                        if (!ignoreNextFromConfig)
                        {
                            attribute = configurationPlugin.GetAttribute(configOption.configurationKey);
                        }
                        else
                        {
                            ignoreNextFromConfig = false;
                        }
                    }

                    if (attribute == null)
                    {
                        if (configOption.configurationUseDefaultNoPrompt || useConsoleToPromptOnError == false)
                        {
                            console_result = configOption.configurationDefault;
                        }
                        else
                        {
                            if ((configOption.shouldIBeAsked != null &&
                                 configOption.shouldIBeAsked(configOption.configurationKey)) ||
                                configOption.shouldIBeAsked == null)
                            {
                                if (configurationDescription.Trim() != String.Empty)
                                {
                                    console_result =
                                        MainConsole.Instance.CmdPrompt(
                                            configurationDescription + ": " + configOption.configurationQuestion,
                                            configOption.configurationDefault);
                                }
                                else
                                {
                                    console_result =
                                        MainConsole.Instance.CmdPrompt(configOption.configurationQuestion,
                                                                       configOption.configurationDefault);
                                }
                            }
                            else
                            {
                                //Dont Ask! Just use default
                                console_result = configOption.configurationDefault;
                            }
                        }
                    }
                    else
                    {
                        console_result = attribute;
                    }

                    // if the first character is a "$", assume it's the name
                    // of an environment variable and substitute with the value of that variable
                    if (console_result.StartsWith("$"))
                        console_result = Environment.GetEnvironmentVariable(console_result.Substring(1));

                    switch (configOption.configurationType)
                    {
                        case ConfigurationOption.ConfigurationTypes.TYPE_STRING:
                            return_result = console_result;
                            convertSuccess = true;
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY:
                            if (console_result.Length > 0)
                            {
                                return_result = console_result;
                                convertSuccess = true;
                            }
                            errorMessage = "a string that is not empty";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN:
                            bool boolResult;
                            if (Boolean.TryParse(console_result, out boolResult))
                            {
                                convertSuccess = true;
                                return_result = boolResult;
                            }
                            errorMessage = "'true' or 'false' (Boolean)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_BYTE:
                            byte byteResult;
                            if (Byte.TryParse(console_result, out byteResult))
                            {
                                convertSuccess = true;
                                return_result = byteResult;
                            }
                            errorMessage = "a byte (Byte)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_CHARACTER:
                            char charResult;
                            if (Char.TryParse(console_result, out charResult))
                            {
                                convertSuccess = true;
                                return_result = charResult;
                            }
                            errorMessage = "a character (Char)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_INT16:
                            short shortResult;
                            if (Int16.TryParse(console_result, out shortResult))
                            {
                                convertSuccess = true;
                                return_result = shortResult;
                            }
                            errorMessage = "a signed 32 bit integer (short)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_INT32:
                            int intResult;
                            if (Int32.TryParse(console_result, out intResult))
                            {
                                convertSuccess = true;
                                return_result = intResult;
                            }
                            errorMessage = "a signed 32 bit integer (int)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_INT64:
                            long longResult;
                            if (Int64.TryParse(console_result, out longResult))
                            {
                                convertSuccess = true;
                                return_result = longResult;
                            }
                            errorMessage = "a signed 32 bit integer (long)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_IP_ADDRESS:
                            IPAddress ipAddressResult;
                            if (IPAddress.TryParse(console_result, out ipAddressResult))
                            {
                                convertSuccess = true;
                                return_result = ipAddressResult;
                            }
                            errorMessage = "an IP Address (IPAddress)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_UUID:
                            UUID uuidResult;
                            if (UUID.TryParse(console_result, out uuidResult))
                            {
                                convertSuccess = true;
                                return_result = uuidResult;
                            }
                            errorMessage = "a UUID (UUID)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_UUID_NULL_FREE:
                            UUID uuidResult2;
                            if (UUID.TryParse(console_result, out uuidResult2))
                            {
                                convertSuccess = true;

                                if (uuidResult2 == UUID.Zero)
                                    uuidResult2 = UUID.Random();

                                return_result = uuidResult2;
                            }
                            errorMessage = "a non-null UUID (UUID)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_Vector3:
                            Vector3 vectorResult;
                            if (Vector3.TryParse(console_result, out vectorResult))
                            {
                                convertSuccess = true;
                                return_result = vectorResult;
                            }
                            errorMessage = "a vector (Vector3)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_UINT16:
                            ushort ushortResult;
                            if (UInt16.TryParse(console_result, out ushortResult))
                            {
                                convertSuccess = true;
                                return_result = ushortResult;
                            }
                            errorMessage = "an unsigned 16 bit integer (ushort)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_UINT32:
                            uint uintResult;
                            if (UInt32.TryParse(console_result, out uintResult))
                            {
                                convertSuccess = true;
                                return_result = uintResult;
                            }
                            errorMessage = "an unsigned 32 bit integer (uint)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_UINT64:
                            ulong ulongResult;
                            if (UInt64.TryParse(console_result, out ulongResult))
                            {
                                convertSuccess = true;
                                return_result = ulongResult;
                            }
                            errorMessage = "an unsigned 64 bit integer (ulong)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_FLOAT:
                            float floatResult;
                            if (
                                float.TryParse(console_result, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, Culture.NumberFormatInfo,
                                               out floatResult))
                            {
                                convertSuccess = true;
                                return_result = floatResult;
                            }
                            errorMessage = "a single-precision floating point number (float)";
                            break;
                        case ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE:
                            double doubleResult;
                            if (
                                Double.TryParse(console_result, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, Culture.NumberFormatInfo,
                                                out doubleResult))
                            {
                                convertSuccess = true;
                                return_result = doubleResult;
                            }
                            errorMessage = "an double-precision floating point number (double)";
                            break;
                    }

                    if (convertSuccess)
                    {
                        if (useFile)
                        {
                            configurationPlugin.SetAttribute(configOption.configurationKey, console_result);
                        }

                        if (!resultFunction(configOption.configurationKey, return_result))
                        {
                            m_log.Info(
                                "The handler for the last configuration option denied that input, please try again.");
                            convertSuccess = false;
                            ignoreNextFromConfig = true;
                        }
                    }
                    else
                    {
                        if (configOption.configurationUseDefaultNoPrompt)
                        {
                            m_log.Error(string.Format(
                                            "[CONFIG]: [{3}]:[{1}] is not valid default for parameter [{0}].\nThe configuration result must be parsable to {2}.\n",
                                            configOption.configurationKey, console_result, errorMessage,
                                            configurationFilename));
                            convertSuccess = true;
                        }
                        else
                        {
                            m_log.Warn(string.Format(
                                           "[CONFIG]: [{3}]:[{1}] is not a valid value [{0}].\nThe configuration result must be parsable to {2}.\n",
                                           configOption.configurationKey, console_result, errorMessage,
                                           configurationFilename));
                            ignoreNextFromConfig = true;
                        }
                    }
                }
            }

            if (useFile)
            {
                configurationPlugin.Commit();
                configurationPlugin.Close();
            }
        }
Example #17
0
 public ConfigReader(ArgumentValueReader argumentValueReader, IConfig config, IGenericConfig genericConfig)
 {
     _argumentValueReader = argumentValueReader;
     _config        = config;
     _genericConfig = genericConfig;
 }