======= Node Application ======= .. image:: architecture_node.png A aplicação se comporta em uma arquitetura de conexão entre o dispositivo e uma aplicação Node JS. Basicamente, é necessário conhecer a API Socket IO para iniciar esta comunicação, tanto da parte web client, quanto a parte mobile. Esta arquitetura, funciona com emits, ou seja emissões de eventos. ======= Conexão ======= Ao tentar efetuar a conexão com o Node Application, é necessário o envio das informações de comunicação para sua identificação: * ``deviceUuid``: Identificador do seu dispositivo, se for um webclient não precisa; * ``installCode``: Código de instalação do aplicativo atual, ou seja, fluxo do Simova Apps; * ``platform``: Plataforma que identifica quem você é, no caso android ou web. ======= Comandos ======= O Node application possui alguns comandos básicos, necessários para manter os dispositivos comunicando, mas caso novos comandos precisem ser adicionados na parte Mobile de comunicação, o Node Application não precisa conhecê-los, pois ele é apenas um emitter ou repassador de eventos. Os comandos que ele reconhece são: * ``disconnect``: Remove seu dispositivo da lista de conexões; * ``error``: Loga o erro utilizando o Log4js; * ``listMobiles``: Lista os dispositivos conectados emitindo o evento 'sendListMobiles'; * ``executeCommand``: Repassa para os dispositivos um comando específico, ou, envia ao solicitante um evento de erro, caso o dispositivo não seja alcançável, 'sendError'; * ``sendCommunication``: Evento receptivo e retro emitido, quando um dispositivo emite este evento, os dados são lidos e é emitida uma resposta aos dispositivos específicos, ou seja, ocorre a emissão do evento 'sendResponse'. ======= Emitters ======= São eventos devolvidos a um dispositivo móvel ou aplicação web em que ele receberá os dados de comunicação e tratará da maneira que o convém. * ``sendClientSocketId``: Envia ao dispositivo que conectou a aplicação seus dados de conexão, ou seja, seu id de conexão (socket id); * ``disconnect``: Envia ao dispositivo conectado que ele foi desconectado da aplicação e não está mais operante na aplicação. É usado quando os dados de tentativa de conexão não seguem o padrão; * ``sendListMobiles``: Retorna os dispositivos mobile conectados no momento no Node Application; * ``sendError``: Retorna ao dispositivo conectado que houve algum erro de comunicação. * ``sendResponse``: Envia ao dispositivo alguma resposta ou algum comando que ele deve ser executado, lembrando que é apenas um repassador, então os comunicantes que devem saber como interagir entre eles, não o Node Application. ======= Estrutura de desenvolvimento ======= A aplicação foi elaborada com o uso de Socket IO, o requisito básico é o Node JS instalado e a biblioteca Socket IO. Para efetuar o deploy no servidor, a ferramenta utilizada foi o pm2, cujo motivo foi facilitar a visualização do uso de memória, facilidade de restart/start da aplicação e assim por diante. * ``pm2 list``: Retorna as informações das aplicações aos quais o pm2 subiu. As informações incluem o uptime, id e pid (Linux), status (online, offline etc.), uso de memória, watchers etc.; * ``pm2 monit``: Mostra em realtime no terminal, allocation e memory use da aplicação. Para sair, basta control + c; * O caminho para a aplicação em homologação está na pasta /home/xMovaSockets, bem como o seu log. Até o momento, não está incluso na rotina de compactação de logs, mas como é mais para conexão e visualização destas etapas, caso queira apagar seu conteúdo: echo "" > socket-server.log; * A documentação do pm2 encontra-se disponível em: http://pm2.keymetrics.io/, a aplicação é de simples uso e roda tranquilamente sobre Sistemas Operacionais Like Unix.