Beispiel #1
0
 private static void Run(string script)
 {
     using (var engine = new V8Engine())
     {
         engine.RegisterType(typeof(Boolean), "Boolean", true, ScriptMemberSecurity.Permanent);
         engine.RegisterType(typeof(ScriptWidget), "ScriptUIItem", true, ScriptMemberSecurity.Permanent);
         var consoleType = engine.RegisterType(typeof(ScriptConsole), "ScriptConsole", true, ScriptMemberSecurity.Permanent);
         engine.DynamicGlobalObject.console = consoleType.CreateObject(new ScriptConsole());
         var desktopType = engine.RegisterType(typeof(ScriptWidgetDesktop), "ScriptUIDesktop", true, ScriptMemberSecurity.Permanent);
         engine.DynamicGlobalObject.desktop = desktopType.CreateObject(ScriptWidgetDesktop.Instance);
         engine.Execute(script);
     }
 }
Beispiel #2
0
        private void HookTypeSystem()
        {
            Assembly asm = Assembly.GetAssembly(typeof(X3D));

            Type[] x3dTypes = (new List <Type>(asm.GetTypes()))
                              .Where(t => t.IsSubclassOf(typeof(SceneGraphNode)))
                              .OrderBy(t => t.FullName).ToArray();

            // REGISTER X3D TYPE SYSTEM
            foreach (Type x3dType in x3dTypes)
            {
                v8.RegisterType(x3dType, null, true, ScriptMemberSecurity.Locked);
            }

            //TODO: hook X3D simple types such as SFVec3, MFString, etc.
            // Note that for some types there is a translation SFVec3 is interchanged to OpenTK.Vector3 internally
        }
Beispiel #3
0
        private void StartV8(SceneGraphNode root)
        {
            // ensure v8.net dependencies are fine for instantiation of V8Engine
            deps();

            v8 = new V8Engine();
            v8.RegisterType(typeof(X3DConsole), null, true, ScriptMemberSecurity.Locked);

            // Scene Access Interface
            // See: http://www.web3d.org/documents/specifications/19775-2/V3.3/Part02/servRef.html

            HookTypeSystem();

            v8.GlobalObject.SetProperty("console", X3DConsole.Current);
            v8.GlobalObject.SetProperty("document", root);

            v8.DynamicGlobalObject.window  = v8.CreateFunctionTemplate("window").GetFunctionObject <WindowFunction>();
            v8.DynamicGlobalObject.browser = v8.CreateFunctionTemplate("browser").GetFunctionObject <BrowserFunction>();


            MapKeyValues();

            Console.WriteLine("X3D Scripting [enabled]");
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            V8Engine v8Engine = new V8Engine();

            var result = v8Engine.Execute(
                @"var gs = (function () {  // NOTE: 'result' WILL ALWAYS BE 'undefined' BECAUSE OF 'var' before 'gs'.
                    var myClassObject = function() {};
                    myClassObject.prototype.getCompanyInfo = function (a, b, c) {
                        var staff = [
                            {
                                'name': 'John',
                                'address': '1 Walk Way',
                                'dob': 'July '+a+', 1970'
                            },
                            {
                                'name': 'Peter',
                                'address': '241 Otoforwan Rd',
                                'dob': 'January '+b+', 1953'
                            },
                            {
                                'name': 'Marry',
                                'address': '1 Contrary Lane',
                                'dob': 'August '+c+', 1984'
                            }
                        ];
                        var result = {
                            'isEnabled': true,
                            'staff': staff
                        };
                        return result;
                    };
                    return new myClassObject();
                })();"
                );

            //create parameter
            Handle day1 = v8Engine.CreateValue("1");
            Handle day2 = v8Engine.CreateValue("2");
            Handle day3 = v8Engine.CreateValue("3");

            var     gs           = v8Engine.GlobalObject.GetProperty("gs");
            var     resultHandle = gs.Call("getCompanyInfo", null, day1, day2, day3); // NOTE: The object context is already known, so pass 'null' for '_this'.
            Company completion   = v8Engine.GetObject <Company>(resultHandle);

            //examine result
            var    test0              = resultHandle.GetProperty("isEnable");
            Handle test1              = resultHandle.GetProperty("staff"); // NOTE: "ObjectHandle" is a special handle for objects (which also obviously includes arrays, etc.).
            var    arrayLength        = test1._.ArrayLength;
            Handle arrayItem1         = test1._.GetProperty(0);
            var    arrayItem1_name    = arrayItem1._.GetProperty("name");
            var    arrayItem1_address = arrayItem1._.GetProperty("address");
            var    arrayItem1_dob     = (~arrayItem1).GetProperty("dob");
            Handle arrayItem2         = test1._.GetProperty(1); // (arrays are treated same as objects here)
            Handle arrayItem3         = test1._.GetProperty(2); // (arrays are treated same as objects here)

            //  ==================================================================== OR  ====================================================================

            v8Engine.RegisterType <Company2>(null, true, ScriptMemberSecurity.Locked); // (this line is NOT required, but allows more control over the settings)
            v8Engine.GlobalObject.SetProperty(typeof(Company2));                       // <= THIS IS IMPORTANT! It sets the type on the global object (though you can put this anywhere like any property)

            var gs2 = v8Engine.Execute(
                @"(function () {
                    var myClassObject = function() {};
                    myClassObject.prototype.getCompanyInfo = function (a, b, c) {
                        return new Company2(a, b, c);
                    };
                    return new myClassObject();
                })();"
                );

            var resultHandle2             = gs2.Call("getCompanyInfo", null, day1, day2, day3); // NOTE: The object context is already known, so pass 'null' for '_this'.
            var objectBindingModeIfNeeded = resultHandle2.BindingMode;
            var ci2 = (Company2)resultHandle2.BoundObject;                                      // (when a CLR class is bound, it is tracked by the handle in a special way)

            //  =============================================================================================================================================
            // Take your pick. ;)

            System.Console.WriteLine("Script executions completed. Press any key to exit.");
            System.Console.ReadKey(true);
        }
        public V8EngineObject(CefBrowser browser, CefFrame frame, CefV8Context context)
        {
            configuration = Extension.GetConfiguration();

            try
            {
                engine = new V8Engine();
                engine.RegisterType(typeof(System.Object), "Object", true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(Type), "Type", true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(String), "String", true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(Boolean), "Boolean", true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(Array), "Array", true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(System.Collections.ArrayList), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(char), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(int), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(Int16), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(Int32), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(Int64), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(UInt16), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(UInt32), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(UInt64), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(Enumerable), null, true, ScriptMemberSecurity.Locked);
                engine.RegisterType(typeof(File), null, true, ScriptMemberSecurity.Locked);

                InternalHandle hSystem = engine.CreateObject();
                engine.DynamicGlobalObject.System = hSystem;
                hSystem.SetProperty(typeof(System.Object)); // (Note: No optional parameters used, so this will simply lookup and apply the existing registered type details above.)
                hSystem.SetProperty(typeof(String));
                hSystem.SetProperty(typeof(Boolean));
                hSystem.SetProperty(typeof(Array));
                engine.GlobalObject.SetProperty(typeof(Type));
                engine.GlobalObject.SetProperty(typeof(System.Collections.ArrayList));
                engine.GlobalObject.SetProperty(typeof(char));
                engine.GlobalObject.SetProperty(typeof(int));
                engine.GlobalObject.SetProperty(typeof(Int16));
                engine.GlobalObject.SetProperty(typeof(Int32));
                engine.GlobalObject.SetProperty(typeof(Int64));
                engine.GlobalObject.SetProperty(typeof(UInt16));
                engine.GlobalObject.SetProperty(typeof(UInt32));
                engine.GlobalObject.SetProperty(typeof(UInt64));
                engine.GlobalObject.SetProperty(typeof(Enumerable));
                engine.GlobalObject.SetProperty(typeof(Environment));
                engine.GlobalObject.SetProperty(typeof(File));
                engine.GlobalObject.SetProperty(typeof(Console), V8PropertyAttributes.Locked, null, true, ScriptMemberSecurity.Locked);

                var db      = engine.CreateObject <V8.DatabaseObject>();
                var console = engine.CreateObject <V8.ConsoleObject>();
                var window  = engine.CreateObject <V8.WindowObject>();
                var server  = engine.CreateObject <V8.ServerObject>();
                var xhr     = engine.CreateObject <V8.xhrObject>();

                //db.AddParent(this.Parent);
                //console.AddParent(this.Parent);
                //server.AddParent(this.Parent);
                window.AddBrowser(browser);

                engine.DynamicGlobalObject.db      = db;
                engine.DynamicGlobalObject.console = console;
                engine.DynamicGlobalObject.window  = window;
                engine.DynamicGlobalObject.Server  = server;
                engine.DynamicGlobalObject.jsXHR   = xhr;
            }
            catch (Exception ex) { Log.Trace(ex.Message, ex.StackTrace, configuration.Verbose); }
        }