android parse.com chat pubnub instant-messaging

Android: empareja y conecta correctamente a dos usuarios en una aplicación de chat al azar usando parse y pubnub



parse.com instant-messaging (1)

Este es un caso de uso genial. Aquí hay algunas ideas sobre cómo comenzar con este diseño.

Preparar

  • A cada usuario se le asignará un nombre de canal único y un grupo de canales único, por ejemplo, ch_user123 y cg_user123 , respectivamente.
  • Habrá tres grupos de canales administrados por el servidor llamados cg_idle , cg_searching , cg_active . Este grupo de canales contendrá todos los nombres de canales de usuario únicos de los usuarios que no participan activamente en un chat y no buscan un compañero de chat.

Inicio de sesión de usuario

Cuando un usuario inicia sesión (con éxito), su servidor agregará el canal único de ese usuario al grupo de canales idle y al grupo de canales único del usuario (IOW - agregue ch_user123 a cg_user123 y a cg_idle

Búsqueda de compañero de chat

Cuando un usuario hace clic en el botón Buscar compañero de chat , su aplicación de servidor

  1. eliminar su canal exclusivo de usuario del grupo de canales cg_idle
  2. agregue su canal único de usuario al grupo de canales cg_searching
  3. list_channels de cg_idle para obtener una lista de candidatos de socios de chat
  4. seleccione un canal de usuario de la lista de candidatos cg_idle
  5. Verifique que el candidato seleccionado aún esté inactivo
  6. si el usuario ya no está inactivo, entonces están activos o buscando - elija otro usuario de la lista inactiva (necesita listar los canales de cg_idle nuevamente para obtener una lista actualizada) - IOW, vuelva al paso 4
  7. si el usuario aún está inactivo, elimine el canal del usuario de cg_idle y agréguelo a cg_active
  8. eliminar el canal de búsqueda del usuario de cg_searching y agregarlo a cg_active
  9. agregue un nombre de canal recientemente generado (puede usar la API UUID para generar un nombre de formato UUID) para los grupos de canales únicos de ambos usuarios. Por ejemplo, agregue el nuevo nombre de canal 1234-5678-9ABC a cg_user123 y cg_user456 . Estos dos usuarios no están suscritos al mismo canal para comenzar su aventura de chat entre ellos.
  10. su servidor ahora puede publicar un mensaje en este nuevo canal presentando a los usuarios entre sí (su aplicación cliente puede mostrar avatar, información de usuario o incluso iniciar la transmisión de video si lo está haciendo ).
  11. si cualquiera de los usuarios hace clic en el botón de salir, los canales únicos de ambos usuarios se eliminan de cg_active , se agregan a cg_idle y el canal de chat compartido se elimina de los grupos de canales únicos de ambos usuarios.

Puedo pensar en varios detalles y características que tendrían que abordarse anteriormente y las condiciones de carrera que su servicio tendría control, pero esto debería exponer cómo puede usar grupos de canales para controlar el estado de los usuarios y una forma de crear un directorio de nombres de usuarios.

Actualmente estoy creando una aplicación de chat aleatorio en la que el usuario presiona un botón y se vincula con otro usuario y luego puede chatear.
Planeo usar Parse para control de usuarios y almacenamiento de archivos, y pubnub para chat.

Mi pregunta es, ¿cuál sería la forma correcta de emparejar y conectar dos usuarios y ponerlos en una conversación juntos?

Digamos que usuario1 presiona el botón de búsqueda para comenzar a buscar a otro usuario, el estado del usuario1 en la base de datos parse se actualiza a ''búsqueda'' y la aplicación luego consulta la base de datos para otro usuario cuyo estado también ''busca''. la consulta devuelve user2 y se crea un nuevo canal de chat a partir de los dos nombres de usuarios combinados (por ejemplo, Pubnub Chat Channel: ''user1user2'').
El Usuario1 se pone en este canal de chat y se inicia la actividad de chat. Aquí es donde me confundo, ¿cómo sabrá mi aplicación que necesita poner user2 en un chat con user1? Porque desde mi punto de vista, el usuario2 también ha presionado el botón de búsqueda para consultar la base de datos de análisis sintáctico para otro usuario y, por lo tanto, se podría poner en un chat con otro usuario aleatorio y no con el usuario1.

Cualquier ayuda sobre el método correcto para lograr esto sería muy apreciada, gracias.