4.4 Mensagens
4.4.3 Módulo de presença e Interação no sistema
Depois de todo o processo de autenticação e o sistema verificar quais os serviços que o cliente suporta, para cada um deles irá será carregada a biblioteca correspondente. Neste caso será car- regada a biblioteca "presence.js", onde se encontram todas as funções e operações que devem ser executadas pelo cliente relativamente à presença. Este serviço está encarregue das atualizações de estado do cliente, verificar quem se encontra na lista de amigos e qual o seu estado atual, adicionar uma pessoa do sistema à lista de contactos e ainda estar atento a eventos que lhe digam respeito. É um serviço que se encontra disponível e funcional na framework. Já na integração com a aplicação é criado um objeto JavaScript desse serviço "new PresenceService()". Para este serviço ficar completamente funcional é necessário carregar o módulo de presença para o servi- dor, para que possa existir interação entre servidor e cliente. Ao ser criado este objeto é possível ter acesso a várias operações, sendo elas:
• getPresences; • updatePresence; • notifyFriendsOnline; • registHandler; • addAsFriend.
A primeira função serve para o cliente recolher os estados de presença que foram definidos no sistema, que neste caso são:
• Available; • Busy; • Away; • Not Here;
4.4. MENSAGENS
• Offline/Invisible.
Para esta informação ser recolhida é enviada uma mensagem do tipo "get" para o módulo de presença sobre o eventbus, como mostra a Figura 4.14.
Figura 4.14: Mensagem para obter os estados de presença do sistema.
Na aplicação, o resultado a este pedido é um array com o nome dos serviços e o seu tipo, que posteriormente é carregado para um objeto dropdown de HTML5. Sempre que o utilizador quiser alterar o seu estado basta escolher o estado que quiser nesse dropdown.
Quando é feita a autenticação de um utilizador para além de recolher informação sobre os estados existentes no sistema, é necessário que o seu estado de presença mude para Available, isto porque anteriormente se encontrava Offline. Para isso é usada a função "updatePresence", que envia para o módulo de presença no servidor uma mensagem do tipo "update", como mostra a Figura 4.15.
O módulo de presença, ao receber a mensagem irá verificar o valor do campo login, pois indica se o utilizador está ou não a executar autenticação. Caso este campo se encontre com o valor true, o próprio servidor irá registar um handler com o endereço de presença desse utilizador (presence.<username>), de forma a estar sempre atento à mudança de estado do mesmo, e irá atualizar o estado de presença na sessão respetiva ao utilizador. Para além disso, irá verificar quem são os utilizadores que se encontram na lista de contactos desse utilizador, para que, desta forma, possam ser carregados no lado do cliente e possa ser registado um handler referente a
Figura 4.15: Mensagem para notificar e obter lista de contactos.
cada um dos utilizadores. A seguir, quando o utilizador atualizar o seu estado, irá ser enviada uma mensagem em publish, para o seu endereço de presença, como mostra a Figura 4.16.
Figura 4.16: Notificação de mudança de estado.
Neste caso o campo login irá com o valor false, pois o utilizador já não se encontra a fazer autenticação.
Como foi dito anteriormente, existem três grupos de presença associados ao grupo de cada utilizador registado no sistema, sendo estes: authorised_presence, presence_authorization_pendent
4.4. MENSAGENS
e denied_presence. Estes grupos dizem respeito à lista de contactos autorizados, aos contac- tos que fizeram pedido mas se encontram pendentes e aos que foram rejeitados, respetivamente. Neste sistema inicial todos os pedidos executados serão automaticamente aceites, ou seja, sempre que seja executado um pedido, os contactos serão logo adicionados à lista authorised_presence. Para adicionar uma pessoa do sistema à lista de contactos é necessário enviar uma mensagem do tipo subscribe para o módulo de presença, como está representado Figura 4.17.
Figura 4.17: Mensagem para adicionar contacto.
O módulo de presença, ao receber a mensagem subscribe, irá verificar de quem é a men- sagem a partir do campo from e quem é que essa pessoa pretende adicionar a partir do campo to. Este irá ainda verificar se o campo "automatic_authorisation_acceptance" se encontra a true ou false. É necessário garantir que não é adicionada a mesma pessoa duas vezes ao grupo "autho- rised_presence".
Por fim, este módulo ficará encarregue de notificar os clientes de que foi adicionado uma nova pessoa à lista de contactos, para que possa haver uma atualização na parte do cliente.
4.4.4
Módulo de gestão de utilizadores
Este módulo permite a pesquisa de pessoas no sistema, desta forma é possível encontrar pessoas para adicionar à lista de contactos ou até mesmo acrescentar pessoas a uma conferência que esteja a decorrer, consoante o ilustrado na Figura 4.18.
No cliente existe um campo de pesquisa que permite, sempre que haja, a escrita de uma le- tra, que será enviada por mensagem para o "Módulo de Gestão de Utilizadores". Existe ainda a possibilidade de definir campos para a filtragem da pesquisa, este ficam definidos no "querycri-
Figura 4.18: Mensagem para pesquisa de utilizadores do sistema.
teria". Da mesma maneira é possível definir qual a informação que se quer que seja devolvida por parte do servidor, em relação aos utilizadores que se querem procurar, esta informação fica definida no campo "answercriteria".
Para ser feita uma pesquisa mais geral, existe a possibilidade de usar expressões regulares numa base de dados Mongo. Nesta caso é usada a expressão /”string”/i, que permite que sejam devolvidos todos os resultados que tenham aquela "string", não se importando se é case sensitive. Nesta especificação inicial o campo "querycriteria" contém apenas o username, isto implica que a pesquisa apenas é feita com esse campo. No caso do "answercriteria", apenas está definido que deve ser devolvido o "username" na resposta.