Application.scala 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package controllers
  2. import play.api._
  3. import play.api.mvc._
  4. import play.api.libs.json._
  5. import play.api.libs.iteratee._
  6. import models._
  7. import akka.actor._
  8. import scala.concurrent.duration._
  9. object Application extends Controller {
  10. /**
  11. * Just display the home page.
  12. */
  13. def index = Action { implicit request =>
  14. Ok(views.html.chatRoomNg())
  15. }
  16. /**
  17. * Display the chat room page.
  18. */
  19. def chatRoom(username: Option[String]) = Action { implicit request =>
  20. username.filterNot(_.isEmpty).map { username =>
  21. Ok(views.html.chatRoom(username))
  22. }.getOrElse {
  23. Redirect(routes.Application.index).flashing(
  24. "error" -> "Please choose a valid username."
  25. )
  26. }
  27. }
  28. def chatRoomJs(username: String) = Action { implicit request =>
  29. Ok(views.js.chatRoom(username))
  30. }
  31. /**
  32. * Handles the chat websocket.
  33. */
  34. def chat(username: String) = WebSocket.async[JsValue] { request =>
  35. ChatRoom.join(username)
  36. }
  37. val routeCache = {
  38. import routes._
  39. val jsRoutesClass = classOf[routes.javascript]
  40. val controllers = jsRoutesClass.getFields().map(_.get(null))
  41. controllers.flatMap { controller =>
  42. controller.getClass().getDeclaredMethods().map { action =>
  43. action.invoke(controller).asInstanceOf[play.core.Router.JavascriptReverseRoute]
  44. }
  45. }
  46. }
  47. def javascriptRoutes = Action { implicit request =>
  48. Ok(Routes.javascriptRouter("jsRoutes")(routeCache:_*)).as("text/javascript")
  49. }
  50. }