diff options
author | Li Haoyi <haoyi@dropbox.com> | 2014-09-05 13:20:48 -0700 |
---|---|---|
committer | Li Haoyi <haoyi@dropbox.com> | 2014-09-05 13:20:48 -0700 |
commit | cf9b1e5dc81d4c3a30a26cb18e38f7db03460ef4 (patch) | |
tree | 8df706e2ebcbab222e898d30dea71fdef0b419ca /client/src/main/scala/workbench | |
parent | 020885615083203808a3ea7ab3181cedf9a48331 (diff) | |
download | workbench-cf9b1e5dc81d4c3a30a26cb18e38f7db03460ef4.tar.gz workbench-cf9b1e5dc81d4c3a30a26cb18e38f7db03460ef4.tar.bz2 workbench-cf9b1e5dc81d4c3a30a26cb18e38f7db03460ef4.zip |
Workbench is now pure-scala
Diffstat (limited to 'client/src/main/scala/workbench')
-rw-r--r-- | client/src/main/scala/workbench/WorkbenchClient.scala (renamed from client/src/main/scala/workbench/Main.scala) | 57 |
1 files changed, 35 insertions, 22 deletions
diff --git a/client/src/main/scala/workbench/Main.scala b/client/src/main/scala/workbench/WorkbenchClient.scala index 7f63da6..c67d4c6 100644 --- a/client/src/main/scala/workbench/Main.scala +++ b/client/src/main/scala/workbench/WorkbenchClient.scala @@ -3,7 +3,6 @@ import upickle._ import org.scalajs.dom import org.scalajs.dom.extensions._ import upickle.{Reader, Writer, Js} - import scala.scalajs.js import scala.scalajs.js.annotation.JSExport import scalajs.concurrent.JSExecutionContext.Implicits.runNow @@ -12,32 +11,47 @@ object WireServer extends autowire.Server[Js.Value, upickle.Reader, upickle.Writ 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]] - ) + val Js.Arr(path, args: Js.Obj) = parsed + + val req = new Request( + upickle.readJs[Seq[String]](path), + args.value.toMap ) + WireServer.route[Api](WorkbenchClient).apply(req) } } @JSExport -object Main extends Api{ +object WorkbenchClient extends Api{ + val shadowBody = dom.document.body.cloneNode(deep = true) + var interval = 1000 + var success = false + @JSExport 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) - () + Ajax.post(s"http://$host:$port/notifications").onComplete{ + case util.Success(data) => + if (!success) println("Workbench connected") + success = true + interval = 1000 + json.read(data.responseText) + .asInstanceOf[Js.Arr] + .value + .foreach(v => WireServer.wire(v.asInstanceOf[Js.Arr])) + main(bootSnippet, host, port) + case util.Failure(e) => + if (!success) println("Workbench disconnected " + e) + success = false + interval = math.min(interval * 2, 30000) + dom.setTimeout(() => main(bootSnippet, host, port), interval) } - rec() } - - override def clear(): Unit = ??? + override def clear(): Unit = { + dom.document.asInstanceOf[js.Dynamic].body = shadowBody.cloneNode(true) + for(i <- 0 until 100000){ + dom.clearTimeout(i) + dom.clearInterval(i) + } + } override def reload(): Unit = { dom.console.log("Reloading page...") @@ -49,16 +63,15 @@ object Main extends Api{ 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!") + dom.console.log("Post-run reboot") js.eval(bootSnippet) } loaded = true } + tag.asInstanceOf[js.Dynamic].onload = tag.onreadystatechange } dom.document.head.appendChild(tag) } |