案例与预期不符

时间:2015-03-15 23:08:10

标签: json playframework websocket akka

我试图在我的应用程序中实现一个对WebSocket消息做出反应的actor,我开始尝试Anonymou Chat demo application中的代码。

// UserActor.scala 
def receive = LoggingReceive {
  case Message(muid, s) if sender == board =>
    val js = Json.obj("type" -> "message", "uid" -> muid, "msg" -> s)
    out ! js
  case js: JsValue =>
    (js \ "msg").validate[String] map { Utility.escape(_) } foreach { board ! Message(uid, _ ) }
  case other =>
    log.error("unhandled: " + other)
}

问题在于,当我发送消息时,它最终会出现在other案例中。

[ERROR] [...] [...] [...] unhandled: {"msg":"user-moved"}

相反,它应该被处理为JsValue。当我运行原始示例应用程序时,即使它是相同的代码,它仍然有效。

我注意到另一个不同之处可能是问题所在。此代码(来自上面的示例):

case Message(muid, s) if sender == board =>
  val js = Json.obj("type" -> "message", "uid" -> muid, "msg" -> s)
  out ! js

在示例应用程序中工作,但在我的应用程序中不起作用。为了使它在我的应用程序中工作,我必须使js成为一个字符串:

case Message(muid, s) if sender == board =>
  val js = Json.obj("type" -> "message", "uid" -> muid, "msg" -> s)
  out ! js.toString

我使用Play 2.3.8和sbt 0.13 UserActor.scala:https://github.com/anhminh1981/anonymous_chat/blob/master/app/actors/UserActor.scala

0 个答案:

没有答案