diff options
author | Li Haoyi <haoyi@dropbox.com> | 2014-09-03 23:06:31 -0700 |
---|---|---|
committer | Li Haoyi <haoyi@dropbox.com> | 2014-09-03 23:06:31 -0700 |
commit | 2f96da023d9172deb646de9bd1cf0a05c4201df7 (patch) | |
tree | 8636cf8853fe0a8621587e4a9870230545f89f9c /client | |
parent | 424cc28d19f7e23cab6af9795a6c6a5c4adf5e3c (diff) | |
download | workbench-2f96da023d9172deb646de9bd1cf0a05c4201df7.tar.gz workbench-2f96da023d9172deb646de9bd1cf0a05c4201df7.tar.bz2 workbench-2f96da023d9172deb646de9bd1cf0a05c4201df7.zip |
lols
Diffstat (limited to 'client')
-rw-r--r-- | client/src/main/scala/workbench/Main.scala | 76 |
1 files changed, 70 insertions, 6 deletions
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 |