Повторно подключите и отключите изящно к / от канала чата - PullRequest
1 голос
/ 10 марта 2019

Рассмотрим следующий сценарий ...

  1. Участник подключается к каналу чата
  2. Участник отключается от канала чата
  3. Тот же участник пытается подключиться к тому же каналу чата

Моя проблема заключается в следующем ... Между шагами 2 и 3, когда участник пытается повторно подключиться к тому же каналу, я получаю сообщение об ошибке «Участник уже существует».Чтобы решить эту проблему, я попытался выполнить следующие шаги:

2.1 Вызовите channel.leave ()

2.2 channel.leave () успешно возвращает

2.3 Участник пытаетсяпереподключиться к тому же каналу чата

Участник успешно подключается к тому же каналу чата.

После успешного повторного подключения, когда участник пытается отправить сообщение, оно появляется дважды.Не рабочее решение.Вместо использования channel.leave (), также попытался использовать channel.removeMember (identity).После повторного подключения к тому же каналу снова, если участник отправляет сообщение, оно появляется дважды.Время для последнего вопроса, как мог / должен участник изящно подключаться и отключаться от канала чата, чтобы он мог продолжать разговор, как если бы этот участник никогда не покинул канал?

Спасибо!

Редактировать:

Шаг 1

  const token = await axios.post('/twilio/chat', 
                { identity: identity , room: channelName }, 
                { headers: header })

Шаг 2.

   const client = await Chat.Client.create(token);

Шаг 3.

   const channel = await client.getChannelByUniqueName(channelName)

Шаг 4.

   const joinedChannel = await channel.join();

Шаг 5

   const messages = await channel.getMessages()

   messages.items.forEach((message) => {                                                          
    //Consume unread messages...                                                                       
   })    

   channel.setAllMessagesConsumed() 

Шаг 6. Прослушивание добавленных сообщений

   channel.on('messageAdded', (message) => {    
   //When sending a message, this is where I get it duplicated after reconnecting to room
   })
    const previousChannel = await channel.leave()

Шаг 7. При выходе из канала ....

    const previousChannel = await channel.leave()    

После многих проб и ошибок я наконец пришел к следующему выводу.Чтобы «исправить» проблему, мне нужно обновить вкладку, а чтобы воссоздать ее, я выполняю вышеупомянутые шаги, не обновляя вкладку ... Утечка памяти?

Firefox 65.0.1

Хром 72.0.3626.53

ОБНОВЛЕНИЕ:

Исправлено.На шаге 7, после выхода из комнаты, клиент должен быть корректно выключен ...

 client.shutdown()            

Не очень дружелюбное решение, поскольку оно даже не задокументировано как необходимый шаг для выхода из комнаты.Наиболее вероятная причина - утечка памяти.Надеюсь, что эта ошибка может быть исправлена ​​в ближайшее время ...

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Разработчик Twilio здесь.

Я считаю, что ваши дубликаты сообщений связаны с тем, что вы не отключаете обработчик messageAdded от старого объекта канала.Когда вы покидаете канал, попробуйте также удалить прослушиватель событий.

channel.off('messageAdded', this.messageAdded);

Что касается ошибки между выходом и повторным подключением, вы можете прослушать событие каналов memberLeft доВы можете быть полностью уверены, что участник ушел.В противном случае обработка ошибки является разумным способом ее устранения.

0 голосов
/ 08 апреля 2019

Частный канал не может быть просмотрен или подключен напрямую. Пропуск на вход в эти каналы осуществляется только через приглашения REST. Создатель и администраторы частного канала получат доступ к уникальному приглашению, которое они могут разослать, чтобы люди присоединились к своей группе. Они видны только участникам и уменьшат время синхронизации канала при запуске клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...