示例#1
1
        static void OriginalMain()
        {
            var done = false;
            var sw = new Stopwatch();

            sw.Start();
            for (var i = 0; i < N; i++)
            {
                var jintEngine = new Jint.Engine();
                jintEngine.Execute(currentScript);
                done = jintEngine.GetValue("done").AsBoolean();
            }
            sw.Stop();
            Console.WriteLine("jint: " + sw.ElapsedMilliseconds / N + " - " + done);

            done = false;
            sw.Restart();
            for (var i = 0; i < N; i++)
            {
                var ironjsEngine = new IronJS.Hosting.CSharp.Context();
                ironjsEngine.Execute(currentScript);
                done = ironjsEngine.GetGlobalAs<bool>("done");
            }
            sw.Stop();
            Console.WriteLine("ironjs: " + sw.ElapsedMilliseconds / N + " - " + done);

            done = false;
            sw.Restart();
            for (var i = 0; i < N; i++)
            {
                using (var jsNetEngine = new Noesis.Javascript.JavascriptContext())
                {
                    jsNetEngine.Run(currentScript);
                    done = (bool)jsNetEngine.GetParameter("done");
                }
            }
            sw.Stop();
            Console.WriteLine("js.net: " + sw.ElapsedMilliseconds / N + " - " + done);

            done = false;
            sw.Restart();
            for (var i = 0; i < N; i++)
            {
                var jurassicEngine = new Jurassic.ScriptEngine();
                jurassicEngine.Execute(currentScript);
                done = jurassicEngine.GetGlobalValue<bool>("done");
            }
            sw.Stop();
            Console.WriteLine("jurassic: " + sw.ElapsedMilliseconds / N + " - " + done);

            done = false;
            sw.Restart();
            for (var i = 0; i < N; i++)
            {
                using (var clearscriptV8 = new Microsoft.ClearScript.V8.V8ScriptEngine())
                {
                    clearscriptV8.Execute(currentScript);
                    done = clearscriptV8.Script.done;
                }
            }
            sw.Stop();
            Console.WriteLine("clearscriptV8: " + sw.ElapsedMilliseconds / N + " - " + done);

            done = false;
            sw.Restart();
            using (var clearscriptV8 = new Microsoft.ClearScript.V8.V8Runtime())
            {
                var compiled = clearscriptV8.Compile(currentScript);
                for (var i = 0; i < N; i++)
                {
                    using (var engine = clearscriptV8.CreateScriptEngine())
                    {
                        engine.Evaluate(compiled);
                        done = engine.Script.done;
                    }
                }
            }
            sw.Stop();
            Console.WriteLine("clearscriptV8 compiled: " + sw.ElapsedMilliseconds / N + " - " + done);

            done = false;
            sw.Restart();
            for (var i = 0; i < N; i++)
            {
                var nilcontext = new NiL.JS.Core.Context();
                nilcontext.Eval(currentScript);
                done = (bool)nilcontext.GetVariable("done");
            }
            sw.Stop();
            Console.WriteLine("niljs: " + sw.ElapsedMilliseconds / N + " - " + done);

            Console.Read();
        }
示例#2
0
        protected override bool InnerHasVariable(string variableName)
        {
            bool result = _jsEngine.HasGlobalValue(variableName);

            if (result)
            {
                object value = _jsEngine.GetGlobalValue(variableName);
                result = (value.ToString() != "undefined");
            }

            return(result);
        }
        protected override bool InnerHasVariable(string variableName)
        {
            bool result;

            lock (_executionSynchronizer)
            {
                result = _jsEngine.HasGlobalValue(variableName);
                if (result)
                {
                    object value = _jsEngine.GetGlobalValue(variableName);
                    result = value.ToString() != "undefined";
                }
            }

            return(result);
        }
        public object InstallBundle(Jurassic.ScriptEngine engine)
        {
            engine.Array.InstancePrototype.SetPropertyValue("last", new Sucralose.ArrayLastFunctionInstance(engine, engine.Object.InstancePrototype), false);

            engine.Number.InstancePrototype.SetPropertyValue("round", new Sucralose.RoundFunctionInstance(engine, engine.Object.InstancePrototype), false);
            engine.Number.InstancePrototype.SetPropertyValue("ceil", new Sucralose.CeilFunctionInstance(engine, engine.Object.InstancePrototype), false);
            engine.Number.InstancePrototype.SetPropertyValue("floor", new Sucralose.FloorFunctionInstance(engine, engine.Object.InstancePrototype), false);
            engine.Number.InstancePrototype.SetPropertyValue("toNumber", new Sucralose.NumberToNumberFunctionInstance(engine, engine.Object.InstancePrototype), false);

            engine.Object.SetPropertyValue("has", new Sucralose.HasFunctionInstance(engine, engine.Object.InstancePrototype), false);
            engine.Object.SetPropertyValue("merge", new Sucralose.MergeFunctionInstance(engine, engine.Object.InstancePrototype), false);

            engine.String.SetPropertyValue("format", new Sucralose.StringFormatFunctionInstance(engine, engine.Object.InstancePrototype), false);
            engine.String.InstancePrototype.SetPropertyValue("last", new Sucralose.StringLastFunctionInstance(engine, engine.Object.InstancePrototype), false);

            var json = engine.GetGlobalValue("JSON") as ObjectInstance;

            if (json == null)
            {
                throw new JavaScriptException(engine, "Error", "Unable to locate the JSON Object.");
            }

            json.SetPropertyValue("parse2", new Sucralose.Parse2FunctionInstance(engine, engine.Object.InstancePrototype), false);
            json.SetPropertyValue("stringify2", new Sucralose.Stringify2FunctionInstance(engine, engine.Object.InstancePrototype), false);

            return(Null.Value);
        }
示例#5
0
        public object InstallBundle(Jurassic.ScriptEngine engine)
        {
            var baristaInstance = engine.GetGlobalValue("barista") as BaristaGlobal;

            if (baristaInstance == null)
            {
                throw new InvalidOperationException("Barista Global bundle could not be obtained.");
            }

            var dependencyResultObj = engine.Object.Construct();

            //Require all dependencies..
            foreach (var dependency in m_dependencies)
            {
                var result = baristaInstance.Common.Require(dependency.Key, null);
                dependencyResultObj.SetPropertyValue(dependency.Value, result, false);
            }

            //If it's a function dependency, execute that.
            if (this.ScriptFunction != null)
            {
                var args = new List <object>();
                if (this.ScriptFunction is UserDefinedFunction)
                {
                    var udf = this.ScriptFunction as UserDefinedFunction;

                    args.AddRange(udf.ArgumentNames.Select(argumentName => dependencyResultObj.HasProperty(argumentName) ? dependencyResultObj.GetPropertyValue(argumentName) : Null.Value));
                }

                return(this.ScriptFunction.Call(engine.Global, args.ToArray()));
            }

            //Use the implemented "include" function to include the scripts.
            //this promotes loose coupling between the script bundle and the include.
            var variableNames = dependencyResultObj.Properties.Select(pn => pn.Name).ToArray();
            var resultArray   = engine.Array.Construct();

            foreach (var scriptReference in m_scriptReferences)
            {
                //Create a new scope, and eval the script within the new scope.
                var scope = DeclarativeScope.CreateRuntimeScope(engine.CreateGlobalScope(), variableNames);
                foreach (var property in dependencyResultObj.Properties)
                {
                    if (property.Value == Undefined.Value || property.Value == Null.Value || property.Value == null)
                    {
                        continue;
                    }

                    scope.SetValue(property.Name, property.Value);
                }

                var result = baristaInstance.Include(scriptReference, scope, engine.Global, engine.ForceStrictMode);

                ArrayInstance.Push(resultArray, result);
            }

            return(resultArray.Length == 1
        ? resultArray[0]
        : resultArray);
        }
示例#6
0
        public bool Jurassic()
        {
            bool done = false;

            for (var i = 0; i < N; i++)
            {
                sharedJurassic.Execute(Script);
                done |= sharedJurassic.GetGlobalValue <bool>("done");
            }

            return(done);
        }
示例#7
0
        public void EngineTest()
        {
            var engine = new Jurassic.ScriptEngine();
            engine.SetGlobalValue("i", 1);
            engine.SetGlobalValue("i", 2);
            Assert.AreEqual(2, engine.GetGlobalValue("i"));

            engine.SetGlobalFunction("test", new Func<object, object, object, object, string>(Test));

            Trace.WriteLine(engine.Evaluate<string>("test(1)"));
            Trace.WriteLine(engine.CallGlobalFunction<string>("test", new object[] { 1 }));

            Trace.WriteLine(engine.Array.Call(1, 2, 3).ElementValues.ToList()[2]);
        }
示例#8
0
        public void EngineTest()
        {
            var engine = new Jurassic.ScriptEngine();

            engine.SetGlobalValue("i", 1);
            engine.SetGlobalValue("i", 2);
            Assert.AreEqual(2, engine.GetGlobalValue("i"));

            engine.SetGlobalFunction("test", new Func <object, object, object, object, string>(Test));

            Trace.WriteLine(engine.Evaluate <string>("test(1)"));
            Trace.WriteLine(engine.CallGlobalFunction <string>("test", new object[] { 1 }));

            Trace.WriteLine(engine.Array.Call(1, 2, 3).ElementValues.ToList()[2]);
        }
示例#9
0
 public string GetCodeVersion()
 {
     try
     {
         var resultado = motorJS.GetGlobalValue <String>("VersionCode");
         if (resultado == "undefined")
         {
             throw new Exception();
         }
         else
         {
             return(resultado);
         }
     }
     catch (Exception) { return("NOT B SERIES COMPATIBLE"); }
 }
示例#10
0
        public CVG Process(CVG inputdata, object otherdata = null)
        {
            try
            {
                //HACK: this feels wrong
                if (!String.IsNullOrEmpty(CurrentState.Settings.Functions))
                {
                    _jsengine.Execute(CurrentState.Settings.Functions);
                }
                // Debug.WriteLine("Process();");
                //INPUT HACKS
                //  _jsengine.SetGlobalValue("gate_input", inputdata.Gate);
                // _jsengine.SetGlobalValue("cv_input", inputdata.CV);
                //  _jsengine.SetGlobalValue("parameters_input", inputdata.Parameters);
                // _jsengine.Execute("var cvg_input = {}; cvg_input['Gate'] = gate_input;cvg_input['CV'] = cv_input;cvg_input['Parameters'] = parameters_input;");
                //HACK: i hate this
                if (otherdata != null)
                {
                    _jsengine.SetGlobalValue("otherdata_raw", Newtonsoft.Json.JsonConvert.SerializeObject(otherdata));
                    _jsengine.Execute("var otherdata = JSON.parse(otherdata_raw)");
                }

                _jsengine.SetGlobalValue("cvg_input_raw", Newtonsoft.Json.JsonConvert.SerializeObject(inputdata));
                _jsengine.Execute("var cvg_input = JSON.parse(cvg_input_raw)");


                //TODO: this seems log winded
                _jsengine.Execute("var cvg_result = Process(cvg_input) ");

                //OUTPUT HACKS
                _jsengine.Execute("; if (cvg_result === undefined){ cvg_result = cvg_input}; var cvg_result_raw = JSON.stringify(cvg_result);   ");
                //   _jsengine.Execute(" var gate_result = cvg_result['Gate'] ;var cv_result = cvg_result['CV'] ;var parameters_result = cvg_result['Parameters'] ;");
                //var gate_result = (Dictionary<string, List<bool>>)_jsengine.GetGlobalValue("gate_input");
                //var cv_result = (Dictionary<string, List<short>>)_jsengine.GetGlobalValue("cv_result");
                //var parameters_result = (Dictionary<string, List<short>>)_jsengine.GetGlobalValue("parameters_result");
                //HACK: i hate this
                return(Newtonsoft.Json.JsonConvert.DeserializeObject <CVG>(_jsengine.GetGlobalValue <string>("cvg_result_raw")));
                //return new CVG(gate_result, cv_result, parameters_result);
            }catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            return(inputdata);
        }
示例#11
0
        public async static Task <string> GetCoinCheckupDataPath()
        {
            var Scraper = new ScrapingBrowser();

            var js = new Jurassic.ScriptEngine();

            Scraper.AllowAutoRedirect = true;

            Scraper.AllowMetaRedirect = true;

            var Page = await Scraper.NavigateToPageAsync(new Uri("https://coincheckup.com/analysis"));

            var RootScript = Page.Html.SelectSingleNode("//script[contains(text(), 'DATA_URI')]");
            var x          = js.Evaluate("window = {}");
            var result     = js.Evaluate(RootScript.InnerText);

            var root = js.GetGlobalValue <string>("DATA_URI");

            return(root);
        }
示例#12
0
        public bool JurassicCompiled(Parameter parameter)
        {
            Jurassic.ScriptEngine engine = new Jurassic.ScriptEngine();

            Jurassic.CompiledScript compiledScript = engine.Compile(new Jurassic.StringScriptSource("n = " + EXPRESSION));

            List <int> results = new List <int>(parameter.Numbers.Length);

            foreach (int number in parameter.Numbers)
            {
                engine.SetGlobalValue("n", number);

                compiledScript.Execute(engine);

                int result = engine.GetGlobalValue <int>("n");

                results.Add(result);
            }

            return(Assert(results, parameter.Sum));
        }
示例#13
0
        private ResultPerPageFree InnerUserList(string token, int pageSize, int pageIndex)
        {
            var dic = new Dictionary <string, object>
            {
                { "t", "user/index" },
                { "pagesize", pageSize },
                { "pageidx", pageIndex },
                { "type", "0" },
                { "groupid", GroupId },
                { "token", token },
                { "lang", Language },
            };
            //var s = HttpHelper.GetString(DefaultUserListUrl, dic, _cc, null);
            var stream = HttpExtendedHelper.Get(DefaultUserListUrl, dic, _cc, null);
            var doc    = new HtmlDocument();

            doc.Load(stream, Encoding);
            var ss = doc.DocumentNode.SelectNodes("//script");
            var se = new Jurassic.ScriptEngine();

            foreach (var s in ss.Where(e => e.GetAttributeValue("src", string.Empty).Equals(string.Empty)))
            {
                try
                {
                    se.Execute("if(typeof(wx)=='undefined') wx={}");
                    se.Execute(s.InnerText);
                }
                catch
                {
                    // se.Execute("if(!wxwx.cgiData)delete wx");
                }
            }
            var temp = se.GetGlobalValue("wx") as Jurassic.Library.ObjectInstance;
            var r    = ResultPerPageFree.FromObjectInstance(temp.GetPropertyValue("cgiData") as ObjectInstance);

            return(r);
        }
示例#14
0
        public static HttpResponseMessage GetRequestedPage(WebProxy proxy, IShop shop, string url, CancellationToken token)
        {
            var initialUrl = new Uri(url);
            var host       = new Uri(shop.WebsiteBaseUrl);

            var    client      = ClientFactory.GetProxiedFirefoxClient();
            string initialPage = null;

            var message1 = new HttpRequestMessage()
            {
                Method     = HttpMethod.Get,
                RequestUri = initialUrl
            };

            message1.Headers.AddHeaders(ClientFactory.FireFoxHeaders);

            using (message1)
            {
                var task = client.SendAsync(message1);

                var result = task.Result;

                string pageSource = result.Content.ReadAsStringAsync().Result;
                if (!pageSource.Contains("s,t,o,p,b,r,e,a,k,i,n,g,f"))
                {
                    result.EnsureSuccessStatusCode();
                    return(result);
                }

                initialPage = pageSource;
                result.Dispose();
            }

            for (int i = 0; i < 3; i++)
            {
                var engine = new Jurassic.ScriptEngine();
                engine.SetGlobalValue("interop", "15");

                var pass   = Regex.Match(initialPage, "name=\"pass\" value=\"(.*?)\"/>").Groups[1].Value;
                var answer = Regex.Match(initialPage, "name=\"jschl_vc\" value=\"(.*?)\"/>").Groups[1].Value;

                var script = Regex.Match(initialPage, "setTimeout\\(function\\(\\){(.*?)}, 4000\\);",
                                         RegexOptions.Singleline | RegexOptions.IgnoreCase).Groups[1].Value;
                script = script.Replace("a = document.getElementById('jschl-answer');", string.Empty);
                script = script.Replace("f.action += location.hash;", string.Empty);
                script = script.Replace("f.submit();", string.Empty);
                script = script.Replace("f = document.getElementById('challenge-form');", string.Empty);
                script = script.Replace("a.value", "interop");
                script = script.Replace("t = document.createElement('div');", string.Empty);
                script = script.Replace("t.innerHTML=\"<a href='/'>x</a>\";", string.Empty);
                script = script.Replace("t = t.firstChild.href", $"t='{host.AbsoluteUri}';");



                var gga  = engine.Evaluate(script);
                var calc = engine.GetGlobalValue <string>("interop");

                Task.Delay(5000, token).Wait(token);
                var uri      = new Uri(host, $"/cdn-cgi/l/chk_jschl?jschl_vc={answer}&pass={pass}&jschl_answer={calc}");
                var message3 = new HttpRequestMessage()
                {
                    Method     = HttpMethod.Get,
                    RequestUri = uri,
                    Headers    = { Referrer = initialUrl }
                };

                message3.Headers.AddHeaders(ClientFactory.FireFoxHeaders);

                using (message3)
                {
                    var finalResult = client.SendAsync(message3, token).Result;


                    string pageSource = finalResult.Content.ReadAsStringAsync().Result;
                    if (!pageSource.Contains("s,t,o,p,b,r,e,a,k,i,n,g,f"))
                    {
                        finalResult.EnsureSuccessStatusCode();
                        return(finalResult);
                    }
                    finalResult.Dispose();
                }
            }

            throw new WebException("Couldn't bypass cloudfare");
        }
示例#15
0
 private ResultPerPage InnerUserList(string token, int pageSize, int pageIndex)
 {
     var dic = new Dictionary<string, object>
     {
         {"t", "user/index"},
         {"pagesize", pageSize},
         {"pageidx", pageIndex},
         {"type", "0"},
         {"groupid", GroupId},
         {"token", token},
         {"lang", Language},
     };
     //var s = HttpHelper.GetString(DefaultUserListUrl, dic, _cc, null);
     var stream = HttpHelper.Get(DefaultUserListUrl, dic, _cc, null);
     var doc = new HtmlDocument();
     doc.Load(stream, Encoding);
     var ss = doc.DocumentNode.SelectNodes("//script");
     var se = new Jurassic.ScriptEngine();
     foreach (var s in ss.Where(e => e.GetAttributeValue("src", string.Empty).Equals(string.Empty)))
     {
         try
         {
             se.Execute(s.InnerText);
         }
         catch
         {
         }
     }
     var temp = se.GetGlobalValue("cgiData") as Jurassic.Library.ObjectInstance;
     var r = ResultPerPage.FromObjectInstance(temp);
     return r;
 }