Я смотрю на пример на https://github.com/playframework/Play20/tree/master/samples/scala/websocket-chat
Чтобы создать контроллер веб-сокета, вы пишете что-то вроде:
def chat(username: String) = WebSocket.async[JsValue] { request =>
ChatRoom.join(username)
}
Chatroom.join возвращает scala.concurrent.Future [(Iteratee [JsValue, _], Enumerator [JsValue])]. Но где же итератор и перечислитель, используемые в Play! рамки? Класс WebSocket (WebSocket.scala), похоже, игнорирует входные данные:
case class WebSocket[A](f: RequestHeader => (Enumerator[A], Iteratee[A, Unit]) => Unit) (implicit val frameFormatter: WebSocket.FrameFormatter[A]) extends Handler {
type FRAMES_TYPE = A
/**
* Returns itself, for better support in the routes file.
*
* @return itself
*/
def apply() = this
}
Как играть! управлять изменяющимся состоянием итератора, когда он потребляет ввод?