Scala 有可能接受WebSocket.acceptOrResult起作用的密封特征吗!斯卡拉
我想用一种类型的WebSocket玩!斯卡拉 我希望Scala 有可能接受WebSocket.acceptOrResult起作用的密封特征吗!斯卡拉,scala,playframework,websocket,Scala,Playframework,Websocket,我想用一种类型的WebSocket玩!斯卡拉 我希望WebSocket.acceptOrResult接受以下命令: case class Message(msg: String) case class CommandA(c: String) 等等 我可以用 WebSocket.acceptOrResult[JsValue, JsValue] 然后尝试按顺序将它们转换为不同的case类(命令),但我发现这很难看 如果可能的话,一个更好的方法是使用一个封闭的特征 ChatEvent并扩展命令类,
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]
问题是ChatEvent
的格式导致类扩展ChatEvent
,而acceptOrResult
正在等待ChatEvent
也许解决办法是使用以下方法:
def openClientSocket = WebSocket.acceptOrResult[_ :< ChatEvent, _ :< ChatEvent]
def openClientSocket=WebSocket.acceptOrResult[\u:
但我不知道如何让它编译