public static ScriptConfig Parse(string[] args)
        {
            ScriptConfig result = new ScriptConfig();

            foreach (var item in args)
            {
                var values = item.Split(':');
                switch (values.Length)
                {
                case 1:
                    if (values[0].StartsWith('/'))
                    {
                        setConfigValueByKey(result, values[0], true);
                    }
                    else
                    {
                        result.File = values[0];
                    }

                    break;

                case 2:
                    setConfigValueByKey(result, values[0], values[1]);
                    break;

                default:
                    throw new ArgumentException($"invalid parameter {item}");
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                showUsage();
            }
            else
            {
                ScriptConfig config = null;
                try
                {
                    config = ScriptConfig.Parse(args);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("invalid parameter");
                    Console.WriteLine(ex.Message);
                    showUsage();
                    Console.WriteLine("Press any key to exit");
                    Console.Read();
                    return;
                }
                JavaScriptHostingConfig hostingConfig = new JavaScriptHostingConfig(false);
                hostingConfig
                .AddPlugin <SysInfoPluginInstaller>("SysInfo")
                .AddModuleFolder(config.RootFolder)
                .AddModuleFolderFromCurrentAssembly()
                .EnableHosting((moduleName) => { return(hostingConfig); })
                .AddPluginLoader(JavaScriptHostingConfig.DefaultPluginInstaller)
                ;
                ChakraCore.NET.Plugin.Common.EchoProvider.OnEcho = (msg) => { Console.WriteLine(msg); };

                string script = File.ReadAllText(config.File);
                Console.WriteLine("---Script Start---");
                if (config.IsModule)
                {
                    var app = JavaScriptHosting.Default.GetModuleClass <JSApp>(config.FileName, config.ModuleClass, hostingConfig);
                    app.EntryPoint = config.ModuleEntryPoint;
                    app.Run();
                }
                else
                {
                    JavaScriptHosting.Default.RunScript(script, hostingConfig);
                }
            }

            Console.WriteLine("Press Enter to exit");
            Console.Read();
        }
        private static void setConfigValueByKey(ScriptConfig target, string propertyKey, object value)
        {
            var properties = target.GetType().GetProperties();

            foreach (var item in properties)
            {
                foreach (ConfigKeyAttribute configKey in item.GetCustomAttributes(typeof(ConfigKeyAttribute), false))
                {
                    if (string.Compare(configKey?.Key, propertyKey, true) == 0)
                    {
                        if (configKey.IsBoolean && value.GetType() != typeof(Boolean))
                        {
                            throw new ArgumentException($"{propertyKey} switch cannot assign value");
                        }
                        item.SetValue(target, value);
                        return;
                    }
                }
            }
        }