Pusher ChatKit - 房间和房间订阅 - 如何检测新消息

时间:2018-06-07 05:23:19

标签: vue.js chat pusher chatkit

最近我在Vue项目中实施了Pusher ChatKit

我已经过了js documentation,但我对启动应用程序的流程感到困惑,因此我有新的消息的主动侦听器。

我有5个currentUser所属的房间。

当我这样做时

chatManager
    .connect()
    .then(currentUser => {
    })

我获得了当前用户,我可以访问他的roomsroomSubscriptions

1)有什么区别?用户所属的任何房间也应该是他订阅的房间,不是吗?

文档说我需要订阅每个用户房间才能设置onNewMessage()挂钩。

所以我这样做了:

chatManager
    .connect()
    .then(currentUser => {
      this.initiateNewChatState(currentUser)
    })

initiateNewChatState(currentUser){
    for(let room of currentUser.rooms){
      currentUser.subscribeToRoom({
         roomId: room.id,
         hooks: {
         onNewMessage: message => {
          console.log(`Received new message ${message.text}`)
          this.$store.commit('CHATKIT_message', message)
         }
       },
       messageLimit: 10
     })
  }
}

2)但是现在当我只收到一个房间的新消息时,每个房间挂钩都会触发挂钩(5次)。

现在,一旦我完成了订阅循环,我下次运行chatManager.connect()时就不需要这样做了因为currentUser.roomSubscriptions已经填满了我最后一次订阅的房间在调用this.initiateNewChatState()之前。

3)这就引出了一个问题,订阅用户房间的正确流程是什么,用户已经参与其中以及如何检测新消息和新房间创建(当有人开始与您聊天时)?

文档非常简化,无法实现真实案例。有人有这方面的经验吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

不幸的是,这是目前唯一的方法。在Pusher ChatKit中,每个操作都取决于当前用户和该用户对房间的订阅。用户不一定是其成员的房间。 它既有优点也有缺点。 但是现在我可以说,您只需设置messageLimit: 0即可。首次加载页面时,这不会获取所有消息。 当用户单击房间以查看消息时,可以使用以下方法来获取消息:

           currentUser.subscribeToRoom({
                roomId: room.id,
                hooks: {
                    onNewMessage: (message) => {
                        // do something with the message
                    },
                    onUserStartedTyping : (user) => {
                        // do something with the user
                    },
                    onUserStoppedTyping : (user) => {
                        // do something with the user
                    },
                },
                messageLimit: 10
            });