Después de un mes complicado adaptándome a nuevos flujos de trabajo (aún lo hago) retomo el proyecto de LatamQChallenge, esta vez se trata de detectar cuando los streamers están en un mismo juego; ya sea como compañeros o adversarios.
Esta es una de las funcionalidades que menciono en el post relacionado al proyecto:
Requisito
Debo ser capaz de propagar el estado de "versus" mostrando los streamers que se enfrentan o son compañeros en una partida.
Recursos y Lógica
Para detectar los estados debo utilizar el API de Riot, hay varios servicios que proveen información acerca de los juegos.
Primero pensé en el servicio de partidas; le envías el id de un jugador y te devuelve sus últimas partidas. También tiene unos query params para enviarle el rango de fecha y paginado.
Lo primero que se me ocurrió fue ir guardando los ids y revisar si se repiten con otro jugador. Supongo que es una opción, pero hay 2 fallas:
- No puedo saber si el streamer está jugando actualmente
- Debo realizar una lógica para ir "tachando" los ids que he verificado antes
Sería divertido hacer una lógica así; pero, mientras revisaba el API me encontré un servicio mucho mejor, realmente me interesa:
- ¿El streamer está jugando actualmente?
- Si está jugando, ¿Está jugando contra o en el equipo de algún otro streamer?
Este servicio es el de espectador:
El servicio retorna la información de la partida actual y en caso contrario retorna 404 Not Found.
La parte de saber si son compañeros o enemigos sería analizando la información que me da de la partida:
Hay 10 participantes (prefiero no mostrar su info), 5 tienen un id de equipo de 100 y los otros 5 tienen un id de equipo 200.
Seria cuestión de buscar el resto de streamers por si se encuentran en la partida; si es así, compararlo con el equipo del streamer y guardarlo en Firestore en una tabla.
API Polling
Este servicio debe ejecutarlo múltiples veces en un intervalo de tiempo corto para poder mantener fresca la información. Esto desencadena 3 casos claros:
- Apenas inicia la partida: No va a haber registros por lo tanto es un simple INSERT a una tabla.
- Es segunda vez que se valida la misma partida: Debido a este caso debo guardar el id de la partida y asegurarme de que no exista previamente en la tabla.
- Se acabó la partida: Este caso ocasiona que también guarde el id del jugador; para que al recibir un 404 al llamar el servicio, borrar todos los registros del jugador en la tabla.
Luego de eso al estar el cliente conectado a Firebase recibiría la información al instante.