Android - правильное сопряжение и подключение двух пользователей в случайном приложении чата с помощью синтаксического анализа и pubnub

В настоящее время я создаю приложение случайного чата, в котором пользователь нажимает кнопку и соединяется с другим пользователем, а затем они могут общаться в чате.
Я планирую использовать Parse для управления пользователями и хранения файлов, а pubnub - для чата.

У меня вопрос: как правильно соединить и связать двух пользователей и отправить их в чат вместе?

Допустим, пользователь1 нажимает кнопку поиска, чтобы начать поиск другого пользователя, статус пользователя1 в затем база данных синтаксического анализа обновляется до «поиска», и приложение затем запрашивает в базе данных другого пользователя, статус которого также «ищет». запрос возвращает user2, и новый канал чата создается из двух имен пользователей, объединенных вместе (например, Pubnub Chat Channel: 'user1user2').
Пользователь User1 затем помещается в этот канал чата, и начинается чат. Вот где я запутался, как тогда мое приложение узнает, что ему нужно поместить user2 в чат с user1? Потому что, по моему мнению, user2 также нажал кнопку поиска, чтобы запросить базу данных синтаксического анализа для другого пользователя, и поэтому они могут быть помещены в чат с другим случайным пользователем, а не с user1.

Мы будем очень благодарны за любую помощь в выборе правильного метода для достижения этой цели, спасибо.


person Paul Alexander    schedule 16.11.2015    source источник


Ответы (1)


Это отличный вариант использования. Вот некоторые сведения о том, как начать работу с этим дизайном.

Настраивать

  • Каждому пользователю будет присвоено уникальное имя канала и уникальная группа каналов. , например, ch_user123 и cg_user123 соответственно.
  • Будет три группы каналов, управляемых сервером, с именами cg_idle, cg_searching, cg_active. Эта группа каналов будет содержать все уникальные имена каналов пользователей пользователей, которые не активно участвуют в чате и не ищут партнера по чату.

Логин пользователя

Когда пользователь входит в систему (успешно), ваш сервер добавит уникальный канал этого пользователя в группу каналов idle и в уникальную группу каналов пользователя (IOW - добавьте ch_user123 в cg_user123 и в cg_idle

Поиск чат-партнера

Когда пользователь нажимает кнопку поиск партнера по чату, ваше серверное приложение

  1. удалить уникальный пользовательский канал из cg_idle группы каналов
  2. добавить уникальный пользовательский канал в cg_searching группу каналов
  3. list_channels из cg_idle, чтобы получить список кандидатов в чат-партнеры.
  4. выберите канал пользователя из списка cg_idle кандидатов
  5. убедитесь, что выбранный кандидат все еще неактивен
  6. если пользователь больше не бездействует, тогда он активен или ищет - выберите другого пользователя из списка незанятых (необходимо снова перечислить каналы cg_idle, чтобы получить обновленный список) - IOW, вернитесь к шагу 4
  7. если пользователь все еще бездействует, удалите канал этого пользователя из cg_idle и добавьте его в cg_active
  8. удалите канал ищущего пользователя из cg_searching и добавьте его в cg_active
  9. добавить новое сгенерированное имя канала (вы можете использовать API UUID для создания имени формата UUID) в уникальные группы каналов обоих пользователей. Например, добавьте новое имя канала 1234-5678-9ABC к cg_user123 и cg_user456. Эти два пользователя не подписаны на один и тот же канал, чтобы начать свое приключение в чате друг с другом.
  10. теперь ваш сервер может публиковать сообщение на этом новом канале, знакомя пользователей друг с другом (ваше клиентское приложение может отображать аватар, информацию о пользователе или даже запустить видеопоток, если вы это делаете).
  11. если один из пользователей нажимает кнопку выхода, уникальные каналы обоих пользователей удаляются из cg_active, добавляются в cg_idle, а общий чат-канал удаляется из уникальных групп каналов обоих пользователей.

Я могу подумать о нескольких деталях и функциях, которые необходимо было бы рассмотреть выше, и условиях гонки, которые ваша служба будет контролировать, но это должно показать, как вы можете использовать группы каналов для управления состоянием пользователей и способ создания каталога имен пользователей.

person Craig Conover    schedule 18.11.2015
comment
хороший ответ @ craig-conover! - person Stephen Blum; 19.11.2015
comment
Спасибо, очень лаконичный и очень полезный ответ! - person Paul Alexander; 19.11.2015