最近我在Vue项目中实施了Pusher ChatKit。
我已经过了js documentation,但我对启动应用程序的流程感到困惑,因此我有新的消息的主动侦听器。
我有5个currentUser
所属的房间。
当我这样做时
chatManager
.connect()
.then(currentUser => {
})
我获得了当前用户,我可以访问他的rooms
和roomSubscriptions
。
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)这就引出了一个问题,订阅用户房间的正确流程是什么,用户已经参与其中以及如何检测新消息和新房间创建(当有人开始与您聊天时)?
文档非常简化,无法实现真实案例。有人有这方面的经验吗?
谢谢!
答案 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
});