Cells/cells/server/src/net/okennedy/cells/CellsServer.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()
}