Nach der Play framework documentation haben wir die Möglichkeit, die postStop
Methode zu überschreiben, aber es hat keine ActorRef
. Ich brauche ein ActorRef
, weil ich ActorRef
als ein Bezeichner in einem HashMap
benutze, der die Zuordnungen der Akteure zu verbundenen Klienten enthält: auf trennen, möchte ich dieses Mapping von der HashMap
entfernen.Abrufen eines ActorRef, wenn ein WebSocket in Play geschlossen wird
Edit: - Hier HashMap
Werke als Authentifizierungs pool.The erste Nachricht vom Client für die Authentifizierung ist, und auf die Validierung der Instanz von ActorRef hinzugefügt HashMap
. Auf den folgenden Veranstaltungen/messages Genehmigung durch die Überprüfung der Existenz von ActorRef
in HashMap
, haben einen Blick auf den folgenden Code verifiziert: -
def authenticate(actorRef: ActorRef, message: SocketParsedMessage) {
(message.data \ "token").validate[String] match {
case s: JsSuccess[String] => {
val token = jwt.parse(s.get)
if (jwt.verify(token,jwtSecret)) {
val userId = UUID.fromString(jwt.getSubject(token))
hashMapU2A += (UUID.fromString(jwt.getSubject(token)) -> actorRef)
hashMapA2U += (actorRef -> userId)
actorRef ! SocketParsedMessage(AllowedSocketMessageTypes.AUTHENTICATE, Json.obj(
"success" -> true, "message" -> "Authorized for making further requests request")).toString
publishUserStatus(userId)
} else {
actorRef ! SocketParsedMessage(AllowedSocketMessageTypes.AUTHENTICATE, JsObject(
Seq("success" -> JsBoolean(false), "message" -> JsString("Invalid token"))
)).toString
}
}
case e: JsError => {
actorRef ! SocketParsedMessage(AllowedSocketMessageTypes.AUTHENTICATE, Json.obj(
"success" -> false, "message" -> "Token not supplied with request")).toString
actorRef ! PoisonPill
}
}
}
val hashMapA2U: mutable.HashMap[ActorRef, UUID] = mutable.HashMap()
Der Subscriber-Actor stirbt bei einer onClose-Aktion. Du wirst nicht mehr darauf zugreifen können. Was versuchst du zu tun? –
@Robertudah Ich habe einen Websocket basierten Benutzer online/offline Tracker implementiert. Und ich benutze actorRef in HashMap zum Abrufen der Benutzer-ID des Clients verbunden. –
Sie können Ihre '' 'HashMap [ActorRef, UUID]' '' nicht zu '' 'HashMap [String, ActorRef']' ''? – alifirat