コード例 #1
0
        private void button1_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);
            }));
            //===============================================================
            //create js engine and context
            using (JsEngine engine = new JsEngine())
                using (JsContext ctx = engine.CreateContext())
                {
                    if (!jstypedef.IsRegisterd)
                    {
                        ctx.RegisterTypeDefinition(jstypedef);
                    }
                    GC.Collect();
                    System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
                    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;}})()");
                    }
                    //for (int i = 1; i >= 0; --i)
                    //{
                    //    ctx.SetVariableFromAny("x", proxy);
                    //    object result = ctx.Execute(@"
                    //    var http = require('http');
                    //    var server = http.createServer(function(req, res) {
                    //    res.writeHead(200);
                    //    res.end('Hello Http');
                    //    });
                    //    server.listen(8080);
                    //    ");
                    //}
                    stwatch.Stop();

                    Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
                    //Assert.That(result, Is.EqualTo(100));
                }
        }
コード例 #2
0
        static void TestCase1()
        {
#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);
            }));
            //===============================================================
            //create js engine and context
            using (JsEngine engine = new JsEngine())
                using (JsContext ctx = engine.CreateContext())
                {
                    if (!jstypedef.IsRegisterd)
                    {
                        ctx.RegisterTypeDefinition(jstypedef);
                    }
                    GC.Collect();
                    System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
                    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;}})()");
                    }
                    //test value of
                    object re = ctx.Execute("(function(){function myNumberType(n) {    this.number = n;}" +
                                            "myNumberType.prototype.valueOf = function() {    return this.number;};" +
                                            "myObj = new myNumberType(4);" +
                                            "return myObj + 3;" +
                                            "})()");
                    stwatch.Stop();

                    Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
                    //Assert.That(result, Is.EqualTo(100));
                }
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: JohnMasen/Espresso
        private void button1_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);
            }));
            //===============================================================
            //create js engine and context
            using (JsEngine engine = new JsEngine())
                using (JsContext ctx = engine.CreateContext())
                {
                    if (!jstypedef.IsRegisterd)
                    {
                        ctx.RegisterTypeDefinition(jstypedef);
                    }
                    GC.Collect();
                    System.Diagnostics.Stopwatch stwatch = new System.Diagnostics.Stopwatch();
                    stwatch.Start();


                    TestMe1 t1 = new TestMe1();
                    //wrap t1 with custom js type definition
                    INativeScriptable proxy = ctx.CreateWrapper(t1, jstypedef);
                    ctx.SetVariableFromAny("x", proxy);
                    for (int i = 2000; i >= 0; --i)
                    {
                        object result = ctx.Execute("(function(){if(x.C()){return x.B();}else{return 0;}})()");
                    }

                    stwatch.Stop();

                    Console.WriteLine("met1 template:" + stwatch.ElapsedMilliseconds.ToString());
                }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: Oceanswave/Espresso-1
        private void ScriptThread(object obj)
        {
            workQueue.Enqueue(InitializeJsGlobals);
            NodeJsEngine.Run(Debugger.IsAttached ? new string[] { "--inspect", "hello.espr" } : new string[] { "hello.espr" },
            (eng, ctx) =>
            {
                _engine = eng;
                _context = ctx;

                JsTypeDefinition jstypedef = new JsTypeDefinition("LibEspressoClass");
                jstypedef.AddMember(new JsMethodDefinition("LoadMainSrcFile", args =>
                {
                    args.SetResult(@"
function MainLoop() {
    LibEspresso.Next();
    setImmediate(MainLoop);
}
MainLoop();");
                }));

                jstypedef.AddMember(new JsMethodDefinition("Log", args =>
                {
                    Console.WriteLine(args.GetArgAsObject(0));
                }));

                jstypedef.AddMember(new JsMethodDefinition("Next", args =>
                {
                    //call from js server
                    System.Action work;
                    if (workQueue.TryDequeue(out work))
                    {
                        work();
                    }
                }));
                _context.RegisterTypeDefinition(jstypedef);
                _context.SetVariableFromAny("LibEspresso", _context.CreateWrapper(new object(), jstypedef));
            });
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: dpwhittaker/Espresso
        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();
        }
コード例 #6
0
ファイル: Form1.cs プロジェクト: JohnMasen/Espresso
        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());
                }
        }
コード例 #7
0
ファイル: Form1.cs プロジェクト: JohnMasen/Espresso
        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));
                }
        }
コード例 #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.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();
        }