我試圖檢索一個CometActor內的url參數,以驗證數據的來源與目的地相匹配,例如,用戶從房間A發送消息,應該是隻有在一個房間接收並顯示,而不是B或C.SCALA電梯 - 彗星內S.param訪問演員
我已經試過:
S.param("message").openOr("")
但它總是空的,可以這樣做?還是有另一種方法可以阻止Comet消息走向他們不應該去的地方?提前任何幫助
謝謝,非常感謝:)
我試圖檢索一個CometActor內的url參數,以驗證數據的來源與目的地相匹配,例如,用戶從房間A發送消息,應該是隻有在一個房間接收並顯示,而不是B或C.SCALA電梯 - 彗星內S.param訪問演員
我已經試過:
S.param("message").openOr("")
但它總是空的,可以這樣做?還是有另一種方法可以阻止Comet消息走向他們不應該去的地方?提前任何幫助
謝謝,非常感謝:)
CometActors會話之外存在,因此不必訪問(大部分)它。解決方案是使用包含所需會話數據的初始化消息初始化actor。在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
}
}
}
CometActors HTTP請求/響應循環的外存在。這意味着在CometActor中處理消息的過程中,您不會看到Req,因爲Req從未作爲消息處理的一部分提供給Req。
相反,一些在此線程的帖子時,S上下文是可作爲是SessionVars(但不是RequestVars因爲CometActor是一個請求的範圍的外部)。
(...)
最好的辦法是創建一個SessionVar(或幾個SessionVars)持有的主機和端口。從片段中設置這些SessionVars(如果它們尚未設置)。然後從您的CometActors訪問SessionVars。
這是一種可能的選擇。但是,我個人的偏好是使用NamedCometActorSnippet
插入彗星頁面,並立即將消息發送到創建彗星:所以我用你的方法通過加載所有的彗星演員該網頁摘錄在這裏
class MyCometSnippet extends NamedCometActorSnippet {
val cometClass = "MyComet"
val name = "MyComet-instance"
for {
liftSession <- S.session
processingMode <- S.param("message")
} yield {
liftSession.sendCometActorMessage(cometClass, Full(name), SetMessageValue(message))
}
}
好吧。我現在需要知道的是如何從彗星演員中訪問這些消息。謝謝 – jhdevuk
您在其中一個消息處理程序中收到它們,如'lowPriority'。 – pr1001
您可以給出一個基本示例,例如所謂的方法,例如S.param(「room」),其中「room」等於傳遞的參數。再次感謝 – jhdevuk