Cells/cells/ui/src/net/okennedy/cells/network/Connection.scala

57 lines
1.2 KiB
Scala

package net.okennedy.cells.network
import org.scalajs.dom
import play.api.libs.json._
import net.okennedy.cells.WebsocketRequest
import net.okennedy.cells.WebsocketResponse
import net.okennedy.cells.WebsocketHello
import net.okennedy.cells.CanvasOp
import net.okennedy.cells.sheet
class Connection(url: String)
{
val canvas = new sheet.Canvas()
var socket = getSocket()
protected[network] def getSocket(): dom.WebSocket =
{
val s = new dom.WebSocket(url)
s.onopen = onConnected(_)
s.onclose = onClosed(_)
s.onerror = onError(_)
s.onmessage = onMessage(_)
// keepaliveTimer = setInterval(20000) { keepalive(s) }
s
}
def send(msg: WebsocketRequest): Unit =
{
socket.send(Json.toJson(msg).toString)
}
def onConnected(event: dom.Event): Unit =
{
println("Connected")
send(WebsocketHello("itsame"))
}
def onClosed(event: dom.Event): Unit =
{
println("Closed")
}
def onError(event: dom.Event): Unit =
{
println("Error!")
}
def onMessage(message: dom.MessageEvent): Unit =
{
// println(s"Received: ${message.data.toString.take(200)}")
val request = Json.parse(message.data.toString).as[WebsocketResponse]
request match {
case x:CanvasOp => canvas.process(x)
}
}
}