Pusher ChatKit - комнаты и комнаты Подписки - как обнаружить новые сообщения - PullRequest
0 голосов
/ 07 июня 2018

Недавно я реализовал 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 Ответ

0 голосов
/ 30 сентября 2018

К сожалению, сейчас это единственный путь.В 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
            });
...