Play 2.3 - 从异步更改为 WebSocket.tryAccept
Play 2.3 - Changing to WebSocket.tryAccept from async
我是 Scala 的新手,所以我认为这可能是一个非常小的问题。
我目前正在尝试将方法 chat
从使用已弃用的 WebSocket.async
更改为 WebSocket.tryAccept
。该应用程序使用 PlayFramework websocket-chat
中的示例聊天
我在创建该方法所需的复杂 Future
类型时遇到问题。
这是旧方法:
def chat() = WebSocket.async[JsValue] {
request =>
ChatRoom.join("User: 1")
}
新方法:
def chat2() = WebSocket.tryAccept[JsValue] {
request =>
try {
// ChatRoom.join returns (iteratee,enumerator)
ChatRoom.join("User: 1").map(e => Right(e))
} catch {
case e: Exception =>
Left(Ok("Failed")) // Error here
}
}
我的错误信息:
found : Left[Result,Nothing]
required: Future[Either[Result,(Iteratee[JsValue, _], Enumerator[JsValue])]]
我不知道我应该如何为如此简单的消息创建如此复杂的结果。
虽然 ChatRoom.join("User: 1").map(e => Right(e))
现在没有显示任何错误,但我不确定这是否是正确的实现。
我现在不在 IDE 前面,所以我不能完全回答,但是它要求的 return 类型并不像看起来那么复杂。 "Either" 是 "Left" 或 "Right",就像 "Option" 是 "Some" 或 "None" 一样。所以它要求的是一个 Future(Websocket.async 也应该需要),它包含一个 Left[Result] —— 连接失败的情况,或者一个 Right[(Iteratee, Enumerator)] ——成功案例。假设 Chatroom.join return 是一个 Future[(Iteratee, Enumerator)],映射操作只是将其包装在 "Right" 中。我要尝试的第一件事是将 Left(Ok("Failed")) 包装在 Future 中,看看会发生什么。
我是 Scala 的新手,所以我认为这可能是一个非常小的问题。
我目前正在尝试将方法 chat
从使用已弃用的 WebSocket.async
更改为 WebSocket.tryAccept
。该应用程序使用 PlayFramework websocket-chat
我在创建该方法所需的复杂 Future
类型时遇到问题。
这是旧方法:
def chat() = WebSocket.async[JsValue] {
request =>
ChatRoom.join("User: 1")
}
新方法:
def chat2() = WebSocket.tryAccept[JsValue] {
request =>
try {
// ChatRoom.join returns (iteratee,enumerator)
ChatRoom.join("User: 1").map(e => Right(e))
} catch {
case e: Exception =>
Left(Ok("Failed")) // Error here
}
}
我的错误信息:
found : Left[Result,Nothing]
required: Future[Either[Result,(Iteratee[JsValue, _], Enumerator[JsValue])]]
我不知道我应该如何为如此简单的消息创建如此复杂的结果。
虽然 ChatRoom.join("User: 1").map(e => Right(e))
现在没有显示任何错误,但我不确定这是否是正确的实现。
我现在不在 IDE 前面,所以我不能完全回答,但是它要求的 return 类型并不像看起来那么复杂。 "Either" 是 "Left" 或 "Right",就像 "Option" 是 "Some" 或 "None" 一样。所以它要求的是一个 Future(Websocket.async 也应该需要),它包含一个 Left[Result] —— 连接失败的情况,或者一个 Right[(Iteratee, Enumerator)] ——成功案例。假设 Chatroom.join return 是一个 Future[(Iteratee, Enumerator)],映射操作只是将其包装在 "Right" 中。我要尝试的第一件事是将 Left(Ok("Failed")) 包装在 Future 中,看看会发生什么。