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
ycg_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
- eliminar su canal exclusivo de usuario del grupo de canales
cg_idle
- agregue su canal único de usuario al grupo de canales
cg_searching
-
list_channels
decg_idle
para obtener una lista de candidatos de socios de chat - seleccione un canal de usuario de la lista de candidatos
cg_idle
- Verifique que el candidato seleccionado aún esté inactivo
- 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 - si el usuario aún está inactivo, elimine el canal del usuario de
cg_idle
y agréguelo acg_active
- eliminar el canal de búsqueda del usuario de
cg_searching
y agregarlo acg_active
- 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
acg_user123
ycg_user456
. Estos dos usuarios no están suscritos al mismo canal para comenzar su aventura de chat entre ellos. - 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 ).
- 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 acg_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.