• Nenhum resultado encontrado

Arquitectura e sistema

No documento IMBus: instant Messaging bus (páginas 52-57)

O desenvolvimento do trabalho começa pela idealização de uma possível arquitectura para o busde instant messaging. Tendo em conta as ideias e solução atrás enunciadas, foi idealizada a arquitectura apresentada na figura 4.1.

Os principais componentes do servidor são apresentados a azul-escuro, sendo os verdes e azul-claro componentes auxiliares. O componente laranja é apresentado como um compo- nente externo ao servidor em si, mas ainda parte do sistema.

O servidor foi concebido para ser utilizado sozinho, ou seja, ao contrário do que está definido na especificação XMPP[11], não suporta integração numa rede de servidores. O servidor foi desenvolvido de forma a obter o máximo conhecimento sobre o funcionamento de um servidor de instant messasing, para realizar integração com outros serviços. Logo a implementação à risca do protocolo não se encontra nos objectivos principais do trabalho.

Em seguida é apresentada uma breve descrição para cada um dos componentes apresen- tados na figura 4.1.

Figura 4.1: Arquitectura geral

4.3.1

Descrição dos componentes

• Connection Manager: ponto de entrada no servidor para um cliente XMPP. É respon- sável pela gestão das ligações com todos os clientes, realizando toda a comunicação com estes;

• Session Manager: responsável pela gestão das sessões dos clientes, principalmente pela negociação das sessões XMPP. Todos os stanzas enviados pelo cliente passam por aqui, sendo este componente o responsável por transformar a informação XML em objectos (com auxílio a tipos criados para esse efeito). Por este cliente passam também todos os pedidos recebidos pelo IM Module Manager, de forma a ligá-los a uma sessão com um serviço externo;

– TLS Component (TLS): componente responsável pela negociação TLS; – SASL Component (SASL): componente responsável pela negociação SASL;

– Resource Manager (RM): componente responsável por realizar resource bind- ing.

• Request Manager: responsável por processar os pedidos que chegam ao servidor, conforme as regras descritas na especificação RFC3921[12] para o processamento de stanzas;

– Message Processor (MP): processa os stanzas de mensagem; – Presence Processor (PP): processa os stanzas de presença; – Info/Query Processor (IQP): processa os stanzas de info/query; • Database Access: trata de todo o acesso aos dados;

• Transport Layer: trata de toda a transformação entre objectos e elementos XML e contém ainda os tipos de transporte de dados. Este componente define os tipos a usar no contexto de um pedido;

• Registration Web Site: pequena aplicação Web para registar os utilizadores no bus de instant messaging;

• IM Module Manager: componente responsável pela comunicação com os módulos de tradução dos serviços já existentes;

– Message Translator (MT): realiza conversões entre os tipos de objectos stanzas de mensagem e os tipos utilizados nos Web Services;

– Presence Translator (PT): realiza conversões entre os tipos de objectos stanzas de presença e os tipos utilizados nos Web Services;

– Info/Query Translator (IQT): realiza conversões entre os tipos de objectos stan- zasde info/query e os tipos utilizados nos Web Services;

• Yahoo Phantom Account: componente responsável por se fazer passar pelo bus de instant messaging, enviando toda a informação em nome dos utilizadores. Realiza comunicação com o serviço de IM da Yahoo![16].

4.3.2

Contrato do Web Service Central

O componente responsável por gerir a comunicação com os módulos de tradução é o IM Module Manager, o que implica que seja este componente a publicar o Web Service Central. Este Web Service deve disponibilizar as operações principais de instant messaging, de forma a que os módulos as possam utilizar para enviar a informação pertinente para o bus. O contrato do Web Service Central deve então disponibilizar as seguintes operações:

• Obtenção da lista de contactos de um utilizador (GetContactList);

• Enviar informação de presença de um utilizador a outro ou simplesmente realizar broadcast dessa informação (SendPresence);

• Adicionar um contacto à lista de contactos de um utilizador e subsequentemente re- alizar um pedido de subscrição da sua informação de presença (AddContact);

• Remover um contacto da lista de contactos de um utilizador e subsequentemente can- celar todas as subscrições de presença entre eles (RemoveContact);

• Enviar uma resposta a um pedido de subscrição de presença (AnswerSubscriptionRe- quest);

• Enviar uma mensagem de um utilizador a outro (SendMessage).

Os sistemas de instant messaging têm um carácter assíncrono, no que respeita ao proces- samento dos pedidos executados. Isto pode-se verificar na forma de utilização do protocolo XMPP, em que um cliente realiza um pedido e não fica bloqueado à espera que o mesmo seja processado, tendo em conta que na maior parte dos casos não existe uma resposta a esse pe- dido. Caso ocorra algum erro com o processamento do mesmo, o cliente será posteriormente notificado dessa ocorrência. De forma a manter o carácter assíncrono na chamada ao Web ServiceCentral, estas operações devem ser marcadas como sendo One Way, ou seja, não têm mensagem de retorno. Desta forma um cliente do Web Service irá invocar uma operação e prosseguir imediatamente, não ficando bloqueado durante a execução do mesmo.

4.3.3

Contrato dos Web Services dos módulos

A implementação dos módulos de tradução depende maioritariamente do serviço em questão, mas este tem obrigatoriamente que disponibilizar um Web Service com um contrato especí- fico. Este contrato permite que o IM Module Manager invoque as mesmas operações sobre os diferentes módulos da mesma forma, unificando a forma de comunicação entre eles. Desta forma o sistema é modular, podendo adicionar novos módulos sem ser necessário grandes adaptações (basta adicionar em dois locais a informação referente ao novo módulo). A definição do contrato de um módulo é independente da implementação dos módulos, pois cada um deles deve respeitar esse mesmo contrato, o que leva à utilização da técnica Contract- First Web Services. Esta técnica implica que o contrato, no caso de Web Services, o WSDL1, seja definido à priori e o código seja gerado através dessa mesma definição.

Segundo [1] um ficheiro WSDL deve conter:

• Uma secção para os tipos de mensagens a trocar na invocação e resposta das operações (types);

• Uma secção com a definição abstracta das partes de uma mensagem, associada a um tipo existente (message);

• Uma secção que define um conjunto abstracto de operações (contrato), indicando quais são as mensagens de entrada e saída (portType);

• Uma secção que define o protocolo e o formato dos dados para as operações de um contrato (binding);

• Uma secção que define um endereço para um binding em específico (port); • Uma secção que agrega um conjunto de ports (service).

Os Web Services disponibilizados pelos módulos de tradução devem manter a natureza assíncrona, que caracteriza o servidor e o Web Service Central. Desta forma também as operações dos Web Services dos módulos devem ser One Way. Em WSDL uma operação fica marcada como OneWay, quando na secção portType, não é indicada uma mensagem de saída (output). Desta forma, a definição da operação fica da forma apresentada na listagem 4.1.

< o p e r a t i o n n a m e = " S e n d M e s s a g e " >

< i n p u t m e s s a g e = " t n s : S e n d M e s s a g e _ I n p u t M e s s a g e " / > < / o p e r a t i o n >

Listagem 4.1: Exemplo da definição de uma operação OneWay em WSDL (excerto do ficheiro WSDL para os Web Services dos módulos de tradução)

O ficheiro WSDL que define o contrato que deve ser implementado pelos módulos de tradução está apresentado no apêndice B. Este contrato deve definir as seguintes operações de instant messaging:

• Realizar o pedido de subscrição de um utilizador à informação de presença de outro (AddContact);

• Enviar a informação de presença de um utilizador a outro (SendPresence); • Enviar uma mensagem de um utilizador para outro (SendMessage); • Enviar a respectiva lista de contactos a um utilizador (SendContactList);

• Obter a informação de presença de um utilizador do serviço com que o módulo comu- nica (GetPresence).

Operações de sistema

Além das operações utilizadas para instant messaging estão definidas outras três, que serão chamadas operações de ”sistema”. Estas operações existem apenas para serem usadas pelo sistema e não para efeitos de instant messaging.

Tal como mencionado anteriormente, a solução por este trabalho proposta para a inte- gração de serviços de instant messaging, consiste em ter contas ”fantasmas” que se irão fazer passar pelo bus de instant messaging perante os clientes dos serviços respectivos. A necessi- dade das operações de sistema surge desta solução.

O registo de um utilizador no bus consiste então, considerando esta solução, em adi- cionar o utilizador à lista de contactos da conta fantasma do respectivo sistema. Ao adicionar

o utilizador, será realizado automaticamente um pedido de subscrição da sua informação de presença. Para que isto seja possível foi introduzida a operação RegisterUser no contrato dos Web Services dos módulos. Quando o utilizador aceitar o pedido realizado, será auto- maticamente realizado um pedido de subscrição da presença da conta fantasma, por parte do utilizador em questão, devendo este ser imediatamente aceite. Apenas após esta fase de aceitação de subscrições de presença é que o utilizador se encontra realmente registado no busde instant messaging.

Os utilizadores dos serviços existentes, após registo, apenas podem interagir com a conta fantasma se esta estiver disponível. Assim quando o bus inicia a sua execução, deve garantir que todas as contas se encontram disponíveis para comunicar com os utilizadores dos respec- tivos serviços. Para cumprir este requisito foram introduzidas as operações LogIn e LogOut.

No documento IMBus: instant Messaging bus (páginas 52-57)