private async Task ReactOn(IOwinContext context, PathString rest) { Console.WriteLine("{0} React call: {1}", DateTime.Now, rest); IFormCollection form = null; if (context.Request.Method == "POST") { form = await context.Request.ReadFormAsync(); } var modelJson = loadJson(); using (var engine = runtime.Engine) { var ng = new NamesGenerator(Guid.Empty, 1, engine.ScriptsHash); engine.AddHostService("names", ng); engine.SetContext(ConvertToDictionary(form)); var r = runtime.RenderToStaticMarkup("HelloWorld", modelJson, engine); context.Response.ContentType = "text/html"; context.Response.Write(r.render); saveJson(r.modelAsJson); } }
static void MultiThreadRunner() { Console.WriteLine("This ist Lercher.ReactJS.Host"); var values = new string[100]; for (var i = 0; i < values.Length; i++) { values[i] = string.Format("v{0}", i); } var model = new { name = "Daniel", values }; var modelJson = Newtonsoft.Json.JsonConvert.SerializeObject(model); var runtime = new ReactRuntime(cfg => { //cfg.AddJsx("Sample.jsx"); cfg.WatchDirectory("../..", TimeSpan.FromSeconds(1)); }); var ng = new NamesGenerator(Guid.Empty, 1, Guid.Empty.ToByteArray()); using (var engine = runtime.ReactPool.Engine) { engine.AddHostService("names", ng); var r = runtime.RenderToStaticMarkup("HelloWorld", modelJson, engine); var r1 = runtime.RenderToStaticMarkup("HelloWorld", model, engine); Console.WriteLine(r.render); } using (var engine = runtime.ReactPool.Engine) { engine.AddHostService("names", ng); ng.reset(); var sw = Stopwatch.StartNew(); var r2 = runtime.RenderToStaticMarkup("HelloWorld", modelJson, engine); // quicker, 7ms sw.Stop(); Console.WriteLine("Generating JSON took {0}", sw.Elapsed); } using (var engine = runtime.ReactPool.Engine) { engine.AddHostService("names", ng); ng.reset(); var sw = Stopwatch.StartNew(); var r3 = runtime.RenderToStaticMarkup("HelloWorld", model, engine); // can use host methods, 14ms. sw.Stop(); Console.WriteLine("Generating HOST took {0}", sw.Elapsed); } // ------------------------------------------------------------------------------------------------------- runtime.DropAndRefreshAllScripts(); using (var engine = runtime.ReactPool.Engine) { engine.AddHostService("names", ng); ng.reset(); var sw = Stopwatch.StartNew(); var r4 = runtime.RenderToStaticMarkup("HelloWorld", model, engine); // can use host methods, 14ms. sw.Stop(); Console.WriteLine("Generating HOST took {0}", sw.Elapsed); } var rnd = new System.Random(); ThreadStart wt = () => { while (true) { var v = 0.547238 + rnd.NextDouble(); var ts = TimeSpan.FromSeconds(v); Thread.Sleep(ts); using (var engine = runtime.ReactPool.Engine) { engine.AddHostService("names", ng); ng.reset(); var r = runtime.RenderToStaticMarkup("HelloWorld", model, engine); Console.WriteLine("rendered {0:n0} chars in the {1}-loop. Please Change the Js/Jsx files manually.", r.render.Length, ts); } } }; for (int i = 0; i < 50; i++) { var t = new Thread(wt); t.IsBackground = true; t.Start(); } //Hello.SayHello(); }