Tratamento de keepalives pelo Accelero
Todas as vezes que um gateway envia uma mensagem de keepalive para o Accelero (tópico padronizado <FACILITY>/<VENDOR>/<SERIAL>/keepalive) o serviço async_processor do Accelero dispara um "tratador genérico de keepalives de gateways" (classe GenericKeepalive).
Esse tratador genérico faz um parse do tópico para descobrir o VENDOR específico (Hikvision, por exemplo), e através de um Interceptor busca quem se registrou para tratar esse tipo de evento deste vendor específico. O tratador é sempre uma classe do tipo GatewayPolymorphicContainer criada com um "driver" do vendor (funciona como se fosse uma factory). Esse driver implementa GatewayInterface.
Cada driver tem seu funcionamento próprio, mas em linhas gerais:
- são feitas algumas checagens de consistência da mensagem recebida (tem timestamp? Tem o número de série do equipamento?)
- são buscadas algumas chaves específicas aonde estão listados os status/dados dos devices administrador pelo gateway
- são carregados do DB os devices listados, e compiladas lgumas informações
- é setada uma chave no cache do sistema com os dados/status do gateway. Quando alguém quer recuperar essa informação, sempre busca-se do cache.
Em resumo, todo keepalive do gateway é, além de um keepalive, uma mensagem com "status geral do gateway" (versão, status de comunicação com devices, uso/capacidade dos dispositivos administrados pelo gateway, endereço IP, etc...). Essas informações alimentam o Accelero e servem basicamente pra "botar na tela algumas informações" (nenhuma ação específica é tomada em função dessa mensagem).