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)); } }
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)); } }
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()); } }
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)); }); }
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(); }
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()); } }
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)); } }
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(); }