小编典典

SCALA Lift-Comet Actor中的S.param访问

ajax

我正在尝试在CometActor中检索url参数,以验证数据源是否与目的地匹配,例如,某个用户从A室发送一条消息,该消息仅在A室而不是B室或C室中接收和显示。

我试过了:

S.param("message").openOr("")

但是它总是空的,可以做到吗?还是有另一种方法可以阻止Comet消息到达不应该去的地方?

在此先感谢您的帮助,非常感谢:)


阅读 227

收藏
2020-07-26

共1个答案

小编典典

CometActor存在于会话之外,因此无权访问(大部分)会话。解决方案是使用包含所需会话数据的初始化消息来初始化参与者。也许在LiftRules中有某种帮助者可以做到这一点。我正在用手机打电话,并从记忆中重新叙述了这一点,但希望它能继续进行下去。

具体来说,您将要执行以下操作:

for (
  session <- S.session
  message <- S.param("message")
) {
  session.setupComet("myCometActor", Some("unique name, if you want it"), message)
}

在你的Boot.scala

查看LiftSession更多。我认为可能有一种方法可以LiftRules让创建会话时调用相关代码…

更新: 如果我们发送包含以下内容的案例类,这就是您的CometActor的外观:

// ...
session.setupComet(
  "myCometActor",
  Some("unique name, if you want it"),
  Message(message)
)
// ...
case class Message(text: String)

class CometMessage extends CometActor { 
  override def lowPriority = {
    case Message(text) => {
      // do something here with the text, whether settings a SessionVar or even just a plain var
    }
  }
}
2020-07-26