是否可以在Play中接受带有WebSocket.acceptOrResult的密封特性!斯卡拉

时间:2016-12-06 11:31:53

标签: scala playframework websocket

我想使用一种带Play的WebSocket类型!阶。

我希望WebSocket.acceptOrResult接受一些命令,如:

case class Message(msg: String)
case class CommandA(c: String)

等。

我可以用

WebSocket.acceptOrResult[JsValue, JsValue]

并尝试按顺序将它们转换为不同的case类(命令),但我发现它很难看。

如果可能的话,更好的方法是使用密封特性

ChatEvent并扩展命令类,即

case class Message(msg: String) extends ChatEvent
case class CommandA(c: String) extends ChatEvent

但如果我按照以下方式使用它,则不接受命令:

  implicit val acommandFlowTransformer =
    MessageFlowTransformer.jsonMessageFlowTransformer[ChatEvent, ChatEvent]

  def openSocket = WebSocket.acceptOrResult[ChatEvent, ChatEvent]

我用过

import julienrf.json.derived
implicit val chatEventMessage: Format[ChatEvent] = derived.oformat[ChatEvent]

允许我这样做:

Json.toJson(CommandA("aaa")).validate[ChatEvent] ---> JsSuccess[CommandA]

IMO的问题是,ChatEvent的格式导致扩展ChatEvent的类和acceptOrResult正在等待ChatEvent

也许解决方案是使用类似的东西:

def openClientSocket = WebSocket.acceptOrResult[_ :< ChatEvent, _ :< ChatEvent]

但是我找不到如何编译它。

0 个答案:

没有答案