コード例 #1
0
ファイル: Main.cs プロジェクト: nicoriff/NinoJS
        /// <summary>
        /// Method to use for running Javascript Files.
        /// </summary>
        /// <param name="filePath">Path to JS or JSE File</param>
        public void RunScript(object filePath)
        {
            try
            {
                /* CODIGO JINTENGINE VIEJO
                Engine engine = new Engine(cfg => cfg.AllowClr(typeof(NinoJS.Resources.SQL).Assembly))
                    .SetValue("log", new Action<object>(Console.WriteLine));
                engine.Execute(fileContent);
                */

                string fileContent = new StreamReader(filePath.ToString()).ReadToEnd();

                var engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);
                var typeCollection = new HostTypeCollection("mscorlib", "System", "System.Core", "NinoJS.Resources");
                engine.AddHostObject("clr", typeCollection);
                engine.AddHostObject("host", new HostFunctions());
                engine.AddHostObject("extendedHost", new ExtendedHostFunctions());
                engine.AddHostObject("console", new NinoJS.Core.Helpers.Console());

                engine.Execute(fileContent);
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.ToString());
                log.LogError(ex.ToString());
            }
        }
コード例 #2
0
ファイル: Engine.cs プロジェクト: softsprocket/winjs
 public Engine()
 {
     engine = new V8ScriptEngine (V8ScriptEngineFlags.EnableDebugging);
     engine.AddHostObject ("dotnet", new Microsoft.ClearScript.HostTypeCollection ("mscorlib", "System.Core"));
     engine.AddHostType ("WinJS_KeyUtil", typeof (KeyUtil));
     engine.AddHostType ("WinJS_FileUtils", typeof (FileUtils));
     engine.AddHostObject ("WinJS_host", new Microsoft.ClearScript.HostFunctions ());
 }
コード例 #3
0
        public static HtmlDocumentFacade ProcessServerSideScripts(this HtmlDocumentFacade doc)
        {
            var scripts = doc.getElementsByTagName("script");
            var noSideScripts = scripts
                .Where(_TestForNoSide);
            var noSideScriptsList = noSideScripts.ToList();
            noSideScriptsList.ForEach(node =>
            {
                node.parentNode.removeChild(node);
            });
            var serverSideScripts = scripts
                .Where(_TestForServerSide)
                .Where(_TestForRealScript)
            ;
            var sb = new StringBuilder();
            //serverSideScripts = serverSideScripts.Where(node => string.IsNullOrEmpty(node.getAttribute(ModelAttribute)));
            var serverSideScriptsList = serverSideScripts.ToList();
            serverSideScriptsList.ForEach(node =>
            {
                string src = node.getAttribute("src");
                if (string.IsNullOrEmpty(src))
                {
                    sb.AppendLine(node.innerHTML);
                }
                else
                {
                    sb.AppendLine(doc.GetHostContent(src));
                }
                if (!_TestForClientSide(node))
                {
                    node.parentNode.removeChild(node);
                }
            });
            string script = sb.ToString();
            if (script.Length > 0)
            {
                // Initialize a context
                script = sb.ToString();
                using (var engine = new V8ScriptEngine())
                {
                    var jqueryFacade = new JQueryFacade(doc);
                    engine.AddHostObject("console", new Console());
                    engine.AddHostObject("document", doc);
                    engine.AddHostObject("jQueryServerSideFacade", jqueryFacade);
                    engine.Execute("var " + modeParameter + "='server'");
                    if (doc.ProcessContext.Model != null)
                    {
                        engine.AddHostObject("model", doc.ProcessContext.Model);
                    }
                    engine.Execute(script);
                }
            }

            return doc;
        }
コード例 #4
0
        public static void Main()
        {
            using (var engine = new V8ScriptEngine(typeof(ClearScriptConsole).Name, V8ScriptEngineFlags.EnableDebugging))
            {
                engine.AddHostObject("host", new ExtendedHostFunctions());
                engine.AddHostObject("lib", HostItemFlags.GlobalMembers, new HostTypeCollection("mscorlib", "System", "System.Core", "ClearScript"));
                engine.AllowReflection = true;

                RunStartupFile(engine);
                RunConsole(engine);
            }
        }
コード例 #5
0
            public void RunScript(string script)
            {
                Console.WriteLine("[{0}] {1} clicked Run Script", DateTime.Now, Context.ConnectionId);

                if (jContext == null)
                {
                    jContext = new V8ScriptEngine();
                    jContext.AddHostObject("map", map);
                    jContext.AddHostType("Console", typeof(Console));
                }

                try
                {
                    jContext.Evaluate(script);
                }
                catch (ScriptEngineException ex)
                {
                    Clients.All.receiveMessage("JavaScript Engine:" + ex.Message + "<br>");
                }

                foreach (var token in map.GetTokenList())
                {
                    Clients.All.onTokenMoved(token.Id, token.X, token.Y, "nobody");
                }
            }
コード例 #6
0
ファイル: JSPlayer.cs プロジェクト: elrha/GoldMine
 public IJSPlayer(string fileFullPath, ILog iLog)
 {
     this.iLog = iLog;
     engin = new V8ScriptEngine();
     engin.Execute(File.ReadAllText(fileFullPath));
     engin.AddHostObject("Console", iLog);
 }
コード例 #7
0
        public void Can_Perform_JS_ToLower_On_An_Object_Property()
        {
            using (var engine = new V8ScriptEngine(V8ScriptEngineFlags.DisableGlobalMembers))
            {
                var myObject = new {MyString = "Just a test string"};

                engine.Script.MyString = "Just a test string";
                engine.AddHostType("Console", typeof(Console));
                engine.AddHostObject("myObject", myObject);

                engine.Execute("Console.WriteLine ('Length of MyString = {0}', myObject.MyString.toLowerCase())");
            }
        }
コード例 #8
0
        public Task <IRunResult> Run <T>(ClearScriptScript script, IScriptEnvironment <T> externalEnvironment)
        {
            //TODO: add checks for script context type, version and environment

            var runId       = Guid.NewGuid().ToString();
            var jintContext = externalEnvironment.Context;

            _engine.AddHostObject("context", jintContext);
            _engine.Execute(script.JavaScriptCode);
            return(Task.FromResult <IRunResult>(new ScriptExecutionSuccess()
            {
                Id = runId
            }));
        }
コード例 #9
0
        public void LogFromV8()
        {
            using var engine = new V8ScriptEngine();

            engine.AddHostObject("output", _output);

            engine.Execute(@"
                  function hello() { 
                    output.WriteLine('Hello World');
                  };
                  
                  hello();
                ");
        }
コード例 #10
0
ファイル: Test_SwiProlog.cs プロジェクト: AdamSobieski/Logic
        public static void Initialize(TestContext context)
        {
            var settings = new SwiPrologInitializationSettings
            {
                HomeDirectory = @"C:\Program Files\swipl",
                SetHomeDirectoryEnvironmentVariable = true,
                BinaryDirectory = @"C:\Program Files\swipl\bin",
                PrependBinaryDirectoryToPath = true
            };

            v8     = new V8ScriptEngine();
            prolog = new SwiPrologEngine(settings);
            v8.AddHostType("Console", typeof(Console));
            v8.AddHostObject("prolog", prolog);
        }
コード例 #11
0
        public void Execute(SaveFile saveFile, string folderPath, bool debuggingEnabled, int debuggingPort)
        {
            V8ScriptEngineFlags flag;

            if (debuggingEnabled)
            {
                flag = V8ScriptEngineFlags.EnableDebugging;
            }
            else
            {
                flag = V8ScriptEngineFlags.None;
            }
            if (_engine == null)
            {
                _engine = new V8ScriptEngine(flag, debuggingPort);
            }
            _engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading;
            _engine.AddHostObject("lib", new HostTypeCollection(typeof(SaveFile).Assembly));
            _engine.AddHostObject("nodes", saveFile.Nodes);
            _engine.AddHostObject("host", new HostFunctions());
            _engine.AddHostType(typeof(Enumerable));
            _engine.AddHostType(typeof(EnumerableExtensions));
            _engine.ExecuteDocument(Path.Combine(folderPath, "script.js"));
        }
コード例 #12
0
        protected override void InnerEmbedHostObject(string itemName, object value)
        {
            object processedValue = MapToClearScriptType(value);

            lock (_executionSynchronizer)
            {
                try
                {
                    _jsEngine.AddHostObject(itemName, processedValue);
                }
                catch (OriginalJsException e)
                {
                    throw ConvertScriptEngineExceptionToJsRuntimeException(e);
                }
            }
        }
コード例 #13
0
ファイル: GameEngine.cs プロジェクト: punio7/DungeonCrawler2
        internal void Init()
        {
            Dispose();
            V8ScriptEngineFlags flags = V8ScriptEngineFlags.None;

#if DEBUG
            flags |= V8ScriptEngineFlags.EnableDebugging;
            flags |= V8ScriptEngineFlags.EnableRemoteDebugging;
#endif
            scriptEngine  = new V8ScriptEngine(flags);
            loadedScripts = new HashSet <string>();
            scriptEngine.AddHostObject("Engine", new GameEngineProxy(this));
            LoadScript("src/Init.js");
            scriptEngine.Execute("Init()");
            executeScript = scriptEngine.Compile("Execute(Engine.Input);");
        }
コード例 #14
0
        /// <summary>
        /// Assumes layout has been already applied
        /// Note: method mutates graph and graphLayout
        /// </summary>
        public void ImproveAppliedLayout(SigmaGraphModel graph, GraphLayout graphLayout, LayoutSettings layoutSettings, TimeSpan duration)
        {
            using (var engine = new V8ScriptEngine())
            {
                try
                {
                    var v8Graph = new V8GraphModel();
                    v8Graph.LoadSigma(graph);
                    engine.AddHostObject("log", _log);

                    engine.Execute("var graph = " + JsonConvention.SerializeObject(v8Graph) + ";");
                    engine.Execute("var settings = " + JsonConvention.SerializeObject(layoutSettings) + ";");
                    engine.Execute("var duration = " + JsonConvention.SerializeObject(duration.TotalMilliseconds) + ";");

                    var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;

                    var forceAtlas2   = engine.Compile(File.ReadAllText($@"{baseDirectory}\App\Graph\Layout\ForceAtlas2.js"));
                    var serviceScript = engine.Compile(File.ReadAllText($@"{baseDirectory}\App\Graph\Layout\GraphLayoutService.js"));
                    engine.Execute(forceAtlas2);
                    engine.Execute(serviceScript);

                    var nodesJson = engine.Evaluate("JSON.stringify(nodes)").ToString();
                    var nodes     = JsonConvention.DeserializeObject <V8NodeModel[]>(nodesJson);
                    for (int i = 0; i < nodes.Length; i++)
                    {
                        var node = graph.Nodes[i];
                        node.X = nodes[i].x;
                        node.Y = nodes[i].y;

                        var id = node.Entity;
                        if (id.HasValue)
                        {
                            graphLayout[id.Value] = new GraphLayout.Coords()
                            {
                                X = nodes[i].x,
                                Y = nodes[i].y
                            };
                        }
                    }
                }
                catch (ScriptEngineException e)
                {
                    _log.Error("V8 exception: " + e.ErrorDetails);
                    throw;
                }
            }
        }
コード例 #15
0
ファイル: JsFile.cs プロジェクト: Frolov-Nikita/ModbusSimJs
        private void compileScript(string src, Dictionary <string, object> hostObjects = null)
        {
            Ok     = false;
            engine = new V8ScriptEngine();
            code   = engine.Compile(src);

            if (hostObjects != null)
            {
                foreach (var kvp in hostObjects)
                {
                    engine.AddHostObject(kvp.Key, kvp.Value);
                }
            }

            engine.Execute(code);
            Ok = true;
        }
コード例 #16
0
        private static void Execute(Context context)
        {
            try
            {
                using var engine = new V8ScriptEngine
                      {
                          AllowReflection = true
                      };

                engine.AddHostObject("context", context);

                Console.WriteLine(engine.Evaluate("context.Value.ToString()"));
            }
            catch (Exception exception)
            {
                Console.WriteLine($"{exception.Message} Error testing {context.Value} [{context.Value.GetType().Name}]");
            }
        }
コード例 #17
0
        public IActionResult Index()
        {
            string result = "Ok";

            try
            {
                var engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion);
                engine.AddHostObject("host", new HostFunctions());
                engine.AddHostType("LoggerConsole", typeof(LoggerConsole));
                // engine.Execute(@" var o=new LoggerConsole();   o.Log(2+3+''); ");
                result = engine.Evaluate(@" 2+3 ") + "";
            }
            catch (Exception ex)
            {
                result = "Error " + ex.Message;
            }
            return(View("Index", result));
        }
コード例 #18
0
        private MockEngineResponse ExecuteAction(V8ScriptEngine scriptEngine, string scenarioName, MockAction action)
        {
            _logProvider.Information("executing action: {action}", action);
            var response = new MockEngineResponse()
            {
                Success = true
            };

            if (action.Before != null)
            {
                try
                {
                    scriptEngine.Execute(action.Before);
                }
                catch (Exception e)
                {
                    throw new MockEngineException(this.Name, scenarioName, $"error executing Before code: {e.Message}", e);
                }
            }
            if (action.Response != null)
            {
                response = BuildResponse(scriptEngine, scenarioName, action);
                if (response != null)
                {
                    scriptEngine.AddHostObject("response", response);
                }
            }
            if (action.After != null)
            {
                try
                {
                    scriptEngine.Execute(action.After);
                }
                catch (Exception e)
                {
                    throw new MockEngineException(this.Name, scenarioName, $"error executing After code: {e.Message}", e);
                }
            }
            if (action.Log != null)
            {
                _logProvider.Information(ApplyExpressions(scriptEngine, action.Log, false));
            }
            return(response);
        }
        public bool ClearScript(Parameter parameter)
        {
            StringBuilder statementBuilder = new StringBuilder();

            for (int i = 0; i < parameter.Statements.Length; ++i)
            {
                statementBuilder.Append("results[").Append(i).Append("] = ").Append(parameter.Statements[i]).AppendLine(";");
            }

            int[] results = new int[parameter.Statements.Length];
            using (V8ScriptEngine engine = new V8ScriptEngine())
            {
                engine.AddHostObject("results", results);

                engine.Execute(statementBuilder.ToString());

                return(Assert(results, parameter.Sum));
            }
        }
コード例 #20
0
        private void ConfigureScriptEngine(V8ScriptEngine context, dynamic globalValues, dynamic flowValues, object functionValues)
        {
            // Always serialize object to string, and let the JS side deserialize it to proper JScript objects
            dynamic valueProxy = null;

            if (functionValues == null)
            {
                valueProxy = new object();
            }
            else
            {
                valueProxy = new { param1 = JsonConvert.SerializeObject(functionValues) }
            };

            // Dummy objects to support scripts meant for NodeJS
            var exports = new Dictionary <string, object>().ToDynamic(context);

            context.AddHostObject("exports", exports);
            context.AddHostObject("module", new { exports });

            context.AddHostObject("chatContext", new
            {
                isNode     = false,
                api        = ScriptHost,
                global     = globalValues,
                local      = flowValues,
                parameters = valueProxy,
                sessionId  = ChatModel.ChatId
            });

            // Add backward compatibility
            context.AddHostObject("args", valueProxy);
            context.AddHostObject("local", flowValues);
            context.AddHostObject("global", globalValues);
            context.AddHostObject("s", globalValues);
            context.AddHostObject("api", ScriptHost);

            LoadSharedScripts(context, false);
        }
コード例 #21
0
ファイル: XFADOM.cs プロジェクト: msavidg/XFAForms
        public void Test(XDPFile xdp, XDocument form)
        {
            _configDom.Initialize(_form);

            _connectionSetDom.Initialize(_form);

            _connectionDataDom.Initialize(_form);

            _xmlDataDom.Initialize(_formData);

            //xfa.record
            _xfaDataDom.Initialize(_xfaObject, _formData);

            //xfa.template
            _templateDom.Initialize(_xfaObject, _xdp, _form);

            _dataDescriptionDom.Initialize(_form);

            //xfa.form
            _formDom.Initialize(_form);

            _layoutDom.Initialize(_form);

            _engine.AddHostObject("xfa", _xfaObject);

            var a1 = _engine.Evaluate("xfa.record.CurrentRisk.Options.nodes.length");
            var a2 = _engine.Evaluate("xfa.record.CurrentRisk.Options.nodes.item(0)");
            var a3 = _engine.Evaluate("xfa.record.CurrentRisk.Options.nodes.item(0).OptionId.value");

            _engine.Execute("xfa.record.CurrentRisk.Options.nodes.item(0).OptionId.value=99");
            var a5 = _engine.Evaluate("xfa.record.CurrentRisk.Options.nodes.item(0).OptionId.value");
            var a6 = _engine.Evaluate("xfa.record.CurrentRisk.Options.nodes.item(0).OptionDetailECP.OptionDetailECPId.value");

            if (_xdp.Filename.Contains("Sample_001"))
            {
                var x = _xfaObject.template.GetDynamicMemberNames();

                var b1 = _engine.Evaluate("xfa.template.form1.minH");
                var b2 = _engine.Evaluate("xfa.template.form1.layout");
            }
        }
コード例 #22
0
        public void Execute_Method_from_external_object_and_return_value()
        {
            var calculator = new TestCalculator();

            using var engine = new V8ScriptEngine();
            engine.AddHostObject("calculator", calculator);

            engine.Execute(@"
                  function calc() { 
                     return calculator.Add(1,2);
                  };
                  var result = calc();
                ");

            var value = (int)engine.Script.result;


            value.Should().Be(calculator.Add(1, 2));

            _output.WriteLine(value.ToString());
        }
コード例 #23
0
        public HighlightJS(IResourceProvider resource)
        {
            this.resource = resource;

            engine = new V8ScriptEngine();

            engine.AddHostObject("require", new Func <string, object>(x => {
                string code = resource.ReadAllText(Path.Combine($@"\lib\{x.Substring(2)}.js"));
                return(engine.Evaluate(new DocumentInfo(x), @"(function(){ var exports = {}; var module = { exports: exports };" + code + @"; return exports === module.exports ? exports : module.exports; })()"));
            }));

            hljs = engine.Script.require(@".\index");

            var listLanguages  = hljs.GetProperty("listLanguages") as ScriptObject;
            var languagesArray = listLanguages.Invoke(false) as ScriptObject;
            var length         = languagesArray.GetProperty("length") as int? ?? 0;

            languages = Enumerable.Range(0, length).Select(x => languagesArray.GetProperty(x).ToString()).ToArray();

            highlightJsFunction = engine.Evaluate(@"((hljs, code, languageSubset) => hljs.highlightAuto(code, [languageSubset]).value)") as ScriptObject;
        }
コード例 #24
0
        public void PropertyBag_MultiEngine_HostFunctions()
        {
            using (var scriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging))
            {
                const string code = "bag.host.func(0, function () { return bag.func(); })";
                var          bag  = new PropertyBag
                {
                    { "host", new HostFunctions() },
                    { "func", new Func <object>(() => ScriptEngine.Current) }
                };

                engine.AddHostObject("bag", bag);
                scriptEngine.AddHostObject("bag", bag);

                var func = (Func <object>)engine.Evaluate(code);
                Assert.AreSame(engine, func());

                func = (Func <object>)scriptEngine.Evaluate(code);
                Assert.AreSame(scriptEngine, func());
            }
        }
コード例 #25
0
        public CompileResult Compile(string scriptPath)
        {
            using (var engine = new V8ScriptEngine())
            {
                var output = new StringWriter();
                try
                {
                    engine.Execute(_coffeeScript);
                    output.WriteLine(@"/**
 * CoffeeScript-Handler: {0}
 * CoffeeScript Compiler: {1}
 * ScriptPath: {2} 
 * Compiled at: {3} 
 */",
                                     FileVersionInfo.GetVersionInfo(GetType().Assembly.Location).FileVersion,
                                     engine.Evaluate("CoffeeScript.VERSION"),
                                     scriptPath,
                                     DateTime.UtcNow);

                    var code = File.ReadAllText(scriptPath);
                    engine.AddHostObject("code", new { Str = code });
                    var result = engine.Evaluate("CoffeeScript.compile(code.Str, {no_wrap: true})");
                    output.WriteLine();
                    output.WriteLine(result);

                    return(new CompileResult {
                        Ok = true, Value = output.ToString()
                    });
                }
                catch (Exception ex)
                {
                    output.WriteLine();
                    output.WriteLine(ex.Message);
                    return(new CompileResult {
                        Ok = false, Value = output.ToString()
                    });
                }
            }
        }
コード例 #26
0
        public ClearScriptEngine(IHandlebarsResourceProvider resourceProvider)
        {
            Console.Out.WriteLine("ClearScriptEngine Loaded");

            _resourceProvider = resourceProvider;

            _context = new V8ScriptEngine();
            _context.AddHostObject("clearScriptBridge",
                                   HostItemFlags.GlobalMembers,
                                   new ClearScriptBridgeFunctions(_context, _resourceProvider));

            // _context.Script.moduleLoader = new ModuleLoader(_context);
            // _context.Execute(File.ReadAllText("require.js"));
            // _context.Execute(@"require.load = function(context, name, url) { moduleLoader.LoadModuleAsync(context, name, url); };");

            _context.Execute("var raw = [];");
            _context.Execute("require('./Script/handlebars-1.0.0.js');");
            foreach (var script in HandlebarsConfiguration.Instance.Include)
            {
                _context.Execute("require('./" + script.Source + "');");
            }
        }
コード例 #27
0
        public void PropertyBag_MultiEngine()
        {
            var bag = new PropertyBag();

            engine.AddHostObject("bag", bag);

            Action innerTest = () =>
            {
                // The Visual Studio 2013 debugging stack fails to release the engine properly,
                // resulting in test failure. Visual Studio 2012 does not have this bug.

                using (var scriptEngine = new V8ScriptEngine())
                {
                    scriptEngine.AddHostObject("bag", bag);
                    Assert.AreEqual(2, bag.EngineCount);
                }
            };

            innerTest();
            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
            Assert.AreEqual(1, bag.EngineCount);
        }
コード例 #28
0
        public ClearScriptEngine(IHandlebarsResourceProvider resourceProvider)
        {
            Console.Out.WriteLine("ClearScriptEngine Loaded");

            _resourceProvider = resourceProvider;

            _context = new V8ScriptEngine();
            _context.AddHostObject("clearScriptBridge", 
                                   HostItemFlags.GlobalMembers,
                                   new ClearScriptBridgeFunctions(_context, _resourceProvider));

            // _context.Script.moduleLoader = new ModuleLoader(_context);
            // _context.Execute(File.ReadAllText("require.js"));
            // _context.Execute(@"require.load = function(context, name, url) { moduleLoader.LoadModuleAsync(context, name, url); };");
                
            _context.Execute("var raw = [];");
            _context.Execute("require('./Script/handlebars-1.0.0.js');");
            foreach (var script in HandlebarsConfiguration.Instance.Include)
            {
                _context.Execute("require('./" + script.Source + "');"); 
            }

        }
コード例 #29
0
        public static object RunJS_V8()
        {
            using (var engine = new V8ScriptEngine())
            {
                engine.AddHostType("Console", typeof(Console));
                engine.Execute("Console.WriteLine('{0}',Math.PI)");

                engine.AddHostObject("random", new Random());
                engine.Execute("Console.WriteLine('Next random Number is {0}',random.Next())");



                var f    = "test.js";
                var code = File.ReadAllText(f);
                engine.Compile(code);
                engine.AddHostType("Console", typeof(Console));
                engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");
                engine.AddHostType("Console", typeof(Console));
                engine.Evaluate("Console.debug('faasfafa')");
                var res = engine.Evaluate("test(fsfs)");
                Console.WriteLine(res);
            }
            return(null);
        }
コード例 #30
0
        /// <summary>
        /// 执行JS
        /// </summary>
        private static void RunJs(string code)
        {
            if (string.IsNullOrEmpty(code))
            {
                return;
            }

            using (var engine = new V8ScriptEngine())
            {
                // expose a host type

                engine.AddHostType("Console", typeof(Console));

                engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));

                //engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

                // expose a host object

                engine.AddHostObject("random", new Random());

                //engine.Execute("Console.WriteLine(random.NextDouble())");



                // expose entire assemblies



                // create a host object from script

                //            engine.Execute(@"

                //    birthday = new lib.System.DateTime(2007, 5, 22);

                //    Console.WriteLine(birthday.ToLongDateString());

                //");



                // use a generic class from script

                //            engine.Execute(@"

                //    Dictionary = lib.System.Collections.Generic.Dictionary;

                //    dict = new Dictionary(lib.System.String, lib.System.Int32);

                //    dict.Add('foo', 123);

                //");



                // call a host method with an output parameter

                engine.AddHostObject("host", new HostFunctions());

                //            engine.Execute(@"

                //    intVar = host.newVar(lib.System.Int32);

                //    found = dict.TryGetValue('foo', intVar.out);

                //    Console.WriteLine('{0} {1}', found, intVar);

                //");



                // create and populate a host array

                //            engine.Execute(@"

                //    numbers = host.newArr(lib.System.Int32, 20);

                //    for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }

                //    Console.WriteLine(lib.System.String.Join(', ', numbers));

                //");



                // create a script delegate

                //            engine.Execute(@"

                //    Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);

                //    oddFilter = new Filter(function(value) {

                //        return (value & 1) ? true : false;

                //    });

                //");



                // use LINQ from script

                //            engine.Execute(@"

                //    oddNumbers = numbers.Where(oddFilter);

                //    Console.WriteLine(lib.System.String.Join(', ', oddNumbers));

                //");



                // use a dynamic host object

                //            engine.Execute(@"

                //    expando = new lib.System.Dynamic.ExpandoObject();

                //    expando.foo = 123;

                //    expando.bar = 'qux';

                //    delete expando.foo;

                //");



                // call a script function

                //engine.Execute("function print(x) { Console.WriteLine(x); }");

                //engine.Script.print(DateTime.Now.DayOfWeek);


                // examine a script object

                //engine.Execute("person = { name: 'Fred', age: 5 }");

                //Console.WriteLine(engine.Script.person.name);



                // read a JavaScript typed array

                //engine.Execute("values = new Int32Array([1, 2, 3, 4, 5])");

                //var values = (ITypedArray<int>)engine.Script.values;

                //Console.WriteLine(string.Join(", ", values.ToArray()));
                var Proxy = new ScriptProxy();
                Proxy.系统.Img = () =>
                {
                    CaptureImage screen = FlaUI.Core.Capturing.Capture.Screen(engine.Script.屏幕());
                    return((Bitmap)screen.Bitmap.Clone());
                };
                engine.AddHostObject("代理", Proxy);

                engine.Execute(code);
            }
        }
コード例 #31
0
        public void PropertyBag_MultiEngine_HostFunctions()
        {
            using (var scriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging))
            {
                const string code = "bag.host.func(0, function () { return bag.func(); })";
                var bag = new PropertyBag
                {
                    { "host", new HostFunctions() },
                    { "func", new Func<object>(() => ScriptEngine.Current) }
                };

                engine.AddHostObject("bag", bag);
                scriptEngine.AddHostObject("bag", bag);

                var func = (Func<object>)engine.Evaluate(code);
                Assert.AreSame(engine, func());

                func = (Func<object>)scriptEngine.Evaluate(code);
                Assert.AreSame(scriptEngine, func());
            }
        }
コード例 #32
0
        static void initJsEngine(V8ScriptEngine eng)
        {
            eng.AddHostObject("log", cs_log);
            eng.AddHostObject("fileReadAllText", cs_fileReadAllText);
            eng.AddHostObject("fileWriteAllText", cs_fileWriteAllText);
            eng.AddHostObject("fileWriteLine", cs_fileWriteLine);
            eng.AddHostObject("TimeNow", cs_TimeNow);
            eng.AddHostObject("setShareData", cs_setShareData);
            eng.AddHostObject("getShareData", cs_getShareData);
            eng.AddHostObject("removeShareData", cs_removeShareData);
            eng.AddHostObject("request", cs_request);
            eng.AddHostObject("setTimeout", cs_setTimeout);
            eng.AddHostObject("mkdir", cs_mkdir);
            eng.AddHostObject("getWorkingPath", cs_getWorkingPath);

            eng.AddHostObject("addBeforeActListener", cs_addBeforeActListener);
            eng.AddHostObject("removeBeforeActListener", cs_removeBeforeActListener);
            eng.AddHostObject("addAfterActListener", cs_addAfterActListener);
            eng.AddHostObject("removeAfterActListener", cs_removeAfterActListener);
            eng.AddHostObject("setCommandDescribe", cs_setCommandDescribe);
            eng.AddHostObject("runcmd", cs_runcmd);
            eng.AddHostObject("logout", cs_logout);
            eng.AddHostObject("getOnLinePlayers", cs_getOnLinePlayers);
            eng.AddHostObject("getStructure", cs_getStructure);
            eng.AddHostObject("setStructure", cs_setStructure);

            eng.AddHostObject("reNameByUuid", cs_reNameByUuid);
            eng.AddHostObject("getPlayerAbilities", cs_getPlayerAbilities);
            eng.AddHostObject("setPlayerAbilities", cs_setPlayerAbilities);
            eng.AddHostObject("getPlayerAttributes", cs_getPlayerAttributes);
            eng.AddHostObject("setPlayerTempAttributes", cs_setPlayerTempAttributes);
            eng.AddHostObject("getPlayerMaxAttributes", cs_getPlayerMaxAttributes);
            eng.AddHostObject("setPlayerMaxAttributes", cs_setPlayerMaxAttributes);
            eng.AddHostObject("getPlayerItems", cs_getPlayerItems);
            eng.AddHostObject("getPlayerSelectedItem", cs_getPlayerSelectedItem);
            eng.AddHostObject("setPlayerItems", cs_setPlayerItems);
            eng.AddHostObject("addPlayerItemEx", cs_addPlayerItemEx);
            eng.AddHostObject("addPlayerItem", cs_addPlayerItem);
            eng.AddHostObject("getPlayerEffects", cs_getPlayerEffects);
            eng.AddHostObject("setPlayerEffects", cs_setPlayerEffects);
            eng.AddHostObject("setPlayerBossBar", cs_setPlayerBossBar);
            eng.AddHostObject("removePlayerBossBar", cs_removePlayerBossBar);
            eng.AddHostObject("selectPlayer", cs_selectPlayer);
            eng.AddHostObject("transferserver", cs_transferserver);
            eng.AddHostObject("teleport", cs_teleport);
            eng.AddHostObject("talkAs", cs_talkAs);
            eng.AddHostObject("runcmdAs", cs_runcmdAs);
            eng.AddHostObject("sendSimpleForm", cs_sendSimpleForm);
            eng.AddHostObject("sendModalForm", cs_sendModalForm);
            eng.AddHostObject("sendCustomForm", cs_sendCustomForm);
            eng.AddHostObject("releaseForm", cs_releaseForm);
            eng.AddHostObject("setPlayerSidebar", cs_setPlayerSidebar);
            eng.AddHostObject("removePlayerSidebar", cs_removePlayerSidebar);
            eng.AddHostObject("getPlayerPermissionAndGametype", cs_getPlayerPermissionAndGametype);
            eng.AddHostObject("setPlayerPermissionAndGametype", cs_setPlayerPermissionAndGametype);
            eng.AddHostObject("disconnectClient", cs_disconnectClient);
        }
コード例 #33
0
        public V8EngineSession() 
        {
            logFilePath = Path.Combine(Path.GetTempPath(), "V8Enginelog.log");
            
            m_currentScriptName = GetRandomScriptTargetName();
          
            var debuggingPort = PortUtilities.FindFreePort(IPAddress.Loopback);

            m_scriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.DisableGlobalMembers | V8ScriptEngineFlags.EnableDebugging, debuggingPort)
            {
                AllowReflection = false,
            };
                        
            m_scriptEngine.AddHostObject("host", new HostFunctions());
            m_scriptEngine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));
            m_scriptEngine.AddHostObject("winform", new HostTypeCollection("System.Windows.Forms"));

            portUri = new Uri("tcp://127.0.0.1:"+debuggingPort);
            m_tcpClient = new TcpClient(portUri.Host, portUri.Port);

            Connect();
        }
コード例 #34
0
        /// <summary>
        /// configura o Helper para posterior execuçao
        /// </summary>
        /// <param name="diretorioJavascripts">Diretório onde estão os arquivos em js</param>
        /// <param name="setTimeout">Habilitar a função global setTimeout</param>
        /// <param name="setInterval">Habilitar a função global setInterval</param>
        private void Carregar(string diretorioJavascripts, bool setTimeout, bool setInterval)
        {
            TimedOuts = new List<IDisposable>();
            _diretorioExecucao = diretorioJavascripts;
            _timeoutTestes = int.MaxValue;
            ExecutouTestesAteFinal = false;

            SetTimeOutLigado = setTimeout;

            //O manager vai compilar e cachear as bibliotecas
            _manager = new RuntimeManager(new ManualManagerSettings() { MaxExecutableBytes = (1000000000 * 2), RuntimeMaxCount = int.MaxValue});
            _engine = _manager.GetEngine();

            //RequireManager.ClearPackages(); //garantir uma execução limpa

            #region Ler arquivos Js

            _cacheCodigos = new Dictionary<string, string>();

            foreach (var enumerateFile in Directory.EnumerateFiles(diretorioJavascripts, "*.js"))
            {
                _cacheCodigos.Add(Path.GetFileNameWithoutExtension(enumerateFile), File.ReadAllText(enumerateFile));
                //_manager.Compile(Path.GetFileNameWithoutExtension(enumerateFile), File.ReadAllText(enumerateFile), true, int.MaxValue);
            }

            #endregion

            #region Configura a Engine com o JavascriptHelper e Console, Settimeout e etc

            FalhasDosTestes = new List<string>();
            _timers = new Dictionary<int, bool>();

            _engine.AddHostObject("javascriptHelper", this);

            _engine.Execute(@"'use strict';
                        function console() {
                          if (!(this instanceof console)) {
                            return new Console();
                          }
                        }

                        console.prototype.log = function(args, args1, args2) {
                          javascriptHelper.Escrever(args, args1, args2);
                        };");

            _engine.Execute("var console = new console();");
            _engine.Execute("var GLOBAL = this;");

            _engine.Execute(@"var stFunctionsCallBack = new Array();");

            if (setTimeout)
            {
                _engine.Execute(@"var setTimeout = function (funcToCall, millis) {
                                                var textoId = javascriptHelper.CurrentThreadId;
                                                var idlocal = javascriptHelper.SetTimeout(millis);
                                                stFunctionsCallBack.push(funcToCall);
                                                return idlocal;
                            };");

                _engine.Execute(@"var clearTimeout = function(id) { javascriptHelper.ClearTimeout(id);};");
            }

            if (setInterval)
            {
                _engine.Execute(@"var setInterval = function (funcToCall, millis) {

                                                var idlocal = javascriptHelper.SetTimeout(millis);
                                                var funcaoTimeout = function() { funcToCall(); setTimeout(funcToCall, millis); };
                                                stFunctionsCallBack.push(funcaoTimeout);
                                                return idlocal;
                            };");

                _engine.Execute(@"var clearInterval = function(id) { javascriptHelper.ClearTimeout(id);};");
            }
            #endregion
        }
コード例 #35
0
        public void V8ScriptEngine_General_Precompiled_Dual()
        {
            engine.Dispose();
            using (var runtime = new V8Runtime())
            {
                using (var script = runtime.Compile(generalScript))
                {
                    engine = runtime.CreateScriptEngine();
                    using (var console = new StringWriter())
                    {
                        var clr = new HostTypeCollection(type => type != typeof(Console), "mscorlib", "System", "System.Core");
                        clr.GetNamespaceNode("System").SetPropertyNoCheck("Console", console);

                        engine.AddHostObject("host", new ExtendedHostFunctions());
                        engine.AddHostObject("clr", clr);

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));

                        console.GetStringBuilder().Clear();
                        Assert.AreEqual(string.Empty, console.ToString());

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
                    }

                    engine.Dispose();
                    engine = runtime.CreateScriptEngine();
                    using (var console = new StringWriter())
                    {
                        var clr = new HostTypeCollection(type => type != typeof(Console), "mscorlib", "System", "System.Core");
                        clr.GetNamespaceNode("System").SetPropertyNoCheck("Console", console);

                        engine.AddHostObject("host", new ExtendedHostFunctions());
                        engine.AddHostObject("clr", clr);

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));

                        console.GetStringBuilder().Clear();
                        Assert.AreEqual(string.Empty, console.ToString());

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
                    }
                }
            }
        }
コード例 #36
0
        public void V8ScriptEngine_ErrorHandling_NestedHostException()
        {
            var innerEngine = new V8ScriptEngine("inner", V8ScriptEngineFlags.EnableDebugging);
            innerEngine.AddHostObject("host", new HostFunctions());
            engine.AddHostObject("engine", innerEngine);

            TestUtil.AssertException<ScriptEngineException>(() =>
            {
                try
                {
                    engine.Execute("engine.Evaluate('host.newObj(0)')");
                }
                catch (ScriptEngineException exception)
                {
                    TestUtil.AssertValidException(engine, exception);
                    Assert.IsNotNull(exception.InnerException);

                    var hostException = exception.InnerException;
                    Assert.IsInstanceOfType(hostException, typeof(TargetInvocationException));
                    TestUtil.AssertValidException(hostException);
                    Assert.IsNotNull(hostException.InnerException);

                    var nestedException = hostException.InnerException as ScriptEngineException;
                    Assert.IsNotNull(nestedException);
                    TestUtil.AssertValidException(innerEngine, nestedException);
                    Assert.IsNotNull(nestedException.InnerException);

                    var nestedHostException = nestedException.InnerException;
                    Assert.IsInstanceOfType(nestedHostException, typeof(RuntimeBinderException));
                    TestUtil.AssertValidException(nestedHostException);
                    Assert.IsNull(nestedHostException.InnerException);

                    Assert.AreEqual("Error: " + nestedHostException.Message, nestedException.Message);
                    Assert.AreEqual("Error: " + hostException.Message, exception.Message);
                    throw;
                }
            });
        }
コード例 #37
0
        private async Task Navigate(Uri uri)
        {
            controlsGrid.IsEnabled = false;
            try
            {
                string url = uri.ToString();
                urlBar.Text = url;

                if (engine != null)
                {
                    engine.Interrupt();
                    engine.Dispose();
                }

                engine = new V8ScriptEngine();
                engine.AddHostObject("window", this);
                engine.AddHostType(typeof(MessageBox));
                engine.AddHostType(typeof(Console));

                foreach (var t in availableTypesLazy.Value)
                {
                    engine.AddHostType(t);
                }

                ParserContext parserContext = new ParserContext();
                parserContext.XmlnsDictionary["s"] = "clr-namespace:DynamicWPF.Scripting;assembly=DynamicWPF";

                try
                {
                    var resp = await client.GetAsync(uri);

                    uri         = resp.RequestMessage.RequestUri;
                    url         = uri.ToString();
                    urlBar.Text = url;

                    parserContext.BaseUri = new Uri(url.Remove(url.LastIndexOf('/') + 1));

                    Page obj = null;

                    if (resp.IsSuccessStatusCode)
                    {
                        try
                        {
                            obj = (Page)XamlReader.Load(await resp.Content.ReadAsStreamAsync(), parserContext);
                        }
                        catch
                        {
                            Process.Start(url);
                        }
                    }
                    else
                    {
                        try
                        {
                            obj = (Page)XamlReader.Load(await resp.Content.ReadAsStreamAsync(), parserContext);
                        }
                        catch
                        {
                            resp.EnsureSuccessStatusCode();
                        }
                    }

                    if (obj != null)
                    {
                        contentFrame.Navigate(obj);
                        foreach (var link in (obj.Content as DependencyObject).FindVisualChildren <Hyperlink>())
                        {
                            link.RequestNavigate += async(o, ev) =>
                            {
                                ev.Handled = true;
                                var u = (o as Hyperlink).NavigateUri;

                                await Navigate(u.IsAbsoluteUri?u : new Uri(parserContext.BaseUri, u));
                            };
                        }

                        engine.AddHostObject("content", obj);
                        foreach (var s in ScriptManager.GetScripts(obj))
                        {
                            try
                            {
                                var str = await client.GetStringAsync(s.Source.IsAbsoluteUri?s.Source : new Uri(parserContext.BaseUri, s.Source));

                                engine.Execute(str);
                            }
                            catch { }
                        }
                    }
                }
                catch (Exception ex)
                {
                    contentFrame.Navigate(new ErrorPage(ex));
                }
            }
            finally
            {
                controlsGrid.IsEnabled = true;
            }
        }
コード例 #38
0
 public void AddHostObject(string itemName, object target)
 {
     v8ScriptEngine?.AddHostObject(itemName, target);
 }
コード例 #39
0
        static void Main(string[] args)
        {
            // create a script engine

            using (var engine = new V8ScriptEngine())
            {
                // expose a host type

                engine.AddHostType("Console", typeof(Console));

                engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");



                // expose a host object

                engine.AddHostObject("random", new Random());

                engine.Execute("Console.WriteLine(random.NextDouble())");



                // expose entire assemblies

                engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));

                engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");



                // create a host object from script

                engine.Execute(@"

        birthday = new lib.System.DateTime(2007, 5, 22);

        Console.WriteLine(birthday.ToLongDateString());

    ");



                // use a generic class from script

                engine.Execute(@"

        Dictionary = lib.System.Collections.Generic.Dictionary;

        dict = new Dictionary(lib.System.String, lib.System.Int32);

        dict.Add('foo', 123);

    ");



                // call a host method with an output parameter

                engine.AddHostObject("host", new HostFunctions());

                engine.Execute(@"

        intVar = host.newVar(lib.System.Int32);

        found = dict.TryGetValue('foo', intVar.out);

        Console.WriteLine('{0} {1}', found, intVar);

    ");



                // create and populate a host array

                engine.Execute(@"

        numbers = host.newArr(lib.System.Int32, 20);

        for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }

        Console.WriteLine(lib.System.String.Join(', ', numbers));

    ");



                // create a script delegate

                engine.Execute(@"

        Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);

        oddFilter = new Filter(function(value) {

            return (value & 1) ? true : false;

        });

    ");



                // use LINQ from script

                engine.Execute(@"

        oddNumbers = numbers.Where(oddFilter);

        Console.WriteLine(lib.System.String.Join(', ', oddNumbers));

    ");



                // use a dynamic host object

                engine.Execute(@"

        expando = new lib.System.Dynamic.ExpandoObject();

        expando.foo = 123;

        expando.bar = 'qux';

        delete expando.foo;

    ");



                // call a script function

                engine.Execute("function print(x) { Console.WriteLine(x); }");

                engine.Script.print(DateTime.Now.DayOfWeek);



                // examine a script object

                engine.Execute("person = { name: 'Fred', age: 5 }");

                Console.WriteLine(engine.Script.person.name);



                // read a JavaScript typed array

                engine.Execute("values = new Int32Array([1, 2, 3, 4, 5])");

                var values = (ITypedArray <int>)engine.Script.values;

                Console.WriteLine(string.Join(", ", values.ToArray()));
            }
        }
コード例 #40
0
        private JsScriptRunner(JsScriptRunnerType type, object scriptingContext = null, string contextName = null)
        {
            if (!(scriptingContext is null) && contextName is null)
            {
                throw new ArgumentNullException(nameof(contextName));
            }

            ScriptingContext = scriptingContext;
            Type             = type;

            switch (type)
            {
            case JsScriptRunnerType.Jint:
            {
                // engine settings:
                // strict mode   https://stackoverflow.com/a/34302448   https://stackoverflow.com/questions/34301881/should-i-use-strict-for-every-single-javascript-function-i-write
                JintEngine = new Engine(cfg => cfg.Strict(true));
                //JintEngine = new Engine();
                if (!(scriptingContext is null))
                {
                    JintEngine.SetValue(contextName, scriptingContext);          // pass 'scriptingConnector' to Js
                }
                break;
            }

            case JsScriptRunnerType.ClearScript:
            {
                //ClearScriptEngine = new V8ScriptEngine();
                //ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion);
                ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion | V8ScriptEngineFlags.DisableGlobalMembers);
                ClearScriptEngine.AllowReflection = false;
                //ClearScriptEngine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.Full;
                //ClearScriptEngine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.None;
                if (!(scriptingContext is null))
                {
                    ClearScriptEngine.AddHostObject(contextName, scriptingContext);          // pass 'scriptingConnector' to Js
                }
                break;
            }

            case JsScriptRunnerType.ClearScriptDebugMode:
            {
                ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion
                                                       | V8ScriptEngineFlags.DisableGlobalMembers
                                                       | V8ScriptEngineFlags.EnableDebugging
                                                       | V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart);

                /* ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion
                 | V8ScriptEngineFlags.DisableGlobalMembers
                 | V8ScriptEngineFlags.EnableDebugging
                 | V8ScriptEngineFlags.EnableRemoteDebugging
                 | V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart);*/
                ClearScriptEngine.AllowReflection = false;
                if (!(scriptingContext is null))
                {
                    ClearScriptEngine.AddHostObject(contextName, scriptingContext);          // pass 'scriptingConnector' to Js
                }
                break;
            }
            }
        }
コード例 #41
0
ファイル: EngineJS.cs プロジェクト: ext0/Flex
        public void Execute(Script script)
        {
            script.SetExecutionEnvironment(this);

            _engine.AddHostObject("script", script);
            _engine.AddHostObject("world", ActiveWorld.Active.World);
            _engine.AddHostObject("sky", ActiveWorld.Active.Sky);
            _engine.AddHostObject("camera", ActiveWorld.Active.Camera);

            _engine.Script.print        = new Action <Object>(print);
            _engine.Script.spawn        = new Action <Object>(spawn);
            _engine.Script.delay        = new Action <Object, double>(delay);
            _engine.Script.loop         = new Action <Object, double>(loop);
            _engine.Script.forLoop      = new Action <Object, int, double>(forLoop);
            _engine.Script.onRenderStep = new Action <Object>(onRenderStep);
            _engine.Script.onStep       = new Action <Object>(onStep);
            _engine.Script.onKeyPress   = new Action <int, Object>(onKeyPress);
            _engine.Script.onKeyDown    = new Action <int, Object>(onKeyDown);
            _engine.Script.onKeyUp      = new Action <int, Object>(onKeyUp);

            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Math));
            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Noise));
            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Random));
            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Key));

            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Camera));
            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Part));
            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Script));
            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Sky));
            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(World));

            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Vector3));
            _engine.AddHostType(HostItemFlags.DirectAccess, typeof(Rotation));

            //Allow for reflection on Instance types to access higher concrete implementation properties
            _engine.DisableTypeRestriction = true;

            _engine.AllowReflection = true;
            _engine.SuppressExtensionMethodEnumeration = false;
            _engine.UseReflectionBindFallback          = true;

            _engine.DefaultAccess = ScriptAccess.None;

            try
            {
                V8Script v8Script = _engine.Compile((script.source != null) ? script.source : String.Empty);
                _engine.Execute(v8Script);
            }
            catch (ScriptEngineException e)
            {
                String errorDetails    = e.ErrorDetails;
                Match  errDetailsMatch = Regex.Match(errorDetails, @"'(?<type>Flex\..*)'");
                if (errDetailsMatch.Success)
                {
                    Match match = Regex.Match(errorDetails, @"'Flex\..*.\.(?<class>.+)'");
                    if (match.Success)
                    {
                        errorDetails = errorDetails.Replace(errDetailsMatch.Groups["type"].Value, match.Groups["class"].Value);
                    }
                }
                _output.AppendLine(errorDetails);
            }
            catch (Exception e)
            {
                _output.AppendLine("[external error] " + e.Message);
            }
        }
コード例 #42
0
 /// <summary>
 /// Add a .Net host object with a given name to the globel namespace of the JS processor.
 /// The object is removed (JS delete) from the engine when it is disposed of.
 /// </summary>
 /// <param name="globalname">the name of the host object in the JS global namespace</param>
 /// <param name="service">the .Net host object to be used as a service</param>
 public void AddHostService(string globalname, object service)
 {
     engine.AddHostObject(globalname, service);
     services.Add(globalname);
 }
コード例 #43
0
 public ServerTester(Server server)
 {
     this.server = server;
     engine      = new V8ScriptEngine();
     engine.AddHostObject("Server", server);
 }