summaryrefslogtreecommitdiff
path: root/cask/util/src-js/cask/util/WebsocketClientImpl.scala
blob: 29ebfa71ff98d1d72ba13a3de765cae764136c55 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package cask.util

import org.scalajs.dom

abstract class WebsocketClientImpl(url: String) extends WebsocketBase{
  var websocket: dom.WebSocket = null
  var closed = false
  def connect(): Unit = {
    websocket = new dom.WebSocket(url)
    assert(closed == false)
    websocket.onopen = (e: dom.Event) => onOpen()
    websocket.onmessage = (e: dom.MessageEvent) => onMessage(e.data.asInstanceOf[String])
    websocket.onclose = (e: dom.CloseEvent) => {
      closed = true
      onClose(e.code, e.reason)
    }
    websocket.onerror = (e: dom.Event) => onError(new Exception(e.toString))
  }
  def onOpen(): Unit

  def send(value: String) = try {
    websocket.send(value)
    true
  } catch{case e: scala.scalajs.js.JavaScriptException => false}


  def send(value: Array[Byte]) = ???
  def onError(ex: Exception): Unit
  def onMessage(value: String): Unit
  def onClose(code: Int, reason: String): Unit
  def close(): Unit = {
    if (!closed) websocket.close()
  }
  def isClosed() = closed
}