Example #1
0
 public JsDynamicWrapper(JsBridge bridge, object target)
     : base(bridge)
 {
     this.target = target;
     var handle = Type.GetTypeHandle(this.target);
     this.targetType = Type.GetTypeFromHandle(handle);
 }
Example #2
0
        public TypeInspector(JsBridge bridge, object target)
        {
            this.bridge = bridge;
            this.targetType = target.GetType();

            //if (target is JsDynamic) {
            //    CollectDynamicMembers((JsDynamic)target);
            //}
            //else {
                CollectMembers();
            //}
        }
Example #3
0
        private void button6_Click(object sender, EventArgs e)
        {
#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            using (JsEngine engine = new JsEngine())
                using (JsContext ctx = engine.CreateContext(new MyJsTypeDefinitionBuilder()))
                {
                    GC.Collect();
                    System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
                    stwatch.Reset();
                    stwatch.Start();

                    var ab = new AboutMe();
                    ctx.SetVariableAutoWrap("x", ab);

                    //string testsrc = "x.IsOK;";
                    string testsrc = "x.Test2('AAA');";
                    object result  = ctx.Execute(testsrc);
                    stwatch.Stop();

                    Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
                }
        }
Example #4
0
        static void Main()
        {
            //-----------------------------------
            //1.
            //after we build nodejs in dll version
            //we will get node.dll
            //then just copy it to another name 'libespr'
            string currentdir = System.IO.Directory.GetCurrentDirectory();
            string libEspr    = @"../../../node-v8.1.4/Release/libespr.dll";

            if (File.Exists(libEspr))
            {
                //delete the old one
                File.Delete(libEspr);
            }
            File.Copy(
                @"../../../node-v8.1.4/Release/node.dll", //from
                libEspr);
            //-----------------------------------
            //2. load libespr.dll (node.dll)

            IntPtr intptr     = LoadLibrary(libEspr);
            int    errCode    = GetLastError();
            int    libesprVer = JsBridge.LibVersion;

            //change working dir to target app and run
            //test with socket.io's chat sample
            System.IO.Directory.SetCurrentDirectory(@"../../../socket.io/examples/chat");

#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            //------------
            JsEngine.RunJsEngine((IntPtr nativeEngine, IntPtr nativeContext) =>
            {
                JsEngine eng  = new JsEngine(nativeEngine);
                JsContext ctx = eng.CreateContext(nativeContext);
                //-------------
                //this LibEspressoClass object is need,
                //so node can talk with us,
                //-------------
                JsTypeDefinition jstypedef = new JsTypeDefinition("LibEspressoClass");
                jstypedef.AddMember(new JsMethodDefinition("LoadMainSrcFile", args =>
                {
                    //since this is sample socket io app
                    string filedata = File.ReadAllText("index.js");
                    args.SetResult(filedata);
                }));
                jstypedef.AddMember(new JsMethodDefinition("C", args =>
                {
                    args.SetResult(true);
                }));
                jstypedef.AddMember(new JsMethodDefinition("E", args =>
                {
                    args.SetResult(true);
                }));
                if (!jstypedef.IsRegisterd)
                {
                    ctx.RegisterTypeDefinition(jstypedef);
                }
                //----------
                //then register this as x***
                //this object is just an instance for reference
                ctx.SetVariableFromAny("LibEspresso",
                                       ctx.CreateWrapper(new object(), jstypedef));
            });

            string userInput = Console.ReadLine();
        }
Example #5
0
 protected JsWrapperBase(JsBridge bridge)
 {
     this.bridge = bridge;
 }
Example #6
0
 public void GetTypeResponseMessage(JsBridge bridge, object target)
 {
     TypeInspector inspector = new TypeInspector(bridge, target);
     SendMessage(inspector.GetTypeInfo());
 }
Example #7
0
 public SessionHelper(JsBridge bridge, ISession session)
 {
     this.Bridge = bridge;
     this.session = session;
 }
Example #8
0
        static void Main()
        {
            //-----------------------------------
            //1.
            //after we build nodejs in dll version
            //we will get node.dll
            //then just copy it to another name 'libespr'
            string currentdir = System.IO.Directory.GetCurrentDirectory();
            string libEspr    = @"../../../node-v8.4.0/Release/libespr.dll";

            if (File.Exists(libEspr))
            {
                //delete the old one
                File.Delete(libEspr);
            }
            File.Copy(
                @"../../../node-v8.4.0/Release/node.dll", //from
                libEspr);
            //-----------------------------------
            //2. load libespr.dll (node.dll)

            IntPtr intptr     = LoadLibrary(libEspr);
            int    errCode    = GetLastError();
            int    libesprVer = JsBridge.LibVersion;

#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            //------------
            JsEngine.RunJsEngine((IntPtr nativeEngine, IntPtr nativeContext) =>
            {
                JsEngine eng  = new JsEngine(nativeEngine);
                JsContext ctx = eng.CreateContext(nativeContext);
                //-------------
                //this LibEspressoClass object is need,
                //so node can talk with us,
                //-------------
                JsTypeDefinition jstypedef = new JsTypeDefinition("LibEspressoClass");
                jstypedef.AddMember(new JsMethodDefinition("LoadMainSrcFile", args =>
                {
                    string filedata = @"var http = require('http');
                                                (function t(){
	                                                console.log('hello from Espresso-ND');
	                                                var server = http.createServer(function(req, res) {
                                                    res.writeHead(200);
                                                    res.end('Hello! from Espresso-ND');
                                                    });
                                                    server.listen(8080,'localhost');
                                                })();";
                    args.SetResult(filedata);
                }));
                jstypedef.AddMember(new JsMethodDefinition("C", args =>
                {
                    args.SetResult(true);
                }));
                jstypedef.AddMember(new JsMethodDefinition("E", args =>
                {
                    args.SetResult(true);
                }));
                if (!jstypedef.IsRegisterd)
                {
                    ctx.RegisterTypeDefinition(jstypedef);
                }
                //----------
                //then register this as x***
                //this object is just an instance for reference
                ctx.SetVariableFromAny("LibEspresso",
                                       ctx.CreateWrapper(new object(), jstypedef));
            });

            string userInput = Console.ReadLine();
        }
Example #9
0
        private void button5_Click(object sender, EventArgs e)
        {
#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            JsTypeDefinition jstypedef = new JsTypeDefinition("AA");
            jstypedef.AddMember(new JsMethodDefinition("B", args =>
            {
                int argCount = args.ArgCount;
                var thisArg  = args.GetThisArg();
                var arg0     = args.GetArgAsObject(0);
                args.SetResult((bool)arg0);
            }));
            jstypedef.AddMember(new JsMethodDefinition("C", args =>
            {
                args.SetResult(true);
            }));

            //-----------------------------------------------------
            jstypedef.AddMember(new JsPropertyDefinition("D",
                                                         args =>
            {
                var ab = new AboutMe();
                args.SetResultAutoWrap(ab);
            },
                                                         args =>
            {
                //setter
            }));
            jstypedef.AddMember(new JsPropertyDefinition("E",
                                                         args =>
            {       //getter
                args.SetResult(250);
            },
                                                         args =>
            {
                //setter
            }));
            //===============================================================
            //create js engine and context
            using (JsEngine engine = new JsEngine())
                using (JsContext ctx = engine.CreateContext())
                {
                    ctx.RegisterTypeDefinition(jstypedef);

                    GC.Collect();
                    System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
                    stwatch.Reset();
                    stwatch.Start();


                    TestMe1 t1 = new TestMe1();

                    INativeScriptable proxy = ctx.CreateWrapper(t1, jstypedef);
                    ctx.SetVariable("x", proxy);


                    //string testsrc = "x.B(x.D.IsOK);";
                    string testsrc = "x.B(x.D.GetOK());";
                    object result  = ctx.Execute(testsrc);
                    stwatch.Stop();

                    Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
                }
        }
Example #10
0
        private void TestHelper(IObjectFactory factory, SessionHandler handler)
        {
            MockRepository mocks = new MockRepository();

            ISession session = mocks.StrictMock<ISession>();
            JsBridge bridge = new JsBridge(session, factory);
            HostedMode.Host = bridge;
            SessionHelper helper = new SessionHelper(bridge, session);
            using (mocks.Ordered()) {
                handler(helper);
            }
            mocks.ReplayAll();

            bridge.DispatchForever();

            mocks.VerifyAll();
        }
Example #11
0
        static void TestNodeJs_Buffer()
        {
            //https://nodejs.org/api/buffer.html
#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            //------------

            ////example2: get value from node js
            MyBufferBridge myBuffer = new MyBufferBridge();

            //for nodejs's Buffer
            //NodeJsEngineHelper.Run(ss =>
            //{
            //    //for node js
            //    ss.SetExternalObj("myBuffer", myBuffer);
            //    return @"
            //        const buf1 = Buffer.alloc(20);
            //        buf1.writeUInt8(0, 0);
            //        buf1.writeUInt8(1, 1);
            //        buf1.writeUInt8(2, 2);
            //        //-----------
            //        myBuffer.SetBuffer(buf1);
            //        console.log('before:');
            //        console.log(buf1);

            //        if(myBuffer.HaveSomeNewUpdate()){
            //            myBuffer.UpdateBufferFromDotNetSide();
            //            console.log('after:');
            //            console.log(buf1);
            //        }else{
            //            console.log('no data');
            //        }
            //    ";
            //});

            //for v8
            NodeJsEngineHelper.Run(ss =>
            {
                //for general v8
                //see more https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint8

                ss.SetExternalObj("myBuffer", myBuffer);
                return(@"                     
                    const buf1 = new ArrayBuffer(20);
                    const view = new DataView(buf1);
                    view.setUint8(0, 0); 
                    view.setUint8(1, 1);
                    view.setUint8(2, 2);
                    //-----------
                    myBuffer.SetBuffer(buf1);
                    console.log('before:');
                    console.log(buf1);

                    if(myBuffer.HaveSomeNewUpdate()){
                        myBuffer.UpdateBufferFromDotNetSide();
                        console.log('after:');
                        console.log(buf1);    
                    }else{
                        console.log('no data');
                    }                    
                ");
            });
            int buffLen = myBuffer.Length;

            string userInput = Console.ReadLine();
        }
Example #12
0
        static void Main()
        {
            //-----------------------------------
            //1.
            //after we build nodejs in dll version
            //we will get node.dll
            //then just copy it to another name 'libespr'
            string currentdir = System.IO.Directory.GetCurrentDirectory();

            string libEspr = "libespr.dll";

            ////string libEspr = @"../../../node-v11.12.0/Release/libespr.dll"; //previous version 8.4.0
            //if (File.Exists(libEspr))
            //{
            //    //delete the old one
            //    File.Delete(libEspr);
            //}
            //File.Copy(
            //   @"../../../node-v11.12.0/Release/node.dll", // //previous version 8.4.0
            //   libEspr);

            //-----------------------------------
            //2. load libespr.dll (node.dll)
            //-----------------------------------
            //string libEspr = "libespr.dll";
            IntPtr intptr     = LoadLibrary(libEspr);
            int    errCode    = GetLastError();
            int    libesprVer = JsBridge.LibVersion;

#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            //------------
            //http2 client
            NodeJsEngineHelper.Run(
                ss => @"const http2 = require('http2');
                        const fs = require('fs');
                        const client = http2.connect('https://localhost:8443', {
                          ca: fs.readFileSync('localhost-cert.pem')
                        });
                        client.on('error', (err) => console.error(err));

                        const req = client.request({ ':path': '/' });

                        req.on('response', (headers, flags) => {
                          for (const name in headers) {
                            console.log(`${name}: ${headers[name]}`);
                          }
                        });

                        req.setEncoding('utf8');
                        let data = '';
                        req.on('data', (chunk) => { data += chunk; });
                        req.on('end', () => {
                          console.log(`\n${data}`);
                          client.close();
                        });
                        req.end();
                    ");
            string userInput = Console.ReadLine();
        }
Example #13
0
 public JsObjectWrapper(JsBridge bridge, object target)
     : base(bridge)
 {
     this.target = target;
     this.inspector = new TypeInspector(bridge, target);
 }
Example #14
0
 public void Run(NetworkStream stream)
 {
     HostedMode.Host = new CallContextStorage();
     try {
         var session = new RemoteSession(stream, stream);
         var factory = new DefaultFactory();
         var bridge = new JsBridge(session, factory);
         HostedMode.Host = bridge;
         bridge.DispatchForever();
     }
     catch (Exception ex) {
         Debug.WriteLine(ex);
     }
     finally {
         stream.Close();
     }
 }
Example #15
0
        static void Main()
        {
            //-----------------------------------
            //1.
            //after we build nodejs in dll version
            //we will get node.dll
            //then just copy it to another name 'libespr'

            string libEspr = @"../../../node-v16.8.0/out/Release/node.dll";

            //-----------------------------------
            //2. load node.dll
            //-----------------------------------
            IntPtr intptr     = LoadLibrary(libEspr);
            int    errCode    = GetLastError();
            int    libesprVer = JsBridge.LibVersion;

#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            //------------
            //http2 client

            //http2 client
            HttpResp httpResp = new HttpResp();

            NodeJsEngineHelper.Run(
                ss =>
            {
                ss.SetExternalObj("my_resp", httpResp);

                return(@"const http2 = require('http2');
                        const fs = require('fs');
                        const client = http2.connect('https://localhost:8443', {
                          ca: fs.readFileSync('localhost-cert.pem')
                        });
                        client.on('error', (err) => console.error(err));

                        //const req = client.request({ ':path': '/' });
                        const req = client.request({ ':path': '/' ,'body':'123456789'});

                        req.on('response', (headers, flags) => {
                          for (const name in headers) {
                            console.log(`${name}: ${headers[name]}`);
                          }
                        });

                        req.setEncoding('utf8');
                        let data = '';
                        req.on('data', (chunk) => { data += chunk; });
                        req.on('end', () => {
                          //console.log(`\n${data}`);
                          my_resp.Data=data;
                          client.close();
                        });
                        req.end();
                    ");
            });

            string userInput = Console.ReadLine();
            if (httpResp.Data != null)
            {
                Console.WriteLine(httpResp.Data);
            }
        }
Example #16
0
        private void button7_Click(object sender, EventArgs e)
        {
            string filename = @"..\..\..\HtmlRenderer.Demo\Samples\ClassicSamples\00.Intro.htm";

            //1. blank html
            var fileContent = "<html><script>function doc_ready(){console.log('doc_ready');}</script><body onload=\"doc_ready()\"><div id=\"a\">A</div><div id=\"b\" style=\"background-color:blue\">B</div><div id=\"c\">c_node</div></body></html>";

            easeViewport.LoadHtml(filename, fileContent);
            //----------------------------------------------------------------
            //after load html page

            //load v8 if ready
            JsBridge.LoadV8("..\\..\\dll\\VRoomJsNative.dll");
#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            //===============================================================

            //2. access dom

            var webdoc = easeViewport.GetHtmlDom() as LayoutFarm.WebDom.IHtmlDocument;
            //create js engine and context
            if (myengine == null)
            {
                var jstypeBuilder = new LayoutFarm.Scripting.MyJsTypeDefinitionBuilder();
                myengine = new JsEngine();
                myCtx    = myengine.CreateContext(jstypeBuilder);
            }

            System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
            stwatch.Reset();
            stwatch.Start();


            myCtx.SetVariableAutoWrap("document", webdoc);
            myCtx.SetVariableAutoWrap("console", myWbConsole);
            string simplejs = @"
                    (function(){
                        console.log('hello world!');
                        var domNodeA = document.getElementById('a');
                        var domNodeB = document.getElementById('b');
                        var domNodeC = document.getElementById('c');

                        var newText1 = document.createTextNode('... says hello world!');
                        domNodeA.appendChild(newText1);
                        for(var i=0;i<10;++i){
                            var newText2= document.createTextNode(i);
                            domNodeA.appendChild(newText2);       
                        } 

                        var newDivNode= document.createElement('div');
                        newDivNode.appendChild(document.createTextNode('new div'));
                        newDivNode.attachEventListener('mousedown',function(){console.log('new div');});
                        domNodeB.appendChild(newDivNode);    
                        
                        domNodeC.innerHTML='<div> from inner html <span> from span</span> </div>';
                        console.log(domNodeC.innerHTML);
                    })();
                ";

            object testResult = myCtx.Execute(simplejs);
            stwatch.Stop();
            Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
        }
Example #17
0
        private void button3_Click(object sender, EventArgs e)
        {
#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            JsTypeDefinition jstypedef = new JsTypeDefinition("AA");
            jstypedef.AddMember(new JsMethodDefinition("B", args =>
            {
                args.SetResult(100);
            }));
            jstypedef.AddMember(new JsMethodDefinition("C", args =>
            {
                args.SetResult(true);
            }));

            jstypedef.AddMember(new JsPropertyDefinition("D",
                                                         args =>
            {       //getter
                args.SetResult(true);
            },
                                                         args =>
            {
                //setter
            }));
            jstypedef.AddMember(new JsPropertyDefinition("E",
                                                         args =>
            {       //getter
                args.SetResult(250);
            },
                                                         args =>
            {
                //setter
            }));

            //===============================================================
            //create js engine and context
            using (JsEngine engine = new JsEngine())
                using (JsContext ctx = engine.CreateContext())
                {
                    ctx.RegisterTypeDefinition(jstypedef);

                    GC.Collect();
                    System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
                    stwatch.Reset();
                    stwatch.Start();

                    TestMe1 t1    = new TestMe1();
                    var     proxy = ctx.CreateWrapper(t1, jstypedef);

                    //for (int i = 2000; i >= 0; --i)
                    //{
                    ctx.SetVariableFromAny("x", proxy);
                    //object result = ctx.Execute("(function(){if(x.C()){return  x.B();}else{return 0;}})()");
                    object result = ctx.Execute("(function(){if(x.D){ x.E=300; return  x.B();}else{return 0;}})()");

                    //}
                    stwatch.Stop();

                    Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
                    //Assert.That(result, Is.EqualTo(100));
                }
        }
Example #18
0
        private void button5_Click(object sender, EventArgs e)
        {
            //1. init html
            var fileContent = "<html><body><div id=\"a\">A</div><div id=\"b\" style=\"background-color:blue\">B</div></body></html>";

            easeViewport.LoadHtmlString("", fileContent);
            //----------------------------------------------------------------
            //after load html page

            //test javascript ...

#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            //===============================================================

            //2. access dom

            var webdoc = easeViewport.GetHtmlDom() as IHtmlDocument;
            //create js engine and context
            var jstypeBuilder = new LayoutFarm.Scripting.MyJsTypeDefinitionBuilder();
            using (JsEngine engine = new JsEngine())
                using (JsContext ctx = engine.CreateContext(jstypeBuilder))
                {
                    System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
                    stwatch.Reset();
                    stwatch.Start();
                    ctx.SetVariableAutoWrap("document", webdoc);
                    string testsrc1 = "document.getElementById('a');";
                    object domNodeA = ctx.Execute(testsrc1);
                    string testsrc2 = "document.getElementById('b');";
                    object domNodeB = ctx.Execute(testsrc2);
                    stwatch.Stop();
                    Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
                }

            ////3. get element by id
            //var domNodeA = webdoc.GetElementById("a");
            //var domNodeB = webdoc.GetElementById("b");

            //domNodeA.AddTextContent("Hello from A");
            //domNodeB.AddChild("div", div =>
            //{
            //    div.SetAttribute("style", "background-color:yellow");
            //    div.AddTextContent("Hello from B");
            //});

            //domNodeB.AttachMouseDownEvent(ev =>
            //{
            //    var domB = new EaseDomElement(domNodeB);
            //    domB.SetBackgroundColor(Color.Red);
            //    ev.StopPropagation();
            //    //domNodeB.SetAttribute("style", "background-color:red");
            //});
            //domNodeB.AttachMouseUpEvent(ev =>
            //{
            //    var domB = new EaseDomElement(domNodeB);
            //    domB.SetBackgroundColor(Color.Yellow);
            //    ev.StopPropagation();
            //    //domNodeB.SetAttribute("style", "background-color:red");
            //});
        }
 public JsProxy(JsBridge bridge) : base(bridge)
 {
     _bridge = bridge;
 }
Example #20
0
        private void button6_Click(object sender, EventArgs e)
        {
            //1. init html
            var fileContent = "<html><body><div id=\"a\">A</div><div id=\"b\" style=\"background-color:blue\">B</div><div id=\"c\">c_node</div></body></html>";

            easeViewport.LoadHtmlString("", fileContent);
            //----------------------------------------------------------------
            //after load html page

            //load v8 if ready

#if DEBUG
            JsBridge.dbugTestCallbacks();
#endif
            //===============================================================

            //2. access dom

            var webdoc = easeViewport.GetHtmlDom() as LayoutFarm.WebDom.IHtmlDocument;
            //create js engine and context
            if (myengine == null)
            {
                var jstypeBuilder = new LayoutFarm.Scripting.MyJsTypeDefinitionBuilder();
                myengine = new JsEngine();
                myCtx    = myengine.CreateContext(jstypeBuilder);
            }

            System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
            stwatch.Reset();
            stwatch.Start();
            myCtx.SetVariableAutoWrap("document", webdoc);
            myCtx.SetVariableAutoWrap("console", myWbConsole);
            string simplejs   = @"
                    (function(){
                        console.log('hello world!');
                        var domNodeA = document.getElementById('a');
                        var domNodeB = document.getElementById('b');
                        var domNodeC = document.getElementById('c');

                        var newText1 = document.createTextNode('... says hello world!');
                        domNodeA.appendChild(newText1);
                        for(var i=0;i<10;++i){
                            var newText2= document.createTextNode(i);
                            domNodeA.appendChild(newText2);       
                        } 

                        var newDivNode= document.createElement('div');
                        newDivNode.appendChild(document.createTextNode('new div'));
                        newDivNode.attachEventListener('mousedown',function(){console.log('new div');});
                        domNodeB.appendChild(newDivNode);    
                        
                        domNodeC.innerHTML='<div> from inner html <span> from span</span> </div>';
                        console.log(domNodeC.innerHTML);
                    })();
                ";
            object testResult = myCtx.Execute(simplejs);
            stwatch.Stop();
            Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
            ////3. get element by id
            //var domNodeA = webdoc.GetElementById("a");
            //var domNodeB = webdoc.GetElementById("b");

            //domNodeA.AddTextContent("Hello from A");
            //domNodeB.AddChild("div", div =>
            //{
            //    div.SetAttribute("style", "background-color:yellow");
            //    div.AddTextContent("Hello from B");
            //});

            //domNodeB.AttachMouseDownEvent(ev =>
            //{
            //    var domB = new EaseDomElement(domNodeB);
            //    domB.SetBackgroundColor(Color.Red);
            //    ev.StopPropagation();
            //    //domNodeB.SetAttribute("style", "background-color:red");
            //});
            //domNodeB.AttachMouseUpEvent(ev =>
            //{
            //    var domB = new EaseDomElement(domNodeB);
            //    domB.SetBackgroundColor(Color.Yellow);
            //    ev.StopPropagation();
            //    //domNodeB.SetAttribute("style", "background-color:red");
            //});
        }
Example #21
0
 public object CreateInstance(JsBridge bridge, Type type)
 {
     object ret = chain.CreateInstance(bridge, type);
     cache.Add(ret.GetType(), ret);
     return ret;
 }
Example #22
0
 public JsArrayWrapper(JsBridge bridge, Array target)
 {
     this.bridge = bridge;
     this.target = target;
     this.elementType = target.GetType().GetElementType();
 }