76 lines
2.1 KiB
Scala
76 lines
2.1 KiB
Scala
package controllers
|
|
|
|
import play.api.mvc._
|
|
import views._
|
|
|
|
import lila.api.Context
|
|
import lila.app._
|
|
import lila.common.HTTPRequest
|
|
import lila.racer.RacerPlayer
|
|
import lila.racer.RacerRace
|
|
|
|
final class Racer(env: Env)(implicit mat: akka.stream.Materializer) extends LilaController(env) {
|
|
|
|
def home =
|
|
Open { implicit ctx =>
|
|
NoBot {
|
|
Ok(html.racer.home).fuccess
|
|
}
|
|
}
|
|
|
|
def create =
|
|
WithPlayerId { implicit ctx => playerId =>
|
|
env.racer.api.createAndJoin(playerId) map { raceId =>
|
|
Redirect(routes.Racer.show(raceId.value))
|
|
}
|
|
}
|
|
|
|
def show(id: String) =
|
|
WithPlayerId { implicit ctx => playerId =>
|
|
env.racer.api.get(RacerRace.Id(id)) match {
|
|
case None => Redirect(routes.Racer.home).fuccess
|
|
case Some(r) =>
|
|
val race = r.isLobby.??(env.racer.api.join(r.id, playerId)) | r
|
|
val player = race.player(playerId) | RacerPlayer.make(playerId)
|
|
Ok(
|
|
html.racer.show(
|
|
race,
|
|
env.racer.json.data(race, player),
|
|
env.storm.json.pref(ctx.pref)
|
|
)
|
|
).fuccess dmap NoCache
|
|
}
|
|
}
|
|
|
|
def rematch(id: String) =
|
|
WithPlayerId { implicit ctx => playerId =>
|
|
env.racer.api.get(RacerRace.Id(id)) match {
|
|
case None => Redirect(routes.Racer.home).fuccess
|
|
case Some(race) =>
|
|
env.racer.api.rematch(race, playerId) map { rematchId =>
|
|
Redirect(routes.Racer.show(rematchId.value))
|
|
}
|
|
}
|
|
}
|
|
|
|
def lobby =
|
|
WithPlayerId { implicit ctx => playerId =>
|
|
env.racer.lobby.join(playerId) map { raceId =>
|
|
Redirect(routes.Racer.show(raceId.value))
|
|
}
|
|
}
|
|
|
|
private def WithPlayerId(f: Context => RacerPlayer.Id => Fu[Result]): Action[Unit] =
|
|
Open { implicit ctx =>
|
|
NoBot {
|
|
HTTPRequest sid ctx.req map { env.racer.api.playerId(_, ctx.me) } match {
|
|
case Some(id) => f(ctx)(id)
|
|
case None =>
|
|
env.lilaCookie.ensureAndGet(ctx.req) { sid =>
|
|
f(ctx)(env.racer.api.playerId(sid, none))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|