Это хорошая идея, чтобы иметь более одного кометного актера на странице?
В настоящее время у меня есть простое окно чата, такое как в документах Lift, и простой обработчик потока веб-камеры.
У меня возникают блокировки, когда оба активированы, например, я набираю сообщение в чате, все хорошо, но когда я запускаю камеру, окно чата больше не работает.
Какова наилучшая практика для такого рода установки? Я хочу, чтобы на странице было больше двух страниц, но мне было интересно, будет ли лучше иметь одного актера, который отправляет результаты на страницу как для чата, так и для потоков и т. Д.
Код размещен ниже:
ЧАТ
case class ChatMessage(name: String, text: String)
class ChatComet extends CometActor with CometListener {
private var messages: List[ChatMessage] = Nil
def registerWith = ChatServer
override def lowPriority = {
case v: List[ChatMessage] => messages = v; reRender()
}
def render = {
"li *" #> messages.map(message =>
".name *" #> message.name &
".text *" #> message.text
)
}
}
object ChatServer extends LiftActor with ListenerManager {
private var messages: List[ChatMessage] = Nil
def createUpdate = messages
override def lowPriority = {
case message: String if message.length > 0 =>
messages :+= ChatMessage("Anon", message);
updateListeners()
}
}
STREAM (веб-камера)
case class StreamItem(name: String, path: String, level: String)
class StreamComet extends CometActor with CometListener {
private var streams: List[StreamItem] = Nil
def registerWith = StreamServer
override def lowPriority = {
case v: List[StreamItem] =>
streams = v;
reRender();
partialUpdate(Call("STREAMMOD.stream_view.add_stream({ path : '" + streams.reverse(0).path + "', level : '_1'})"));
}
def render = {
"li *" #> streams.map(stream =>
".name *" #> stream.name.toString &
".stream [id]" #> stream.path.toString
)
}
}
object StreamServer extends LiftActor with ListenerManager {
private var streams: List[StreamItem] = Nil
def createUpdate = streams
override def lowPriority = {
case stream: String if stream.length > 0 =>
streams :+= StreamItem("James", stream, "_1");
updateListeners()
}
}