72 lines
1.7 KiB
Scala
72 lines
1.7 KiB
Scala
package net.okennedy.cells
|
|
|
|
import scala.io.Source
|
|
import play.api.libs.json._
|
|
|
|
object CellsServer extends cask.MainRoutes
|
|
{
|
|
|
|
var layout = new state.Canvas()
|
|
layout.addTable()
|
|
|
|
def serveResource(path: String, headers: (String,String)*): cask.Response[String] =
|
|
{
|
|
val resource =
|
|
Source.fromInputStream(
|
|
this.getClass().getClassLoader().getResourceAsStream(path)
|
|
).getLines.mkString
|
|
|
|
cask.Response.apply(
|
|
resource,
|
|
headers = headers
|
|
)
|
|
}
|
|
|
|
@cask.get("/")
|
|
def index(request: cask.Request) =
|
|
serveResource("app/index.html", "Content-Type" -> "text/html")
|
|
|
|
@cask.get("/cells.js")
|
|
def app(request: cask.Request) =
|
|
serveResource("app/cells.js", "Content-Type" -> "application/javascript")
|
|
|
|
@cask.get("/cells.css")
|
|
def css(request: cask.Request) =
|
|
serveResource("app/cells.css", "Content-Type" -> "text/css")
|
|
|
|
@cask.get("/out.js.map")
|
|
def appMap(request: cask.Request) =
|
|
serveResource("app/out.js.map", "Content-Type" -> "application/javascript")
|
|
|
|
@cask.websocket("/ws")
|
|
def websocket(): cask.WebsocketResult =
|
|
{
|
|
|
|
cask.WsHandler { channel =>
|
|
def send(msg: WebsocketResponse): Unit =
|
|
{
|
|
channel.send(
|
|
cask.Ws.Text(
|
|
Json.toJson(msg).toString
|
|
)
|
|
)
|
|
|
|
}
|
|
cask.WsActor {
|
|
case cask.Ws.Text(data) =>
|
|
Json.parse(data).as[WebsocketRequest] match {
|
|
case WebsocketHello(_) =>
|
|
for(table <- layout.tables.values)
|
|
{
|
|
send(AddTable(table.serialize))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@cask.staticResources("/app")
|
|
def staticResourceRoutes() = "app"
|
|
|
|
initialize()
|
|
} |