From 2f96da023d9172deb646de9bd1cf0a05c4201df7 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Wed, 3 Sep 2014 23:06:31 -0700 Subject: lols --- client/src/main/scala/workbench/Main.scala | 76 +++++++++++++++++++++++++++--- 1 file changed, 70 insertions(+), 6 deletions(-) (limited to 'client') diff --git a/client/src/main/scala/workbench/Main.scala b/client/src/main/scala/workbench/Main.scala index 0b0cea7..7f63da6 100644 --- a/client/src/main/scala/workbench/Main.scala +++ b/client/src/main/scala/workbench/Main.scala @@ -1,10 +1,74 @@ -package workbench +package com.lihaoyi.workbench +import upickle._ +import org.scalajs.dom import org.scalajs.dom.extensions._ -import async.Async._ -object Main{ - def main(bootSnippet: String, host: String, port: Int): Unit = async{ - while(true){ - val data = await(Ajax.get(s"http://$host:$port/notifications")) +import upickle.{Reader, Writer, Js} + +import scala.scalajs.js +import scala.scalajs.js.annotation.JSExport +import scalajs.concurrent.JSExecutionContext.Implicits.runNow +object WireServer extends autowire.Server[Js.Value, upickle.Reader, upickle.Writer]{ + + def write[Result: Writer](r: Result) = upickle.writeJs(r) + def read[Result: Reader](p: Js.Value) = upickle.readJs[Result](p) + def wire(parsed: Js.Arr): Unit = { + WireServer.route[Api](Main).apply( + autowire.Core.Request( + parsed(0).asInstanceOf[Js.Arr].value.collect{case Js.Str(s) => s}, + parsed(1).value.asInstanceOf[Map[String, Js.Value]] + ) + ) + } +} +@JSExport +object Main extends Api{ + def main(bootSnippet: String, host: String, port: Int): Unit = { + def rec(): Unit = { + val f = Ajax.get(s"http://$host:$port/notifications") + + f.onSuccess { case data => + val parsed = json.read(data.responseText).asInstanceOf[Js.Arr] + WireServer.wire(parsed) + rec() + } (runNow) + () + } + rec() + } + + + override def clear(): Unit = ??? + + override def reload(): Unit = { + dom.console.log("Reloading page...") + dom.location.reload() + } + + override def run(path: String, bootSnippet: Option[String]): Unit = { + val tag = dom.document.createElement("script") + var loaded = false + + tag.setAttribute("src", path) + + bootSnippet.foreach{ bootSnippet => + tag.onreadystatechange = (e: dom.Event) => { + dom.console.log("Post-run reboot") + if (!loaded) { + dom.console.log("Post-run reboot go!") + js.eval(bootSnippet) + } + loaded = true + } + } + dom.document.head.appendChild(tag) + } + + override def print(level: String, msg: String): Unit = { + level match { + case "error" => dom.console.error(msg) + case "warn" => dom.console.warn(msg) + case "info" => dom.console.info(msg) + case "log" => dom.console.log(msg) } } } \ No newline at end of file -- cgit v1.2.3