我有以下彗星演员:
class ChatComet extends CometActor with CometListener {
private var messages: List[ChatItem] = Nil
def registerWith = ChatServer
override def lowPriority = {
case v: List[ChatItem] =>
messages = v;
reRender()
}
def render = {
"li *" #> messages.map(message =>
".name *" #> message.name &
".text *" #> message.value
)
}
在各个房间分发消息,我没有的是限制哪些消息最终到达哪里的方式,因此来自RoomA的消息最终在RoomA中而不是在RoomB中。
我听说你可以用某种消息初始化彗星演员,在我的情况下可以作为房间ID。
这是正确的做事方式吗?如果是这样我将如何去做呢?
提前感谢您的帮助,非常感谢:)
答案 0 :(得分:1)
在模板中,命名彗星演员,如下所示:
<div class="l:comet?type=CometActor;name=roomA"> stuff </div>
在你的CometActor中,然后匹配名称,如下:
def lowpriority = {
case NewComment(room, msg) => {
name.map(x => x match {
case "roomA" => {
stuff
}
}
}
现在,您可能没有像“roomA”这样的明确名称,但您可以保留房间名称列表,然后只需匹配它们。
答案 1 :(得分:0)
将您的Comet Actors名称与聊天室相关联。然后每个房间将建造一个新的Actor。您不需要在演员本身中进行任何特殊处理;除非您想要具有特殊功能,具体取决于房间。
您可以看到引用a nice example的on the Lift wiki,其中显示了如何使用代码段为Comet Actors分配名称。
答案 2 :(得分:0)
一般来说,要初始化CometActors,请查看CometActor中S.param
上的my answer。话虽如此,戴夫和泰勒的答案似乎更适合你想做的事。