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
            });
Другие вопросы по тегам