在Play中关闭WebSocket时获取ActorRef

时间:2017-10-24 13:54:43

标签: scala playframework websocket

根据Play framework documentation,我们可以选择覆盖postStop方法,但它没有ActorRef。我需要ActorRef,因为我使用ActorRef作为HashMap中的标识符,其中包含连接客户端的actor的映射:断开连接时,我想从{{1}中删除该映射}}

编辑: - 这里HashMap用作身份验证池。来自客户端的第一条消息用于身份验证,在验证时,ActorRef的实例被添加到HashMap。在以下事件/消息中,通过检查HashMap中是否存在ActorRef来验证授权,请查看以下代码: -

HashMap

1 个答案:

答案 0 :(得分:0)

我的愚蠢。

实际上,ActorRef已经在我的自定义Actor实现中提供了,我可以使用它。

class MyWebSocketActor(sh: HandleSocket, out: ActorRef) extends Actor {
  def receive = {
      case msg: String => {
        Json.fromJson[SocketParsedMessage](Json.parse(msg)) match {
          case s: JsSuccess[SocketParsedMessage] => {
            sh.HandleSocketMessages(out, s.get)
          }
          case _: JsError => {
            out ! PoisonPill
          }
        }
        // println(parsedMsg)
        // out ! (msg)
      }
  }

  override def postStop(): Unit = {
    // super.postStop()
    sh.clientDisconnected(out)
  }
}