# Como implementar el launcher de Pow Gaming ## Antes de Empezar Repositorio: https://github.com/perzequiel/dummy-launcher Pow debera proveer las variables de configuracion * **POW_GAMING__OPERATOR_CODE** : Codigo unico de operador (gestiona Pow) * **POW_GAMING__PLATFORM_API** : url de la plataforma (varia entre ambientes de desarrollo, integracion y produccion, gestiona Pow) * **POW_GAMING__POW_SEED** : Semilla para encriptacion capa 2 (gestiona Pow) * **POW_GAMING__GAME_LIST** : Url publica con listado de juegos disponibles para el operador (gestiona Pow) * **POW_GAMING__OPERATOR_SEED** : Semilla para encriptacion capa 1 (autogestion) * **POW_GAMING__CURRENCY_CODE** : codigo de moneda (autogestion) * **POW_GAMING__LANG_CODE** : codigo de lenguaje (autogestion) *Los parametros autogestionados: La seed del operador podra ser actualizada desde el administrador del operador (en desarrollo) El listado de currencies podra se consultado desde el administrador del operador (en desarrollo) El listado de lenguajes podra se consultado desde el administrador del operador (en desarrollo)* ## Desarrollar Launcher tomando de ejemplo dummy-launcher Clonar el repositorio [dummy-launcher](https://bitbucket.org/pow-gaming/dummy-launcher/src/master/) (previamente solicitar acceso a Pow) el mismo contiene un ejemplo de implementacion del launcher en el cual realiza un encriptado de token JWT de un listado de parametros y aplicando el correcto armado del mismo, se podra mediante una peticion GET llamar al metodo /launch que recuperara la url del juego al cual se debe redireccionar. > El Dummy launcher puede probarse siguiendo los pasos del archivo [README.md](https://bitbucket.org/pow-gaming/dummy-launcher/src/develop/README.md) junto con los parametros del archivo .env cargados (solicitar a Pow), ya con esto sera posible lanzar los juegos para testear que la implementacion sea correcta. ### **Funcionamiento del dummy-launcher paso a paso** 1) Obtiene el listado de Juegos haciendo una peticion GET de la url guardada en **POW_GAMING__GAME_LIST**, obtendremos un json de este tipo (del cual solo utilizaremos game_id y name) ```json [ { class_name : "The21BlackJack", description : "21 BlackJack", game_id : "cd85876a-0305-4d84-9cb5-d38022fc5050", id : "b5cc48f0-b9d6-4c39-b038-eeacd9f8beeb", image : "https://dev-storage.pow-gaming.com/default_thumbnail.png", name : "21 BlackJack", url : "https://dev-games.pow-gaming.com/client-21-blackjack/" }, {...} ] ``` *ver archivo server.js* ```javascript // storing game list app.get('/game-list.js', async (req, res) => { const { body } = await requestPromise(POW_GAMING__GAME_LIST) return res.end(`const gamesList = ${body}`); }) ` 1) Se utiliza el json para mostrar los juegos disponibles y guardar el game_id a seleccionar ya que este se utiliza como parametro de lanzamiento *ver archivo site/index.html* 1) Al seleccionar un juego se toma el game_id seleccionado y se envia un identificador unico de usuario jugador (gestionado por el operador) a la peticion **localhost:3000/game/:gameId?username=example** para que con estos parametros se pueda generar el token . ***nota**: tambien se puede gestionar el tipo de moneda y lenguaje ya que la gestion de estos parametros quedan libres a la implementacion del operador, en caso de recibir algun parametro erroreo se utilizaran parametros por defecto, ver archivo server.js* ```javascript app.get('/game/:gameId', async (req, res) => { const username = req.query.username const userId = username ?? 'randomUser' // generated by the operator const gameId = req.params.gameId // launcher instance const launcher = new LauncherTokenGenerator( // authorization settings POW_GAMING__PLATFORM_API, POW_GAMING__OPERATOR_CODE, POW_GAMING__POW_SEED , POW_GAMING__OPERATOR_SEED, // configurable settings POW_GAMING__CURRENCY_CODE, POW_GAMING__LANG_CODE, // game_id from the gameList gameId, // unique user identifier from the operators's database userId ) async function callService() { const { body, statusCode } = await requestPromise(launcher.getLaunchUrl()) return statusCode != 200 ? 'error' : body } for (let tries = 0; tries < 3; tries++) { const response = await callService() if (response != 'error') { return res.redirect(response) } } return res.end('Service unavailable'); }) ``` 1) finalmente si la respuesta de la peticion realizada a la url launcher es correcta, se recibira un **body** y un **statusCode** que si este statusCode == 200 el body contendra la url del juego que se debe re direccionar junto con su token de acceso. Cualquier consulta no dude en contactarnos.