无法在Play框架和Akka中的一个块中调用所有方法

时间:2016-07-06 09:50:53

标签: scala playframework websocket akka

我正在使用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))

    }

  }

}

0 个答案:

没有答案