Scala Lift - Comet actor初始化消息

时间:2011-11-01 16:12:40

标签: scala comet lift

我有以下彗星演员:

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。

这是正确的做事方式吗?如果是这样我将如何去做呢?

提前感谢您的帮助,非常感谢:)

3 个答案:

答案 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 exampleon the Lift wiki,其中显示了如何使用代码段为Comet Actors分配名称。

答案 2 :(得分:0)

一般来说,要初始化CometActors,请查看CometActor中S.param上的my answer。话虽如此,戴夫和泰勒的答案似乎更适合你想做的事。