• Nenhum resultado encontrado

M´ etodos a Disponibilizar

4.2 An´ alise do problema

4.2.2 M´ etodos a Disponibilizar

Como anteriormente referido, este Servi¸co deve disponibilizar `a aplica¸c˜ao cliente uma s´erie de m´etodos de neg´ocio e receber o respectivo resultado. No entanto, o SMCRT ter´a que inicializar o SIT, antes do cliente invocar um destes m´etodos.

M´etodo para Iniciar Interac¸c˜ao

Este m´etodo, como o nome indica, serve para dar in´ıcio `a interac¸c˜ao do cliente com o servidor. ´E retornado ao cliente um identificador (GUID), que serve para mapear/associar o contexto do servidor (Proxy e Processo) com o cliente respectivo. A partir desse momento, sempre que o cliente queira efectuar uma opera¸c˜ao das que se seguem, tem que passar obrigatoriamente o GUID que lhe foi atribu´ıdo neste m´etodo.

M´etodo para Terminar Interac¸c˜ao

Como o nome indica, este m´etodo serve para terminar a interac¸c˜ao do cliente com o servidor. Quando invocado, o servidor encarrega-se de destruir todo o contexto associado a um cliente.

M´etodo para Ler Estado da ´Ultima Opera¸c˜ao

Este m´etodo, server para obter o estado (resultado) da ´ultima opera¸c˜ao invocada no Servi¸co. No entanto, todas os m´etodos retornam o estado de invoca¸c˜ao.

M´etodo para Afectar um Leitor

Como o nome indica, este m´etodo serve para afectar o leitor ao SIT.

M´etodo para Libertar um Leitor

Como o nome indica, este m´etodo serve para desafectar o leitor ao SIT.

M´etodo para Afectar SAM

Como o nome indica, este m´etodo serve para afectar um dos poss´ıveis SAMs que se encontram no leitor ao SIT.

M´etodo para Libertar SAM

Como o nome indica, este m´etodo serve para libertar o SAM alocado na opera¸c˜ao anteriormente descrita.

M´etodo para Associar um Cart˜ao a um SAM

Este m´etodo associa um SAM previamente alocado a um Cart˜ao.

M´etodo para Desassociar um Cart˜ao de um SAM

Este m´etodo associa um SAM previamente associado a um Cart˜ao.

M´etodo para Iniciar Comunica¸c˜ao com o Cart˜ao

Como o nome indica, deve retornar os comandos necess´arios para iniciar a comu- nica¸c˜ao com o cart˜ao.

M´etodo para Fechar Comunica¸c˜ao com o Cart˜ao

Como o nome indica, deve retornar os comandos necess´arios para cessar a comu- nica¸c˜ao com o cart˜ao.

M´etodo para Abrir Sess˜ao no Cart˜ao

Como o nome indica, serve para iniciar uma sess˜ao no Cart˜ao.

M´etodo para Fechar Sess˜ao no Cart˜ao

Como o nome indica, serve para fechar uma sess˜ao no Cart˜ao.

M´etodo para Ler o Contador

Este m´etodo serve para ler o valor de um contador existente no Cart˜ao.

M´etodo para Escreve o Contador

Este m´etodo serve para escrever o valor de um contador existente no Cart˜ao.

M´etodo para Seleccionar Aplica¸c˜ao do Cart˜ao

Este m´etodo, serve para seleccionar uma das v´arias aplica¸c˜oes existentes no Cart˜ao. Para al´em do identificador do cliente, deve ser passado o identificador da aplica¸c˜ao a seleccionar.

Cap´ıtulo 4. Servi¸cos do Motor de Carregamento Remoto de T´ıtulos 37

M´etodo para Invalidar um Cart˜ao

Como o nome indica, serve para invalidar um cart˜ao

M´etodo para Reabilitar um Cart˜ao

Como o nome indica, serve para reabilitar um cart˜ao.

M´etodo para Escrever Dados no Cart˜ao

M´etodo gen´erico que permite ler qualquer tipo de dados no Cart˜ao.

M´etodo para Ler Dados do Cart˜ao

M´etodo gen´erico que permite escrever qualquer tipo de dados no Cart˜ao.

M´etodo para Verificar o PIN do Cart˜ao

Como o nome indica, serve para verificar se o PIN do Cart˜ao fornecido pelo cliente ´e o correcto.

M´etodo para Alterar o PIN do Cart˜ao

Como o nome indica, serve para alterar o PIN do Cart˜ao. Para al´em do GUID deve ser passado o PIN actual bem como o novo PIN.

M´etodo para Iniciar um Comando

Este m´etodo serve para o SMCRT receber das queues o resultado de um dos m´etodos anteriormente descritos. O objectivo ´e sempre retornar os comandos a executar no Cart˜ao.

´

E importante referir que o retorno de todos os m´etodos acima descritos foi conce- bido com as limita¸c˜oes identificadas no projecto Aplica¸c˜ao Cliente de Carregamento Remoto de T´ıtulos. Quer isto dizer que os objectos de retorno s˜ao constitu´ıdos por atributos de tipos b´asicos para que o consumo do servi¸co, por parte de aplica¸c˜oes m´oveis, seja ’implement´avel’.

4.3

Implementa¸c˜ao

Uma vez que a linguagem de programa¸c˜ao usada para a implementa¸c˜ao do Web Service foi ASP.NET e C#, foi necess´ario criar um Wrapper que invocasse as fun¸c˜oes da biblioteca do Software de Interoperabilidade dado que esta est´a constru´ıda com a Linguagem C. De seguida, deu-se in´ıcio ´a constru¸c˜ao do Web Service onde foi criado Web Method por cada m´etodo do SIT a invocar.

Figura 4.3: Arquitectura do SMCRT

Assim analisando a arquitectura da Figura 4.3 tem-se que:

O SMCRT representa o Web Service com v´arios web methods disponibilizados.

O Proxy, representa um cliente no SMCRT. Este ´e identificado univocamente no sistema por um Identificador Global passado ao cliente na primeira invoca¸c˜ao do web service. Assume o papel de ponte entre o cliente e o processo que responde aos seus pedidos. ´E o proxy que guarda as queues de comunica¸c˜ao entre o processo e o web service com a informa¸c˜ao a trocar com o cliente.

O Processo ´e respons´avel por carregar em mem´oria o SIT, com recurso ao wrapper criado, e invocar o m´etodo correspondente ao web method. Para permitir o acesso concorrente, poderia optar-se por implementar threads para tratar os clientes dado que consomem menos recursos e evitam a mudan¸ca de contexto no processador (n˜ao ´e necess´ario guardar o program counter nem a pilha). No entanto, esta op¸c˜ao teve de ser descartada porque, internamente, o SIT guarda o estado da invoca¸c˜ao das fun¸c˜oes. Dado que as threads partilham o mesmo espa¸co de mem´oria, o contexto de execu¸c˜ao do primeiro corromper-se- ia aquando da invoca¸c˜ao de um m´etodo do SIT por parte de outro cliente. Devido a este facto, ser´a criado um processo por cada cliente pois os processos s˜ao executados num espa¸co de mem´oria reservado.

A Figura ?? do Apˆendice B (Anexo Confidencial) ilustra o modo gen´erico de funcionamento da invoca¸c˜ao de um m´etodo de alto n´ıvel, identificado na figura como ”High Method”.

Cap´ıtulo 5

Remote Coupler

O desenvolvimento desde projecto teve lugar na Fase 4 do planeamento do est´agio (Figura 1.3).

5.1

Objectivo

O projecto integra-se num roadmap de desenvolvimento de inova¸c˜oes e futuros m´odulos de plataforma de electronic ticketing da Link. Neste ˆambito, pretende- se implementar um prot´otipo de uma aplica¸c˜ao m´ovel que aceda ao Servidor com Motor de Carregamentos Remotos , para a compra e carregamento de t´ıtulos no SmartPhone. Neste ˆambito, dever´a ser adicionado o suporte a um novo coupler designado por “Remote”. Este vai permitir `as aplica¸c˜oes cliente do Servidor com Motor de Carregamento Remoto de T´ıtulos funcionarem sem SAMs locais, ou seja, sem um SAM embutido no leitor de cart˜oes. Com este coupler, o acesso aos SAMs passa a ser remoto e gerido pelo servidor SAM Server (Figura 5.3).

5.2

Situa¸c˜ao Inicial

Uma solu¸c˜ao que visa uma crescimento cont´ınuo, de forma a acompanhar a chegada de novas tecnologias ao mercado, tem que estar bem implementada, para que a adi¸c˜ao de novas funcionalidades n˜ao implique grandes altera¸c˜oes no c´odigo existente. O “Software de Interoperabilidade para Terminais”, tendo em conta este princ´ıpio, foi desenhado de forma modular, permitindo assim uma abstrac¸c˜ao dos m´odulos inferiores. ´E composto por trˆes n´ıveis distintos como pode ser visualizado na arqui- tectura representada na Figura 5.1.

Analisando a Figura 5.1 com a arquitectura do Software de Interoperabilidade para Terminais tem-se que:

O n´ıvel superior ´e respons´avel por disponibilizar m´etodos de alto n´ıvel dos cart˜oes e tickets, que garantem a independˆencia dos formatos e funcionalidades b´asicas entre

Figura 5.1: Arquitectura do Software de Interoperabilidade para Terminais

a aplica¸c˜ao, o coupler e o cart˜ao utilizados.

O segundo n´ıvel, “Card”, corresponde a uma camada interna do “Software de Interoperabilidade para Terminais” e ´e respons´avel pela gest˜ao dos m´etodos referen- tes aos cart˜oes, independentemente do leitor utilizado. A interface disponibilizada por esta camada, ´e independente do cart˜ao, embora internamente implemente dife- rentes fun¸c˜oes para diferentes cart˜oes. Esta camada de abstrac¸c˜ao facilita o processo de integra¸c˜ao/adi¸c˜ao de diferentes cart˜oes.

O n´ıvel leitor corresponde tamb´em a uma camada interna do “Software de In- teroperabilidade para Terminais”. Esta implementa fun¸c˜oes de gest˜ao ao n´ıvel da comunica¸c˜ao entre o cart˜ao e o terminal (coupler ) utilizados.

A interface disponibilizada por este n´ıvel, ´e independente do leitor, contudo, internamente utiliza diferentes fun¸c˜oes para diferentes leitores. Esta camada de abstrac¸c˜ao torna mais f´acil o processo de integra¸c˜ao/adi¸c˜ao de diferentes leitores.

Por se tratar de um sistema embebido, todos os m´odulos acima descritos, utilizam um outro, designado por “N´ıvel de Abstrac¸c˜ao do Sistema Operativo”, ou seja, camada de abstrac¸c˜ao do sistema operativo. Esta camada permite isolar o software embebido, do sistema operativo em que ´e executado (real time operating system), implementando fun¸c˜oes de comunica¸c˜ao, log, timer e substituindo os tipos b´asicos, que s˜ao espec´ıficos a determinadas plataformas.

Cap´ıtulo 5. Remote Coupler 41

Todos os m´odulos referidos encontram-se implementados na linguagem C, visto tratar-se de uma solu¸c˜ao para um sistema embebido que deve correr em sistemas operativos de recursos limitados como os presentes nos leitores.

No estado actual do “Software de Interoperabilidade para Terminais”, o acesso aos SAMs s´o pode ser feito localmente dado que este software n˜ao se encontra preparado para a comunica¸c˜ao com os leitores (SAMs) que estejam ligados numa m´aquina remota (Figura 5.2)

Figura 5.2: Arquitectura com SAMs locais

5.2.1

Vis˜ao Funcional

Como se pode ver pela Figura ?? do Apˆendice B (Anexo Confidencial), existe um m´odulo “Manager” que tem duas listas. Estas contˆem todos os cart˜oes e SAMs (necess´arios para a codifica¸c˜ao e descodifica¸c˜ao dos dados, contˆem os algoritmos criptogr´aficos e chaves partilhadas) registados.

Cada cart˜ao, por sua vez, tem a sua informa¸c˜ao espec´ıfica e apontadores para a sua tabela de fun¸c˜oes, a tabela de fun¸c˜oes de cada tecnologia utilizada (aponta para uma zona de mem´oria n˜ao alocada, “NULL”, caso n˜ao suporte a tecnologia em causa), para o coupler e para o SAM associados.

Cada SAM cont´em a sua informa¸c˜ao espec´ıfica e um apontador para o coupler respectivo. Os couplers, por sua vez, contˆem a sua informa¸c˜ao espec´ıfica e um apontador para a tabela de fun¸c˜oes respectiva. Os couplers do SAM e do cart˜ao, poder˜ao apontar para a mesma tabela, caso o SAM se encontre dentro do leitor de cart˜oes ao inv´es de estar num dispositivo diferente.

5.3

Solu¸c˜ao pretendida

Para que as altera¸c˜oes a efectuar se tornassem uma realidade, verificou-se que para o efeito bastaria implementar um novo coupler a adicionar `a API.

Figura 5.3: Arquitectura com SAMs remotos

Com o recurso `as t´ecnicas anteriormente descritas, o processo de adi¸c˜ao de novos cart˜oes e couplers ´e completamente transparente, sendo desnecess´aria qualquer al- tera¸c˜ao ao c´odigo j´a existente. Para o caso espec´ıfico da adi¸c˜ao do coupler “SOAP”, a adi¸c˜ao necess´aria pode ser visualizada na Figura 5.4.

5.4

Implementa¸c˜ao

O bloco “Remote” corresponde `a implementa¸c˜ao do coupler em quest˜ao. Foi ent˜ao criado o ficheiro “remote.c”, que cont´em a respectiva implementa¸c˜ao das fun¸c˜oes a disponibilizar ao N´ıvel Leitor, isto ´e, cont´em a declara¸c˜ao de uma tabela de apon- tadores para fun¸c˜oes “Coupler ftable”, neste caso particular “Remote ftable”, bem como a implementa¸c˜ao destas fun¸c˜oes, para o caso espec´ıfico do “Remote”.

Uma vez que o acesso remoto aos SAM ´e feito via web services, ´e necess´ario gerar todas as classes (os stubs) que permitem invocar objectos remotos. Assim, integrou-se a implementa¸c˜ao do “Remote Coupler” com stubs de acesso ao Servidor com Motor de Carregamento Remoto de T´ıtulos, mantendo a mesma interface que todos os couplers do Software de Interoperabilidade para Terminais. O stub (sec¸c˜ao 3.2.7), actua como fachada de invoca¸c˜ao de m´etodos remotos de forma transparente `

a aplica¸c˜ao, como se de c´odigo local se tratasse.

Para gera¸c˜ao dos stubs cliente para acesso ao Servidor com Motor de Carrega- mento Remoto de T´ıtulos, foi utilizada a ferramenta gSOAP. Esta ferramenta per- mite gerar c´odigo C (stubs) para acesso a web services a partir do WSDL. Na posse WSDL do Servidor com Motor de Carregamento Remoto de T´ıtulos, ´e poss´ıvel gerar todo o c´odigo com o empacotamento e desempacotamento das mensagens SOAP em estruturas (struct) da linguagem C e ainda os m´etodos a invocar no servidor.

Para finalizar, de modo a adicionar o suporte a este coupler, foi adicionado ao ficheiro “api csc.c” que ´e representado na figura pelo m´odulo “Leitor)” a entrada

Cap´ıtulo 5. Remote Coupler 43

Figura 5.4: Arquitectura da SIT

respectiva na tabela existente (j´a explicada anteriormente), ou seja:

#ifdefREMOTE SUPPORT

extern T ICoupler

REMOTE fCouplerTable

#endif

Static T CouplerEntry couplersTable[]= . . .

#ifdefREMOTE SUPPORT

K CSC REMOTE TYPE, &Soap fCouplerTable

#endif

;

A flag que identifica o suporte do novo coupler “REMOTE SUPPORT” foi ent˜ao adicionada `as propriedades do projecto. Esta flag, quando activada, obriga a com- plica¸c˜ao do c´odigo relativo ao “Remote Coupler” originando uma build que suporte este leitor.

Conclus˜ao

Globalmente, os objectivos inicialmente propostos foram claramente atingidos. As- sim o trabalho desenvolvido apresenta um benef´ıcio m´utuo que no caso do autor, traduz-se na satisfa¸c˜ao pessoal e aquisi¸c˜ao de novos conhecimentos. Para a Link Consulting, significa o enriquecimento da sua plataforma SmartCITIES e alarga- mento da sua oferta.

As conclus˜oes do est´agio est˜ao divididas em trˆes partes. A primeira foca o trabalho desenvolvido. A segunda pretende ser a aprecia¸c˜ao do est´agio num cˆomputo geral. A terceira, aflora o trabalho futuro.

6.1

Aprecia¸c˜ao Cr´ıtica do Trabalho Desenvolvido

A primeira fase constituiu a aprendizagem de arquitecturas de integra¸c˜ao e forma¸c˜ao na plataforma BizTalk Server 2006. Ap´os esta etapa, o autor teve de integrar uma equipa de desenvolvimento a trabalhar com a mesma ferramenta. Esta fase permitiu uma melhor compreens˜ao de arquitecturas e tecnologias de integra¸c˜ao que podem ser usadas como ferramentas de suporte para os sistemas de mobile ticketing.

A segunda fase, correspondeu `a constru¸c˜ao de um prot´otipo sob a forma de uma aplica¸c˜ao m´ovel para acesso aos Servi¸cos de Carregamento de Remoto de T´ıtulos. Correspondeu assim ao per´ıodo mais intenso e desafiante do est´agio uma vez que o autor nunca havia tido contacto com a maior parte das tecnologias utilizadas. Foi ultrapassada numa regime de investiga¸c˜ao tendo em conta a muita pesquisa efectuada sobre os diversos conceitos como Web Services, J2ME, SOAP e como conjugar os diversos componentes. Deve tamb´em ser tido em conta, o imaturo estado das tecnologias de suporte ao consumo de web services por parte de aplica¸c˜oes J2ME a correr dispositivos m´oveis, dispositivos esses que apresentam limitados recursos de processamento, mem´oria e energia.

Na terceira fase, foi desenvolvido um web service para expor os Servi¸cos do Mo- tor de Carregamento Remoto de T´ıtulos. A n´ıvel tecnol´ogico, n˜ao houve qualquer

Cap´ıtulo 6. Conclus˜ao 45

obst´aculo dado que as linguagens de programa¸c˜ao utilizadas, o C#, j´a s˜ao do co- nhecimento do autor.

Na ´ultima fase construiu-se o Remote Coupler para encapsular a localiza¸c˜ao dos SAMs. Como a linguagem de programa¸c˜ao utilizada foi o C, permitiu um contacto com a programa¸c˜ao em C sob o paradigma “Object Oriented”’ com o especifica¸c˜ao de interfaces com recurso a tabelas de apontadores. No meu entender, a li¸c˜ao a retirar tem a haver com a vis˜ao e conceitos aplicados com o low coupling entre aplica¸c˜oes e seus m´odulos.

Documentos relacionados