public void EnterTree() { try { engine.Invoke("enterTree"); } catch (Exception e) { GD.Print(e); } }
public IActionResult VerifyTurn(TurnFieldsViewModel f) { // حذف موارد قبلی _repository.DeleteTurnDetails(f.Turn.ID); // اضافه کردن جزییات if (f.ExpertFields != null) { _repository.AddTurnDetails(f.Turn.ID, f.ExpertFields); } // دریافت فرمول و محاسبه { var formula = _repository.GetSetting(Settings.Formula); formula = Regex.Replace(formula, "\\[([-a-z0-9]+)\\]", m => _repository.GetTurnDetailsValue(f.Turn.ID, m.Groups[1].Value.ToLower()), RegexOptions.IgnoreCase); string func = @"function Func() {" + formula + "}"; var GetResult = new Jint.Engine() .Execute(func) .GetValue("Func"); var price = (long)(double)GetResult.Invoke().ToObject(); f.Turn.Price = price; } _repository.UpdateTurnPrice(f.Turn.ID, f.Turn.Price); return(View(this.GetViewName("VerifyTurn"), f.Turn)); }
public void JintCanAccessGame() { // This is a less valid test now vs. when we were using Moonsharp/Lua. Then, // we were testing that the classes were registered correctly in the script // engine, now, we're just sort of testing that Jint works. var script = new Jint.Engine(); script.Execute(@" function fireGameEvent(events, game) { events.RoundStart_Fire(game); } "); var game = new Game(); bool fired = false; GameEvents.Instance.RoundStart += g => { fired = true; Assert.AreEqual(game, g); }; script.Invoke("fireGameEvent", GameEvents.Instance, game); Assert.IsTrue(fired); }
/// <summary> /// 获取一淘的sign /// </summary> /// <param name="_m_h5_tk"> 第一个参数 是服务器产生的私钥-公钥 _m_h5_tk=8a1c196f9c4cc68b00b8e46858cef6d7_1499930011052; 8a开头_结束</param> /// <param name="timestnap">时间戳 ,通过js生成13位的时间戳</param> /// <param name="appkey">第三个是固定的key ,一淘的是 12574478</param> /// <param name="paraData">需要加密的参数字符串 ,比如:"{\"s\":0,\"n\":40,\"q\":\"植物\",\"needEncode\":false,\"sort\":\"sales_desc\",\"maxPrice\":10000000,\"minPrice\":0,\"serviceList\":\"\",\"navigator\":\"all\",\"urlType\":2}"</param> /// <returns></returns> public static string getEtaoJSSDKSign(string _m_h5_tk, string timestamp, string appkey, string paraData) { //方法1: //先打开etao 点击搜索框 触发热词检索。断网!!!!!在chrome中 即可发现 触发的位置; //点击进去,然后点击 下面的{}进行代码格式化 //联网后,重新触发算法,断点调试进去;找到调用堆栈 u = r([n.cookie.replace(/.*?(?:\b|;)\s*_m_h5_tk=([^;]+).*$|.*/, "$1").split("_")[0], a, t.appKey, e].join("&")); //格式化的js 代码,查看r=function 的开始结束,即可找出算法!!! //从 一淘官方提取的 js 加密sign 方法 在 https://g.alicdn.com/etao/lego2-pc/0.1.0/app/??libs/crox-min.js,libs/pc-mtop-min.js,libs/include-min.js,libs/popupManager-min.js //方法2: //第一步 从js 文件中搜索 api 找到getSearchList:"mtop.etao.fe.search" //第二部 使用IE 在这里尝试打断点,触发事件 也可以尝试断网,让js 报错 逆向找出请求源 // 从index.js 中 监听 renderMain:function(a){var t=this,r=e.Defer(),n=r.promise;i({api:g.getSearchList,v:"1.0",data:t.generateRequestParams(),callback:fun 按钮点击排序时间 // 使用IE 11 F12进行跟踪断点调试 单步 // 最后在 app js ///w=function(t){if(t.api){t=S(t,E.params),t.retry=parseInt(t.retry)||0;var e=c(t.data,!1),a=i(),u=r([n.cookie.replace(/.*?(?:\b|;)\s*_m_h5_tk=([^;]+).*$|.*/,"$1").split("_")[0],a,t.appKey,e].join("&")); o("//" + d + "." + g + "." + h + "." + m + "/h5/" + t.api + "/" + t.v + "/",{ type: "jsonp",api: t.api,v: t.v,appKey: t.appKey,data: e,t: a,sign: u},function(n){ n = n ||{ }; var e = (n.ret ||["UNKNOW::未知错误,请检查网络是否正常后重试"])[0], r = n.data ||{ }; if (/^ SUCCESS /.test(e)) "function" == typeof t.callback&& t.callback(r, null, n); else { e = e.split("::"); var o = e[0], a = e[1]; if (/ SESSION_EXPIRED /.test(o)) a = "未登录淘宝账号"; else if (/^ FAIL_SYS | TOKEN_EXOIRED | TOKEN_EMPTY | BIZ_UNAVAILABLE | NO_NETWORK |^ UNKNOW$/.test(o) && !/^ FAIL_SYS_(SERVICE_NOT_EXIST | API_NOT_FOUNDED | ILLEGAL_ACCESS)$/.test(o) && --t.retry >= 0)return E(t),!1; "function" == typeof t.callback&& t.callback(r,{ code: o,msg: a},n)} })}}, //可以尝试把代码 格式化到 typesctipt 里进行在线代码调试 //单步调试跟踪到签名算法----下面的是格式化后的 string getSignScript = @"var r=function(t){function n(t,n){return t<<n|t>>>32-n}function e(t,n){var e,r,o,a,c;return o=2147483648&t,a=2147483648&n,e=1073741824&t,r=1073741824&n,c=(1073741823&t)+(1073741823&n),e&r?2147483648^c^o^a:e|r?1073741824&c?3221225472^c^o^a:1073741824^c^o^a:c^o^a}function r(t,n,e){return t&n|~t&e}function o(t,n,e){return t&e|n&~e}function a(t,n,e){return t^n^e}function c(t,n,e){return n^(t|~e)}function i(t,o,a,c,i,u,l){return t=e(t,e(e(r(o,a,c),i),l)),e(n(t,u),o)}function u(t,r,a,c,i,u,l){return t=e(t,e(e(o(r,a,c),i),l)),e(n(t,u),r)}function l(t,r,o,c,i,u,l){return t=e(t,e(e(a(r,o,c),i),l)),e(n(t,u),r)}function f(t,r,o,a,i,u,l){return t=e(t,e(e(c(r,o,a),i),l)),e(n(t,u),r)}function s(t){for(var n,e=t.length,r=e+8,o=(r-r%64)/64,a=16*(o+1),c=new Array(a-1),i=0,u=0;u<e;)n=(u-u%4)/4,i=u%4*8,c[n]=c[n]|t.charCodeAt(u)<<i,u++;return n=(u-u%4)/4,i=u%4*8,c[n]=c[n]|128<<i,c[a-2]=e<<3,c[a-1]=e>>>29,c}function p(t){var n,e,r='',o='';for(e=0;e<=3;e++)n=t>>>8*e&255,o='0'+n.toString(16),r+=o.substr(o.length-2,2);return r}function d(t){t=t.replace(/\r\n/g,'\n');for(var n='',e=0;e<t.length;e++){var r=t.charCodeAt(e);r<128?n+=String.fromCharCode(r):r>127&&r<2048?(n+=String.fromCharCode(r>>6|192),n+=String.fromCharCode(63&r|128)):(n+=String.fromCharCode(r>>12|224),n+=String.fromCharCode(r>>6&63|128),n+=String.fromCharCode(63&r|128))}return n}var g,h,m,v,b,y,C,S,w,E=[],_=7,I=12,N=17,j=22,A=5,k=9,O=14,L=20,T=4,U=11,K=16,R=23,F=6,$=10,x=15,D=21;for(t=d(t),E=s(t),y=1732584193,C=4023233417,S=2562383102,w=271733878,g=0;g<E.length;g+=16)h=y,m=C,v=S,b=w,y=i(y,C,S,w,E[g+0],_,3614090360),w=i(w,y,C,S,E[g+1],I,3905402710),S=i(S,w,y,C,E[g+2],N,606105819),C=i(C,S,w,y,E[g+3],j,3250441966),y=i(y,C,S,w,E[g+4],_,4118548399),w=i(w,y,C,S,E[g+5],I,1200080426),S=i(S,w,y,C,E[g+6],N,2821735955),C=i(C,S,w,y,E[g+7],j,4249261313),y=i(y,C,S,w,E[g+8],_,1770035416),w=i(w,y,C,S,E[g+9],I,2336552879),S=i(S,w,y,C,E[g+10],N,4294925233),C=i(C,S,w,y,E[g+11],j,2304563134),y=i(y,C,S,w,E[g+12],_,1804603682),w=i(w,y,C,S,E[g+13],I,4254626195),S=i(S,w,y,C,E[g+14],N,2792965006),C=i(C,S,w,y,E[g+15],j,1236535329),y=u(y,C,S,w,E[g+1],A,4129170786),w=u(w,y,C,S,E[g+6],k,3225465664),S=u(S,w,y,C,E[g+11],O,643717713),C=u(C,S,w,y,E[g+0],L,3921069994),y=u(y,C,S,w,E[g+5],A,3593408605),w=u(w,y,C,S,E[g+10],k,38016083),S=u(S,w,y,C,E[g+15],O,3634488961),C=u(C,S,w,y,E[g+4],L,3889429448),y=u(y,C,S,w,E[g+9],A,568446438),w=u(w,y,C,S,E[g+14],k,3275163606),S=u(S,w,y,C,E[g+3],O,4107603335),C=u(C,S,w,y,E[g+8],L,1163531501),y=u(y,C,S,w,E[g+13],A,2850285829),w=u(w,y,C,S,E[g+2],k,4243563512),S=u(S,w,y,C,E[g+7],O,1735328473),C=u(C,S,w,y,E[g+12],L,2368359562),y=l(y,C,S,w,E[g+5],T,4294588738),w=l(w,y,C,S,E[g+8],U,2272392833),S=l(S,w,y,C,E[g+11],K,1839030562),C=l(C,S,w,y,E[g+14],R,4259657740),y=l(y,C,S,w,E[g+1],T,2763975236),w=l(w,y,C,S,E[g+4],U,1272893353),S=l(S,w,y,C,E[g+7],K,4139469664),C=l(C,S,w,y,E[g+10],R,3200236656),y=l(y,C,S,w,E[g+13],T,681279174),w=l(w,y,C,S,E[g+0],U,3936430074),S=l(S,w,y,C,E[g+3],K,3572445317),C=l(C,S,w,y,E[g+6],R,76029189),y=l(y,C,S,w,E[g+9],T,3654602809),w=l(w,y,C,S,E[g+12],U,3873151461),S=l(S,w,y,C,E[g+15],K,530742520),C=l(C,S,w,y,E[g+2],R,3299628645),y=f(y,C,S,w,E[g+0],F,4096336452),w=f(w,y,C,S,E[g+7],$,1126891415),S=f(S,w,y,C,E[g+14],x,2878612391),C=f(C,S,w,y,E[g+5],D,4237533241),y=f(y,C,S,w,E[g+12],F,1700485571),w=f(w,y,C,S,E[g+3],$,2399980690),S=f(S,w,y,C,E[g+10],x,4293915773),C=f(C,S,w,y,E[g+1],D,2240044497),y=f(y,C,S,w,E[g+8],F,1873313359),w=f(w,y,C,S,E[g+15],$,4264355552),S=f(S,w,y,C,E[g+6],x,2734768916),C=f(C,S,w,y,E[g+13],D,1309151649),y=f(y,C,S,w,E[g+4],F,4149444226),w=f(w,y,C,S,E[g+11],$,3174756917),S=f(S,w,y,C,E[g+2],x,718787259),C=f(C,S,w,y,E[g+9],D,3951481745),y=e(y,h),C=e(C,m),S=e(S,v),w=e(w,b);var Y=p(y)+p(C)+p(S)+p(w);return Y.toLowerCase()}"; var ck = _m_h5_tk.Split('_')[0]; //"8a1c196f9c4cc68b00b8e46858cef6d7"; var t = timestamp; // "1499931938374";////function () { var n = (new Date).getTime(); return n <= t && (n = t + 1), t = n }(); var key = appkey; // "12574478"; var paras = paraData; // "{\"s\":0,\"n\":40,\"q\":\"植物\",\"needEncode\":false,\"sort\":\"sales_desc\",\"maxPrice\":10000000,\"minPrice\":0,\"serviceList\":\"\",\"navigator\":\"all\",\"urlType\":2}"; var paraSring = string.Join("&", ck, t, key, paras); var add = new Jint.Engine() .Execute(getSignScript) .GetValue("r"); var val = add.Invoke(paraSring); return(val.ToString()); }
/// <summary> /// 通过js脚本执行获取时间戳 /// </summary> /// <returns></returns> public static string getUnixTimestamp() { string cmd = "function timeToken(){var t=0; var n=(new Date).getTime();return n<=t&&(n=t+1),t=n};"; var engine = new Jint.Engine().Execute(cmd).GetValue("timeToken"); string stamp = engine.Invoke().ToString(); return(stamp); }
public void RunScrypt(Game g) { GameEvents.Instance.ActorActionsStart_Fire(g, this); if (jint != null) { jint.Invoke("actorActions", g, this); } GameEvents.Instance.ActorActionsEnd_Fire(g, this); }
static void classAccess() { var engine = new Jint.Engine(); engine.Execute(@" function test1(obj) { callback(obj.publicNum); callback(obj.publicString); callback(obj.someEnum); callback(obj.publicReadonlyString); obj.someList.Add(12345); callback(obj.someList[obj.someList.Count - 1]); } function test2(obj1, obj2) { obj1.SomeMethod(obj2); } function test3(obj) { return obj; } "); engine.SetValue("callback", new Action <string>(s => { Console.WriteLine($"callback from js: {s}"); })); // javascript access of class members var someObj = new SomeClass(21, "12"); engine.Invoke("test1", someObj); // javascript calling a C# method, passing it a C# object var someOther = new SomeClass(22, "22"); engine.Invoke("test2", someObj, someOther); // javascript returning a C# object var result = engine.Invoke("test3", someObj); Debug.Assert(result.ToObject() == someObj); }
public void AttackTargetShouldClearTargetAfterAttack() { var test = new TestGameWithActors(); test.ArmAlice(); test.AggroAliceAndTargetCarly(); var jint = new Jint.Engine(); jint.Execute(ScryptUtil.attackTargets.body); jint.Invoke(ScryptUtil.attackTargets.name, test.game, test.playerAlice); Assert.IsFalse(test.mobCarly.Targeted); }
public void JintCanAccessGame() { var testGame = new Game(); var script = new Jint.Engine(); script.Execute(@" function accessGame(game) { game.PlayRound() } "); script.Invoke("accessGame", testGame); Assert.AreEqual(1, testGame.NumRounds); }
public void AttackTargetShouldDealDamage() { var test = new TestGameWithActors(); test.ArmAlice(); test.mobCarly.Targeted = true; var jint = new Jint.Engine(); jint.Execute(ScryptUtil.attackTargets.body); jint.Invoke(ScryptUtil.attackTargets.name, test.game, test.playerAlice); Assert.AreEqual(test.mobCarly.Health, test.mobCarly.baseHealth - test.playerAlice.Weapon.damage); }
public void ChooseRandomLivingShouldNotChooseDead() { var test = new TestGameWithActors(); test.playerBob.TakeDamage(test.mobCarly.baseHealth); test.playerAlice.TakeDamage(test.mobDenise.baseHealth); var jint = new Jint.Engine(); jint.Execute(ScryptUtil.chooseRandom.body); var rng = new RNG(0); var choice = jint.Invoke(ScryptUtil.chooseRandom.name, test.game.Players, rng); Assert.IsTrue(choice.IsNull()); }
public void ChooseRandomLivingShouldChoosePseudoRandomly() { var test = new TestGameWithActors(); var jint = new Jint.Engine(); jint.Execute(ScryptUtil.chooseRandom.body); var rng = new RNG(0); void TestChooseRandom(GameActor actor) { Assert.AreEqual(actor, jint.Invoke(ScryptUtil.chooseRandom.name, test.game.Players, rng).ToObject()); } TestChooseRandom(test.playerBob); TestChooseRandom(test.playerAlice); TestChooseRandom(test.playerBob); TestChooseRandom(test.playerBob); TestChooseRandom(test.playerAlice); }
public JsonElement Evaluate(string code, JsonElement input) { // Create a JS engine with some sandbox limits var engine = new Jint.Engine(options => { options .LimitRecursion(1) .TimeoutInterval(new TimeSpan(0, 0, 3)); }); var jsonParser = new JsonParser(engine); var jintInput = jsonParser.Parse(input.ToString()); // Go! engine.Execute(code); var result = engine.Invoke("run", jintInput); // Parse engine result object into json var stringResult = engine.Json.Stringify(result, Jint.Runtime.Arguments.From(result)).ToString(); return(JsonDocument.Parse(stringResult).RootElement); }
public static JObject ExtractFinderPropertyFromFile(string fileName) { JObject result = default; try { using (var fileStream = File.Open(fileName, FileMode.Open)) { using (StreamReader reader = new StreamReader(fileStream)) { var fileContent = reader.ReadToEnd(); fileContent = $"var jQuery = {{}};{fileContent}; function GetSg(){{return JSON.stringify(sg);}};"; var jIntEngine = new Jint.Engine(); jIntEngine.Execute(fileContent); result = JsonConvert.DeserializeObject(jIntEngine.Invoke("GetSg").AsString()) as JObject; } } } catch { //TODO log something here!! } return(result); }
public void Awake() { // Loading var engine = new Jint.Engine(); //var logic = new Interpreter(); Registers = new Dictionary <Type, Action <BlockBehaviour, KeyInputController> >(); Unregisters = new Dictionary <Type, Action <BlockBehaviour> >(); ModConsole.RegisterCommand("script", args => { var text = string.Join(" ", args); //var func = logic.PrepareScript(text); //logic.AddExtFunc(func, "print", (ctx, x) => { ModConsole.Log(x[0]?.ToString()); return null; }, true); //logic.SetScript(func); //var res = logic.ContinueScript(1000); Func <JsValue, JsValue[], JsValue> printCb = (thiz, x) => { ModConsole.Log(x[0]?.ToObject().ToString()); return(x[0]); }; JsValue curV = null; Func <JsValue, JsValue[], JsValue> irqv = (thiz, x) => { curV = x[0]; return(null); }; var script = new JavaScriptParser(text, Jint.Engine.DefaultParserOptions).ParseScript(); engine.SetValue("print", printCb); engine.SetValue("irqv", irqv); engine.SetScript(script); engine.Executor.OnLog = (x) => ModConsole.Log(x?.ToString()); bool cli = false; engine.Executor.OnNextStatement = () => { if (cli) { return; } cli = true; try { if (curV != null) { engine.Invoke(curV); } } finally { cli = false; } }; var res = engine.ContinueScript(1000); ModConsole.Log(res?.ToString()); }, "exec script"); ModConsole.RegisterCommand("cpuapi", args => { foreach (var line in SingleInstance <Blocks.Api.CpuApi> .Instance.GetHelp()) { ModConsole.Log(line); } }, "print cpu api list"); ModConsole.RegisterCommand("sensordbg", args => { DrawSensorDebug = args.Length < 1 ? false : args[0] == "true"; }, "print sensor debug points"); CpuBlock.Create(this); // These creator functions find corresponding block in game prefabs // and replace it with inheritor ExtLogicGate.Create(this); ExtAltimeterBlock.Create(this); ExtSpeedometerBlock.Create(this); ExtAnglometerBlock.Create(this); ExtSensorBlock.Create(this); ModConsole.Log($"Logic mod Awake"); Events.OnMachineSimulationToggle += Events_OnMachineSimulationToggle; LineMaterial = new Material(Shader.Find("Hidden/Internal-Colored")); LineMaterial.hideFlags = HideFlags.HideAndDontSave; LineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); LineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); LineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off); LineMaterial.SetInt("_ZWrite", 0); Camera.onPostRender += DrawConnectingLines; Events.OnBlockInit += InitBlock; CpuInfoMessage = ModNetworking.CreateMessageType(new DataType[] { DataType.Block, DataType.ByteArray }); CpuLogMessage = ModNetworking.CreateMessageType(new DataType[] { DataType.Block, DataType.String }); ModNetworking.Callbacks[CpuInfoMessage] += (Action <Message>)((msg) => { Player localPlayer = Player.GetLocalPlayer(); if (msg == null || localPlayer == null || !localPlayer.IsHost) { return; } var block = msg.GetData(0) as Modding.Blocks.Block; if (!(block?.BlockScript is CpuBlock cpu)) { return; } if (block.Machine == localPlayer.Machine) { return; // don't read updates for MY machine! } cpu.AfterEdit_ServerRecv((byte[])msg.GetData(1)); }); ModNetworking.Callbacks[CpuLogMessage] += (Action <Message>)((msg) => { if (msg == null) { return; } var block = msg.GetData(0) as Modding.Blocks.Block; if (!(block?.BlockScript is CpuBlock cpu)) { return; } cpu.LogMessage((string)msg.GetData(1)); }); }
public T CallFunction <T>(string function, params object[] arguments) where T : class { return(_engine.Invoke(function, arguments).ToObject() as T); }
public static void SetBridge(BridgeInterceptor bridge) { engine.Invoke("BuildBridge", bridge); }
public T CallFunction <T>(string function, params object[] arguments) { return((T)_engine.Invoke(function, arguments).ToObject()); }