57 lines
1.2 KiB
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)
|
|
}
|
|
}
|
|
} |