Pusher ChatKit - комнаты и комнаты подписки - как обнаружить новые сообщения
Недавно я реализовал Pusher ChatKit в своем проекте Vue.
Я просмотрел документацию по js, но запутался в процессе запуска приложения, чтобы у меня были активные прослушиватели новых сообщений.
У меня есть 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) Возникает вопрос: каков правильный порядок подписки на комнаты пользователей, частью которых пользователь уже является, и как обнаруживать новые сообщения и создания новых комнат (когда кто-то начинает общаться с вами)?
Документация действительно упрощена и не может быть реализована в реальных случаях. У кого-нибудь есть опыт в этом?
Спасибо!
1 ответ
К сожалению, это единственный путь прямо сейчас. В 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
});