diff options
Diffstat (limited to 'server/app/controllers/HomeController.scala')
-rw-r--r-- | server/app/controllers/HomeController.scala | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/server/app/controllers/HomeController.scala b/server/app/controllers/HomeController.scala index 13bc8dc..4d48c98 100644 --- a/server/app/controllers/HomeController.scala +++ b/server/app/controllers/HomeController.scala @@ -1,14 +1,24 @@ package controllers -import play.api._ +import akka.actor.{ActorRef, ActorSystem, Props} +import akka.stream.Materializer +import chat._ +import javax.inject._ +import play.api.libs.streams.ActorFlow import play.api.mvc._ +import play.api.mvc.WebSocket.MessageFlowTransformer import upickle.default._ /** * This controller creates an `Action` to handle HTTP requests to the * application's home page. */ -class HomeController extends Controller { +class HomeController @Inject() ( + implicit system: ActorSystem, + mat: Materializer +) extends Controller { + + lazy val room: ActorRef = system.actorOf(Props(classOf[RoomActor])) /** * Create an Action to render an HTML page. @@ -21,8 +31,13 @@ class HomeController extends Controller { Ok(views.html.index()) } - def message = Action { implicit request => - Ok(write(chat.Message("hello"))) + def socket(uid: String) = WebSocket.accept[Command, Event] { request => + ActorFlow.actorRef(out => Props(classOf[ClientActor], uid, room, out)) } + implicit val transformer = MessageFlowTransformer.stringMessageFlowTransformer.map( + in => read[Command](in), + (out: Event) => write(out) + ) + } |