Skip to content

Instantly share code, notes, and snippets.

implicit val gameEventFormat = Json.format[GameEvent]
implicit val gameEventFrameFormatter = FrameFormatter.jsonFrame[GameEvent]
case class GameEvent(gameId: String, eventType: String, data: JsValue)
class WebsocketEventPublisher(gameId: String, out: ActorRef)
extends Actor
with ActorLogging
with ImplicitFlowMaterializer {
import context.dispatcher
override def preStart() = {
import Global.connection
import Config.Events._
def gameEvents(gameId: String) = WebSocket.acceptWithActor[String, GameEvent] { request => out =>
WebsocketEventPublisher.props(gameId, out)
}
def createGame() = Action.async { request =>
WS.url(s"$apiUrl/game")
.post("")
.map {
case res if res.status == CREATED => Created(res.body)
case _ => InternalServerError
}
.recover { case _ => InternalServerError }
}
POST /game controllers.MainController.createGame
POST /game/:gameId/start controllers.MainController.startGame(gameId: String, playersCount: Int)
POST /game/:gameId/roll/:playerId controllers.MainController.roll(gameId: String, playerId: String)
GET /:gameId/events controllers.MainController.gameEvents(gameId: String)
// other routes: static resources, main page