diff options
author | Jakob Odersky <jakob@odersky.com> | 2016-11-13 17:51:34 -0800 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2016-11-13 17:51:34 -0800 |
commit | 1a0b4bd23ac1b49ddb2f2bbbaf0dde1f9156be18 (patch) | |
tree | 62d8bd2f8842e18ffc14dd22dbb08db901df12fc /client | |
parent | 7efed1380f6a6cfc8d0b95015f1fa167b4a7bc23 (diff) | |
download | play-scalajs-chat-1a0b4bd23ac1b49ddb2f2bbbaf0dde1f9156be18.tar.gz play-scalajs-chat-1a0b4bd23ac1b49ddb2f2bbbaf0dde1f9156be18.tar.bz2 play-scalajs-chat-1a0b4bd23ac1b49ddb2f2bbbaf0dde1f9156be18.zip |
Implement basic frontend
Diffstat (limited to 'client')
-rw-r--r-- | client/src/main/scala/chat/Main.scala | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/client/src/main/scala/chat/Main.scala b/client/src/main/scala/chat/Main.scala index dbc2876..ba41355 100644 --- a/client/src/main/scala/chat/Main.scala +++ b/client/src/main/scala/chat/Main.scala @@ -1,22 +1,52 @@ package chat +import org.scalajs.dom.raw.KeyboardEvent import scala.scalajs.concurrent.JSExecutionContext.Implicits.queue import scala.scalajs.js import org.scalajs.dom import org.scalajs.dom.raw.MessageEvent +import scala.scalajs.js.annotation.JSExport import upickle.default._ +import scalatags.JsDom.all._ -object Main extends js.JSApp { - def main(): Unit = { +@JSExport +object Main { + + @JSExport + def main(uid: String): Unit = { val root = dom.document.getElementById("root") - val sock = new dom.WebSocket("ws://localhost:9000/socket/john") + while (root.firstChild != null) { + root.removeChild(root.firstChild); + } + + val history = textarea().render + val compose = input().render + root.appendChild(history) + root.appendChild(compose) + val sock = new dom.WebSocket("ws://localhost:9000/socket/" + uid) sock.onmessage = (msg: MessageEvent) => { val event = read[Event](msg.data.asInstanceOf[String]) - dom.console.log(event.toString()) + event match { + case Joined(uid) => + history.textContent += s"**$uid joined**\n" + case Message(uid, content) => + history.textContent += s"$uid: $content\n" + case _ => + dom.console.log(s"unhandled event: $event") + } } + + compose.onkeypress = (ev: KeyboardEvent) => { + if (ev.key == "Enter") { + val msg = Broadcast(compose.value) + dom.console.log(s"Sending $msg") + sock.send(write(msg)) + } + } + } } |