我正在使用Scala开发Play framework 2.5.3和Akka 2.4.7。我有一个使用Akka在基于游戏的webSockets中创建的应用程序。我在另一个项目中将该项目用作jar。
我在新项目中的代码如下所示:
接受连接:
val postActor = actorSystem.actorOf(Props[PostActorClass])
def wsSocket = WebSocket.accept[JsValue,JsValue]{ request =>
ActorFlow.actorRef(out => wsConnObj.HandlerClass.props(out,postActor))
}
获取存储在我的jar项目中的所有连接的引用:
def getConnReferences:Set[ActorRef] = {
implicit val timeout = Timeout(5 seconds)
val future = postActor ? GetReferences
val result = Await.result(future, timeout.duration).asInstanceOf[Set[ActorRef]]
(result)
}
用于向所有引用发送消息:
def sendMsg = {
val msg = Json.parse("""{"username":"Server","message":"Reached finally.","pub_key":"empty","target":"user"}""")
val refs = getConnReferences
refs.foreach( _ ! msg)
}
我正在尝试在我的新项目HomeController
中使用这些方法。但是无法将它们组合在一起,例如wsSocket
应该执行,然后sendMsg
(它本身也会调用getConnReferences
)。
我将如何实现这一目标?如果用单一动作方法调用所有这些块,我甚至无法建立连接。
WebSocketConnect
类的代码:
class WebSocketConnect @Inject() (cache:CacheApi) (implicit actorSystem: ActorSystem,materializer: Materializer){
object HandlerClass {
homelogger.info(logMessages.passingActorRef)
def props(out: ActorRef, postActor: ActorRef) = {
Props(new SocketHandlerClass(out, postActor, cache, postActorToUsernameMap))
}
}
}