Your SlideShare is downloading. ×
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
TCC - Pedidos Via Bluetooth 3.0
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

TCC - Pedidos Via Bluetooth 3.0

3,433

Published on

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,433
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. UNIP – UNIVERSIDADE PAULISTAPROGRAMA DE GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO PEDIDOS VIA BLUETOOTH (P.V.B.) BRUNO HENRIQUE DE PAULA FERREIRA BRUNO SCHIONATO JOÃO HEYTOR KREITLOW PEREIRA MARCELO FERNANDES D’ALEXANDRE CAMPINAS NOVEMBRO DE 2010
  • 2. BRUNO HENRIQUE DE PAULA FERREIRA BRUNO SCHIONATO JOÃO HEYTOR KREITLOW PEREIRA MARCELO FERNANDES D’ALEXANDREPVB: PEDIDOS VIA BLUETOOTH Trabalho de Conclusão de Curso apresentado no programa de Graduação da Universidade Paulista (UNIP), como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Prof. Jarbas Lopes Cardoso Júnior VERSÃO 2 - REVISADA CAMPINAS NOVEMBRO DE 2010
  • 3. AGRADECIMENTOS DE BRUNO HENRIQUE Durante quatro anos passei pelos mesmos caminhos, executei diversastarefas e enfrentei muitos obstáculos. É verdade também que nestes mesmos 4anos eu tomei novos rumos, ampliei meus horizontes e alcancei diversos objetivos. Com dificuldades e superação, crises e amparos, falta de tempo ecooperação estou aqui, concluindo meu curso, mas não, este não é meu o curso, esim o curso que hoje dedico, agradeço e ofereço a Deus, meus pais, minha família,professores e aos meus amigos companheiros, que do inicio ao fim estiveram aomeu lado. Muito Obrigado!
  • 4. AGRADECIMENTOS DE BRUNO SCHIONATO Agradeço primeiramente a Deus, que é o grande responsável por cadavitória na minha vida e por cada passo que me faz ir além do planejado. Agradeço por cada momento em que estive na Universidade, nãoaprendendo apenas teoria, mas aprendendo muito mais da vida do que sobre teoriascomputacionais. Agradeço pela minha família, pois a família é a base e a estrutura de todoser humano; é nela que encontrei a minha força nos momentos de fraqueza, equando batia a vontade de desistir, foi nela que encontrei motivos para ir além. Agradeço também aos professores, pois foram pacientes e sempre nosapoiaram, cada um da sua forma, mas sempre apoiando.
  • 5. AGRADECIMENTOS DE JOÃO HEYTOR KREITLOW PEREIRA Agradeço e dedico esse trabalho ao meu pai, Wanderley Carlos Pereira,que em vida sempre me ensinou a ter paciência nas horas difíceis, sabedoria nashoras delicadas e que acima de tudo, me ensinou a nunca desistir, principalmentena primeira dificuldade que encontrei. Agradeço também a Deus, pela vida que tenho, pelos amigos que fizdurante todo esse longo caminho de graduação e por ter permitido que eu estivesseaqui, conseguindo completar mais um ciclo da minha vida. Agradeço a minha noiva, Mislane Silva Sousa, por ter tido paciênciacomigo, principalmente nas horas mais difíceis que tive nessa longa jornada. Agradeço a minha família, em especial minha mãe, Mara Silvia KreitlowPereira e a minha irmã, Caroline Fernanda Kreitlow Pereira, por todo apoio querecebi nesse caminho até aqui. Enfim, agradeço a todos que estiveram comigo, que me ajudaramdiretamente ou indiretamente a chegar onde estou, sem vocês, eu sei que nãoconseguiria alcançar os meus objetivos. Muito obrigado!
  • 6. AGRADECIMENTOS DE MARCELO FERNANDES D’ALEXANDRE Agradeço primeiramente a Deus, pois sem Ele não estaria aqui... Agradeço a atenção e compreensão dos meus pais que me deram apoiodesde o começo, sempre com incentivos e boas vibrações... Agradeço aos meus amigos e colegas de turma, parceiros que conhecidurante esses 4 anos... Agradeço a todos os nossos professores pelo conhecimento adquirido,em especial ao nosso orientador Prof. Jarbas Lopes Cardoso Júnior... Meus sinceros agradecimentos a Todos... Muito Obrigado...
  • 7. You have to generate many ideas and then youhave to work very hard only to discover that theydon´t work. And you keep doing that over and overuntil you find one that does work. John Warner Backus, FORTRAN inventor
  • 8. RESUMO Pedidos via Bluetooth, ou simplesmente PVB, é a forma simples, modernae rápida para realizar pedidos através de um aparelho celular por meio do protocolobluetooth. Este aplicativo foi inicialmente desenvolvido para lanchonetes, seu usoreduz expressivamente o tempo de espera cliente / garçom e a efetiva execução dopedido. O PVB torna o processo mais ágil e eficaz, o que reflete maior comodidade,privacidade e assertividade ao cliente. Será possível entender também, osbenefícios proporcionados ao empresário através desta aplicação. Aliado a diversas vantagens, temos o fato do expressivo numero decelulares por habitante no país, o que faz do PVB uma aplicação ainda maispromissora. Palavras-Chave: Bluetooth. Java. Java ME. JSR 82. BlueCove.
  • 9. ABSTRACT Pedidos via Bluetooth, or simply PVB, is a simple, modern and quick wayto place orders via a mobile device through bluetooth protocol. This application was initially developed for fast food stores, its usesignificantly reduces the wait time customer / waiter and effective execution of therequest. The PVB makes the process more efficient and agile, which reflects greatercomfort, privacy and assertiveness to the customer. It´ll also be possible tounderstand the benefits to the manager through this application. Combined with several advantages, we have the fact of a significantnumber of phones per capita in the country, which makes this application morepromissory. Key-words: Bluetooth. Java. Java ME. JSR 82. BlueCove.
  • 10. LISTA DE FIGURASFigura 1 - Equação chave do PVB ............................................................................ 17Figura 2 – Principais fatores de decisão na escolha do tema ................................... 18Figura 3 - Logo Bluetooth .......................................................................................... 20Figura 4 - Distribuição de Frequências (Adaptador de Layton e Franklin; 2000 (5)) . 20Figura 5 - Através do Java VM, a mesma aplicação é capaz de rodar em vários OS(Adaptado do site oficial do Java (1997) (7)) ............................................................. 23Figura 6 – Componentes disponíveis no Java SE (Adaptado do site oficial do Java(2007) (8)) ................................................................................................................. 24Figura 7 - Funcionamento do BlueCove (Adaptado do Site Oficial do BlueCove (11) ).................................................................................................................................. 26Figura 8 - Ciclo de Desenvolvimento Orientado a Teste de Aceitação (Adaptado deNadalete (2010)) ....................................................................................................... 30Figura 9 - Motorola Z3 (Motorola Inc.), primeiro equipamento usado durante ostestes ......................................................................................................................... 33Figura 10 - Nokia Express Music 5130 (Nokia Copyright), segundo equipamentousado durante os testes ............................................................................................ 34Figura 11 - Código-Fonte, Tornando dispositivo detectável ...................................... 36Figura 12 - PVB Servidor, Visão Resumida .............................................................. 36Figura 13 – Código-Fonte, Cliente Conecta .............................................................. 36Figura 14 - Concatenação de números enviado ao servidor ..................................... 37Figura 15 – Código-Fonte, extração dos valores concatenados ............................... 37Figura 16 - Código-Fonte, imprimindo dados recebidos pelo servidor ...................... 38Figura 17 – Código-Fonte, procurando servidor e estabelecendo conexão .............. 39Figura 18 – Código-Fonte, concatenação dos dados digitados pelo usuário e enviadoao servidor................................................................................................................. 39Figura 19 - PVB Cliente, Visão Resumida ................................................................. 40
  • 11. Figura 20 - Aguardando Conexão ............................................................................. 42Figura 21 - Dispositivo Conecta e Servidor para, aguardando pedido ...................... 43Figura 22 - Aplicação Servidor Recebe Pedido (1) ................................................... 44Figura 23 - Aplicação Servidor Recebe Pedido (2) ................................................... 45Figura 24 - Aplicação Servidor Fecha Conexão e mostra o valor total da conta ....... 46Figura 25 - Tela Inicial Aplicação Cliente .................................................................. 47Figura 26 - Dispositivo Móvel a procura da aplicação servidor ................................. 47Figura 27 - Tela de Pedidos ...................................................................................... 48Figura 28 - Servidor Encontrado ............................................................................... 48Figura 29 - Tela de Pedidos Preenchida ................................................................... 49Figura 30 – Preenchendo Tela de Pedidos ............................................................... 49Figura 31 - Opção que Fecha a Conta ...................................................................... 50Figura 32 - Opção que envia dados ao servidor........................................................ 50Figura 33 - Equação do Contador relacionado à Prioridade de Pedidos ................... 55
  • 12. LISTA DE TABELASTabela 1 – Classes disponíveis do Bluetooth (Adaptado de Bluetooth SIG (1998) (4)).................................................................................................................................. 21Tabela 2 - Cardápio de Exemplo, Divisão de Bebidas .............................................. 41Tabela 3 – Cardápio de Exemplo, Divisão de Lanches ............................................. 41
  • 13. LISTA DE ABREVIATURAS E SIGLASAPI – Application Programming InterfaceATDD – Acceptance Test Driven DevelopmentGHz – GigahertzIDE – Integrated Development EnvironmentISM – Industrial, Scientific and MedicalJ2ME – Java 2, Platform Micro EditionJ2SE – Java 2, Platform Standard EditionJava ME – Java Micro EditionJava SE – Java Standard EditionJSR – Java Specification RequestJVM – Java Virtual MachineL2CAP – Logical Link Control and Adaptation ProtocolOBEX – Object ExchangeOS – Operational SystemPVB – Pedidos via BluetoothRFCOMM – RS232 Serial Cable Emulation ProfileSIG – Special Interest GroupTDD – Test Driven DevelopmentVM – Virtual Machine
  • 14. SUMÁRIO1. INTRODUÇÃO.................................................................................................. 16 1.1. OBJETIVOS ............................................................................................. 17 1.2. JUSTIFICATIVA ....................................................................................... 17 1.3. ESCOPO .................................................................................................. 18 1.4. DA VIABILIDADE ..................................................................................... 182. FUNDAMENTAÇÃO TEÓRICA........................................................................ 19 2.1. BLUETOOTH............................................................................................ 19 2.1.1. História......................................................................................... 19 2.1.2. Origem do nome e Logo .............................................................. 19 2.1.3. Funcionamento do Bluetooth ....................................................... 20 2.1.4. Versões do Protocolo................................................................... 21 2.2. JAVA ........................................................................................................ 22 2.2.1. Java Platform, Standard Edition (Java SE) .................................. 23 2.2.2. Java Platform, Micro Edition (Java ME) ....................................... 24 2.2.3. Java APIS for Bluetooth (JSR-82) ............................................... 24 2.3. BLUECOVE .............................................................................................. 25 2.3.1. Descrição ..................................................................................... 25 2.3.2. Funcionamento ............................................................................ 25 2.3.3. Requerimentos Mínimos .............................................................. 26 2.3.4. Limitações.................................................................................... 27 2.3.5. Funções não implementadas ....................................................... 27 2.3.6. A importância do BlueCove no Projeto ........................................ 273. METODOLOGIA DE DESENVOLVIMENTO .................................................... 29 3.1. DESENVOLVIMENTO ORIENTADO A TESTES ..................................... 29 3.2. FERRAMENTAS DE DESENVOLVIMENTO ............................................ 31
  • 15. 3.3. DIFICULDADES ENCONTRADAS ........................................................... 324. DESENVOLVIMENTO ...................................................................................... 33 4.1. EQUIPAMENTOS NECESSÁRIOS .......................................................... 33 4.2. A METODOLOGIA NA PRÁTICA ............................................................. 34 4.3. FUNCIONAMENTO .................................................................................. 35 4.3.1. Aplicação Servidor ....................................................................... 35 4.3.2. Aplicação Cliente ......................................................................... 38 4.3.3. Cardápio ...................................................................................... 41 4.3.4. Exemplo de funcionamento ......................................................... 42 4.4. LIMITAÇÕES ENCONTRADAS ............................................................... 515. CONCLUSÃO ................................................................................................... 52 5.1. CONSIDERAÇÕES FINAIS ..................................................................... 52 5.2. TRABALHOS FUTUROS ......................................................................... 53 5.2.1. Em relação à Segurança ............................................................. 53 5.2.2. Melhorias no Cliente .................................................................... 55 5.2.3. Melhorias no Servidor .................................................................. 556. REFERÊNCIAS BIBLIOGRÁFICAS ................................................................ 577. ANEXOS ........................................................................................................... 60 7.1. CÓDIGO-FONTE APLICAÇÃO SERVIDOR ............................................ 60 7.1.1. Conteúdo do Arquivo Conexao.java ............................................ 60 7.1.2. Conteúdo do Arquivo Main.java ................................................... 62 7.2. CÓDIGO-FONTE APLICAÇÃO CLIENTE ................................................ 62 7.2.1. Conteúdo do Arquivo EchoClient.java ......................................... 62
  • 16. 1. INTRODUÇÃO A tecnologia esta atrelada as nossas vidas assim como a falta de tempo.Através desta afirmação podemos observar que existe uma continua preocupaçãopara que possamos tornar processos, métodos e quaisquer atividades maisdinâmicas, cômodas e eficazes, pois com isso podemos garantir beneficio a tudo e atodas as pessoas. A partir desta premissa baseamos nossa proposta de Pedidos ViaBluetooth, pois apesar de uma ideia inicialmente básica ela traria beneficio as partesenvolvidas. Nossa proposta traz uma forma de contribuir com todos os fatoresanteriormente mencionados, visando ainda um maior bem estar e qualidade de vidadas pessoas. O “Pedidos Via Bluetooth” ou simplesmente PVB, é uma forma simples derealizar um pedido, via celular, desde que este tenha o serviço de Bluetooth, o quetraz melhorias significativas tanto para o usuário deste serviço, como pelocontratante. Este sistema se torna possível, pois o custo de implantação eequipamentos tende a ser rapidamente recuperado, devido ao baixo investimentonecessário para sua implementação, trazendo consigo todo o aspecto de inovação,melhor aplicação de mão de obra e o mais importante, satisfação do cliente, poiseste será atendido de forma mais rápida, dinâmica e assertiva. Outro fator que tornaviável este serviço é o próprio crescimento do numero de celulares, que de acordocom a última pesquisa divulgada pela Agência Nacional de Telecomunicações(Anatel) (1) chega ao incrível numero de 191 milhões, em outubro deste ano, o quesignifica quase um aparelho de celular por habitante. Recentemente, conforme dizCiarelli (2010) (2), a Anatel também divulgou que estima 300 milhões de celulares noBrasil em 2013. Portanto apesar de uma ideia simples e objetiva, trazemos umainovação no setor que pode posteriormente ser aproveitada nas mais diversasatividades, sempre com o intuito de trazer beneficio a todas as partes envolvidasneste tipo de projeto. Página 16 de 68
  • 17. Vale lembrar, que estamos anexando juntamente a essa documentação,um CD-ROM contendo uma copia da documentação em versão PDF, juntamentecom a aplicação (código-fonte e executável). 1.1. OBJETIVOS O PVB tem como principal foco e objetivo: automação do processo depedidos em pequenas e médiasempresas do setor alimentício, emespecífico: pizzarias, bares e TEMPOlanchonetes. Este projeto baseia-se nanecessidade de diminuir ocoeficiente resultante da equação:tempo/pedido e em outro coeficiente PEDIDOresultante da equação: quantidadede garçons por cliente. Quanto Figura 1 - Equação chave do PVBmenores forem esses coeficientes,maior será a eficácia do PVB, sendo feita as medições dos coeficientes comoparâmetros de desempenho e de redução de custos para o cliente/empregador. 1.2. JUSTIFICATIVA Observamos a necessidade de melhorar o atendimento nas mais diversaslojas do ramo alimentício, pelo fato de que muitos destes estabelecimentos tempoucas pessoas no atendimento, fazendo com que seus clientes fiquem muito tempoaguardando até serem atendidos. Isso gera insatisfação ao cliente, que perde tempoaté conseguir ser atendido da forma que gostaria. Porém, do outro lado, o doempregador, também há certa insatisfação, pelo fato de haver muitos clientes paraserem atendidos ao mesmo tempo, fazendo com que os atendentes fiquem irritadose/ou estressados e, por diversas vezes, troquem os pedidos de seus clientes ou,deem demasiada atenção a uma determinada região do restaurante, esquecendo-sede outras, ou até mesmo gerando insatisfação da equipe de atendimento ao cliente. Página 17 de 68
  • 18. 1.3. ESCOPO Embora o uso de aplicações bluetooth seja grande, pois a cada diaaparecem mais softwares que se aproveitam da facilidade de uso desta tecnologia,esse trabalho se limitará apenas ao desenvolvimento de um protótipo de software,voltado para o setor alimentício, com um foco maior em restaurantes, lanchonetes,bares, lojas de fast food, etc. Como protótipo, além dos possíveis erros e limitações aqui relatados, háa possibilidade de que sejam encontrados mais alguns erros, ainda desconhecidospor nossa equipe, porém, aqui nos limitamos à apenas demonstrar que nossa ideia éviável e que ela é possível de ser implantada nas mais diversas lojas existentes. Ressaltamos também, que pelo fato de ser um protótipo, osequipamentos necessários ainda são restritos e, neste momento garantimos suasfuncionalidades apenas aos modelos e marcas descritos mais adiante nestedocumento. 1.4. DA VIABILIDADE Por se tratar de uma tecnologia que está presente em praticamente todosos novos celulares, seu custo de utilização é zero, tendo em vista que o protocolobluetooth já foi pago junto ao celular, o que nos favorece no sentido de que não énecessário à aquisição de licenças para utilização do mesmo. O Java, outra tecnologia que está presente nos modelos de celulares PROTOCOLO mais novos, além de ser uma opção BLUETOOTH gratuita na questão do desenvolvimento, tem custo zero para utilização, já que LINGUAGEM também está presente na grande maioria JAVA dos celulares. CUSTO ZERO PARA Graças a esses desses dois UTILIZAÇÃO fatores: custo zero para utilização do protocolo e para o desenvolvimento do Figura 2 – Principais fatores de software, somado a grande maioria da decisão na escolha do tema Página 18 de 68
  • 19. população já ter um celular com tecnologia bluetooth e Java, faz com que nossoprojeto já tenha um imenso diferencial, onde não há a necessidade de aquisição denovos equipamentos para poder utiliza-lo, pois estaremos usando equipamentos quea grande massa da população já possui, onde estaremos apenas agregando maisuma função aos celulares, fazer pedidos. 2. FUNDAMENTAÇÃO TEÓRICA 2.1. BLUETOOTH 2.1.1. História Sua história começa por volta de 1994 (3), na época em que a empresaEricsson começou a estudar se seria viável ou não desenvolver uma tecnologia quepermitisse a comunicação entre celulares e acessórios utilizando sinais de rádio debaixo custo, ao invés dos tradicionais e caros cabos de dados existentes na época. Porém, foi em 1997 que começou o interesse de outras empresas nestatecnologia. Graças a esse interesse, foi criado o consórcio Bluetooth SIG (SpecialInterest Group) (4), formado pelas empresas: Ericsson, Intel, IBM, Toshiba e Nokia. Foi somente graças ao apoio dessas grandes empresas que o bluetoothcomeçou a virar realidade, e se tornou o que é hoje em dia, um padrão de mercadocompetitivo para conexão de aparelhos celulares e acessórios que está presente empraticamente todos os celulares. 2.1.2. Origem do nome e Logo O nome bluetooth surgiu em homenagem ao antigo rei da Dinamarca,Harald Bluetooth, no final dos anos 900. Ele se destacou por ter conseguido unir aDinamarca e parte da Noruega em um só reino (5). Como a tecnologia bluetooth foi criada por empresas da região Nórdica,seus desenvolvedores resolveram homenagear esse grande rei que fora HaraldBluetooth. Na Figura 3 podemos ver o logo oficial da tecnologia, que combina a letra“B” com a letra “H” em um alfabeto antigo da região. Página 19 de 68
  • 20. Figura 3 - Logo Bluetooth 2.1.3. Funcionamento do Bluetooth Como Layton e Franklin (2000) (5) escreveram, as redes formadasusando a tecnologia bluetooth transmitem dados via ondas de rádio de altafrequência. Ela se comunica em uma frequência de 2,45 giga-hertz (para ser maisexato, é entre 2,402 GHz e 2,480 GHz). Tal frequência, conhecida como ISM, foireservada por acordo internacional para uso de dispositivos industriais, científicos emédicos. Figura 4 - Distribuição de Frequências (Adaptador de Layton e Franklin; 2000 (5)) Umas das primeiras perguntas que todos fazem ao começar a trabalharcom uma nova tecnologia, principalmente quando são tecnologias voltadas paracomunicação sem fio, é se não haverá interferência de outros dispositivos quetambém trabalham com ondas de rádio de baixa frequência. Os dispositivos bluetooth evitam tal interferência com outros sistemasatravés do envio de sinais fracos, de cerca de 1 miliwatt. Para motivo decomparação, os celulares mais modernos podem transmitir um sinal de até 3 watts. Assim como Layton e Franklin (2000) (5) continuam em seu artigo, ossistemas bluetooth podem se conectar com até oito dispositivos simultaneamente.Mesmo com todos esses dispositivos trabalhando ao mesmo tempo, é totalmenteimprovável que haja interferência entre eles, pois o bluetooth usa uma técnicachamada salto de frequência de espalhamento espectral, que praticamenteimpossibilita que mais de um dispositivo transmita na mesma frequência ao mesmotempo. Isso ocorre, porque um dispositivo usa 79 frequências individuais escolhidas Página 20 de 68
  • 21. aleatoriamente dentro de uma faixa previamente designada, mudando de uma paraoutra com regularidade. Em se tratando do protocolo bluetooth, os transmissoresalteram as frequências 1.600 vezes por segundo, o que na prática quer dizer quemuitos dispositivos podem utilizar totalmente uma fatia limitada do espectro de rádio. Como podemos observar na Tabela 1, assim como vários outrosprotocolos, ele possui diversas classes, onde cada classe é mais especifica pracerto tipo de aparelho. Abaixo, descriminamos as classes disponíveis: POTÊNCIA MÁXIMA DE CLASSE ALCANCE TRANSMISSÃO Classe 1 100 mW Até 100m Classe 2 2,5 mW Até 10m Classe 3 1 mW ~ 1m Tabela 1 – Classes disponíveis do Bluetooth (Adaptado de Bluetooth SIG (1998) (4)) 2.1.4. Versões do Protocolo De acordo com ALECRIM (3) o histórico de versões do bluetooth até omomento se resume à: Bluetooth 1.0: A versão 1.0, inclusive a 1.0B, o início de tudo.Justamente por ser primeira versão lançada, havia diversos problemas que faziamcom que sua implementação fosse ainda bem difícil e restrita há apenas algunsmodelos/marcas de celulares específicos; Bluetooth 1.1: Lançada oficialmente em meados de fevereiro de 2001,essa versão firma o bluetooth realmente como um padrão, o padrão IEEE 802.15; Bluetooth 1.2: Seu lançamento ocorreu em novembro de 2003, e comonovidade destacou: Conexões mais rápidas, melhor proteção contra interferênciasexternas, suporte aperfeiçoado a scatternets1 e processamentos de voz maisavançado; 1 Scatternets – Várias piconets (Conexão entre dois ou mais dispositivos usando oprotocolo bluetooth) conectadas. Página 21 de 68
  • 22. Bluetooth 2.0: Foi em novembro de 2004 que a versão 2.0 veio à tona.Com ela, contamos com importantes aperfeiçoamentos que ocorrem no protocolobluetooth, como por exemplo: Diminuição do consumo de energia, aumento navelocidade de transmissão de dados para 3 mbps (2.1 mbps efetivos), correção àsdiversas falhas encontradas na versão anterior, e uma melhor comunicação entre osdispositivos; Bluetooth 2.1: Lançada em meados de agosto do ano de 2007, ela temcomo principal destaque o acréscimo de mais informações nos sinais de busca, issopermite uma seleção melhorada dos dispositivos antes de estabelecerem umaconexão entre si. Houve também melhorias nos procedimentos de segurança,criptografia e uma diminuição ainda maior do consumo de energia; Bluetooth 3.0: Tal versão foi lançada em abril de 2009, e suas principaiscaracterísticas são: Taxas de velocidade ainda maiores durante a transferência dedados (Os dispositivos compatíveis com essa versão do bluetooth podem alcançaraté 24 mbps de transferência) e consumo de energia melhorado; Bluetooth 4.0: A última versão disponível do protocolo. Lançado no finalde 2009, seu foco não foi na velocidade, mas sim no consumo de energiainteligente, economizando ainda mais energia durante sua execução. Vale lembrar que todas as versões são compatíveis entre si, porém suavelocidade é determinada pela velocidade do menor protocolo em uso. 2.2. JAVA Traduzido do próprio site do Java (6), a tecnologia Java, é tanto umalinguagem de programação quanto uma plataforma, criada na década de 90 pelaempresa Sun Microsystems. Como linguagem de programação, conta com uma grande vantagem emrelação às outras linguagens: como seus arquivos contendo o código-fonte nãopossuem código nativo de processadores (ao invés disso, eles possuem osbytecodes apenas da Java VM), e como o Java VM está disponível para os maisdiversos sistemas operacionais, o mesmo arquivo é capaz de rodar nas diversasplataformas, por exemplo: Microsoft Windows, Solaris OS, Linux ou Mac OS. O Página 22 de 68
  • 23. segredo está na Java VM, que é específica de cada sistema operacional, diferenteda linguagem que é a mesma para todos os sistemas. Figura 5 - Através do Java VM, a mesma aplicação é capaz de rodar em vários OS (Adaptado do site oficial do Java (1997) (7)) Já como plataforma, o Java se divide em dois componentes:  O Java Virtual Machine;  Java API (Java Application Programming Interface). Como mencionamos, o Java VM é à base da plataforma Java que écompatível com várias plataformas. Já a Java API é uma larga coleção decomponentes (Classes e interfaces) da implementação Java já prontas, que provemdiversas utilidades. Na verdade, para conseguir cobrir as mais diversas plataformas e sercompatível com vários dispositivos, à tecnologia Java foi dividida em trêsplataformas: Java SE (Java Platform, Standard Edition), Java ME (Java Platform,Micro Edition) e Java EE (Java Platform, Enterprise Edition). Porém, nesse trabalho,focaremos apenas nas duas primeiras. 2.2.1. Java Platform, Standard Edition (Java SE) Página 23 de 68
  • 24. Java SE é a plataforma Java para desenvolvimento de aplicaçõesvoltadas para desktops e/ou servidores, usada como base para as demaisplataformas [JAVA SE, 2007] (8). Na Figura 6 podemos ver todos os componentesque formam o Java SE: Figura 6 – Componentes disponíveis no Java SE (Adaptado do site oficial do Java (2007) (8)) 2.2.2. Java Platform, Micro Edition (Java ME) O Java Platform, Micro Edition (ou simplesmente Java ME) provem umsistema robusto e flexível capaz de executar nos mais diversos equipamentosmóveis e embarcados que existem no mercado, como por exemplo: celulares, PDAs,set-top boxes (conversores usados em televisão digital) e outros equipamentos comcaracterísticas de baixa disponibilidade de recursos [JAVA ME, 2010] (9). 2.2.3. Java APIS for Bluetooth (JSR-82) A JSR-82 é um pacote opcional que possibilita o uso do protocoloBluetooth dentro da linguagem Java, já que a mesma não possui suporte nativo aoprotocolo (10). Tal especificação divide-se em dois pacotes principais:javax.bluetooth e javax.obex. Comecemos pelo pacote javax.bluetooth. Ele é o centro dessaespecificação e, é ele que provê acesso a API responsável pela busca de Página 24 de 68
  • 25. dispositivos e procura de serviço, além de dar suporte as comunicações através dosprotocolos L2CAP2 e RFCOMM3. Já o pacote javax.obex é o responsável por implementar uma API detransferência de objetos via OBEX4. 2.3. BLUECOVE 2.3.1. Descrição Segundo Paul Totterman5 e Skarzhevskyy6 (2004) (11), criadores doBlueCove, ela é uma biblioteca que implementa o protocolo bluetooth(implementação a especificação JSR-82) que é utilizada para a comunicação entreaplicações J2ME e J2SE. Além do fato de ser gratuito (O BlueCove está sob a licença ApacheLicense, Version 2.0, licença está que permite a distribuição comercial de softwarescom o BlueCove, desde que mencionada as fontes), o BlueCove é uma bibliotecapara a linguagem Java de fácil aprendizagem que implementa as principais funçõespara a comunicação com dispositivos bluetooth, fazendo com que não haja anecessidade de criarmos métodos para conexão diretamente dos celulares. 2.3.2. Funcionamento O BlueCove trabalha junto com a Java VM, utilizando uma pilha bluetoothque existe no Windows XP SP2 (No caso do nosso protótipo) que, através desimples funções, fazem todo o trabalho de se comunicar com os aparelhos decelulares via bluetooth, fazendo com que não seja preciso trabalharmos diretamentecom o hardware do celular. Na Figura 7 temos uma imagem retirada do site oficial do BlueCove<http://www.bluecove.org> que mostra em qual camada o BlueCove trabalha: 2 L2CAP - Logical Link Control and Adaptation Protocol: esse protocolo faz parte dasubcamada MAC do Bluetooth e “permite a multiplexação de protocolos de nível superior e osprocessos de segmentação e remontagem de pacotes” (23) 3 RFCOMM - Protocolo que emula um cabo Serial baseado no ETSI TS 07.10 (22) 4 OBEX - protocolo de transferência que define objetos, dados e protocolo decomunicação que dois dispositivos podem usar para trocar tais dados e ou objetos (24) 5 Paul Totterman – Criador do BlueCove 6 Skarzhevskyy - Criador BlueCove Página 25 de 68
  • 26. Figura 7 - Funcionamento do BlueCove (Adaptado do Site Oficial do BlueCove (11) )2.3.3. Requerimentos Mínimos Conforme documentação técnica disponível no site do BlueCove (2004)(11), podemos ver a seguir os requerimentos mínimos para podermos trabalhar como BlueCove: Pilhas que o BlueCove suporta (é necessário ter em mente que uma pilhaé um meio de comunicação entre um dispositivo bluetooth, nesse caso desktop, eum dispositivo ambiente, no nosso caso, um dispositivo móvel): WIDCOMM (Broadcom) BTW Stack software versão 1.4.2.10 SP5 ousuperior; BlueSoleil versão 1.6.0, 2.3 ou 3.2.2.8. A versão 5.0 não é suportada; Página 26 de 68
  • 27. Microsoft Bluetooth Stack (Windows XP SP2 e Windows Mobile 2003); PowerPC - ou Intel-based Mac OS X 10.4 (Bluetooth v1.2) ou superior; Linux com BlueZ Bluetooth stack; Também é necessário um dispositivo Bluetooth que suporte WIDCOMM,BlueSoleil ou o Microsoft Bluetooth Stack; Java 1.1 ou superior para a execução dos binários e Java 1.4 ou superiorpara compilar; E por fim, é indispensável outro dispositivo Bluetooth, para que hajacomunicação entre ambos. 2.3.4. Limitações Também extraído da documentação técnica do BlueCove (2004) (11), osautores continuam informando sobre as principais limitações descobertas durantesos testes com o mesmo: L2CAP o suporte está apenas disponível usando as pilhas: WindowsWIDCOMM Stack, Linux BlueZ e Mac OS X Stack. Como o Microsoft Bluetooth Stack suporta apenas conexões RFCOMM,logicamente o BlueCove também suporta apenas conexões RFCOMM quando éusado tal pilha. Os sistemas Microsoft que suportam tal pilha são: Windows XP SP2,Windows Mobile 2003 ou superior, tudo isso pelo fato do Microsoft Bluetooth Stacknão estar disponível em outros sistemas operacionais da empresa. 2.3.5. Funções não implementadas Os autores do BlueCove (2004) (11) relatam que tanto a autenticação, aautorização e a criptografia ainda não foram implementadas nos dispositivos móveis. 2.3.6. A importância do BlueCove no Projeto “Não reinventar a roda” (Provérbio com autor desconhecido), eis nossaideia básica ao criar este projeto. O que queremos na verdade, é demonstrar como épossível usar de tecnologias simples, mas que estão presentes na maioria doscelulares nos tempos atuais. Por isso mesmo, resolvemos adotar essaimplementação dos controles do Bluetooth feito com base na linguagem de Página 27 de 68
  • 28. programação Java no nosso projeto. Tendo em vista que, igual ao provérbiomencionado, não desejamos reinventar algo que existe, mas sim criar soluçõesnovas utilizando o que já dispomos. A biblioteca BlueCove foi importante para a gerencia do protocolobluetooth. A partir de sua implementação as instruções para manuseio de conexões,a procura por aparelhos, emparelhamento de dispositivos e envio e recebimento deinformações eram gerenciados e providos pelo próprio BlueCove, o que ocasionouganho de tempo, pois tornou aplicação funcional, além do que o objetivo era o deusar e não o de gerenciar o protocolo bluetooth. Página 28 de 68
  • 29. 3. METODOLOGIA DE DESENVOLVIMENTO 3.1. DESENVOLVIMENTO ORIENTADO A TESTES Devido ao curto prazo de desenvolvimento do nosso projeto, adotamosuma metodologia ágil, mais precisamente a desenvolvimento orientado a testes, quecomo Sanchez (2006) (12) menciona, ela se baseia em três regras básicas: Escreva um teste que falhe: É a primeira coisa que devemos fazernesse caso de metodologia, descrever o contexto e definir quais são as verificaçõesque necessitam ser feitas. Vale ressaltar que não existe nenhum limite do número devezes que o teste precisa ser executado; Faça o teste passar: Este é o ponto crucial do desenvolvimentoorientado a testes. Deve-se escrever o mínimo de código para que o teste sejaconcluído com êxito, mesmo que tenhamos a certeza de que o código deve fazermais coisas do que deveria, devemos nos limitar apenas a fazer com o que o testeseja concluído; Melhore o código já escrito: Após o teste ter sido concluído, deve-severificar o código para que seja identificada qualquer melhoria necessária e/oupossível, lembrando que os testes ainda precisam ser concluídos com êxito. Tais passos são repetidos inúmeras vezes, até que não se consigaelaborar novos testes ou, até que o software em questão esteja pronto. Podemos ver claramente o ciclo da metodologia de desenvolvimentoorientado a testes com base na Figura 8: Página 29 de 68
  • 30. Figura 8 - Ciclo de Desenvolvimento Orientado a Teste de Aceitação (Adaptado de Nadalete (2010)) Como Hendrickson (2008) (13) exemplifica, a Figura 8 nos mostra umexemplo prático e completo de como extrair o melhor das práticas dedesenvolvimento orientando a testes e desenvolvimento orientando a teste deaceitação. Nadalete (2010) (14) ainda destaca que as equipes que aplicam taispráticas, principalmente ATDD, tendem a sentir os benefícios ainda na fase dediscussão dos requisitos e estabelecimento dos critérios de aceitação, por meio deuma melhor e mais completa compreensão das necessidades previamentesolicitadas. Por fim, Nadalete (2010) (14) continua informando que quando o cicloproposto na Figura 8 é trabalhado do começo ao fim do projeto, os envolvidostendem a concordar que o sistema tende a se tornar mais testável, manutenível erelativamente fácil. Com a suíte de testes gerada é possível efetuar os testes deregressão automaticamente, fornecendo um pronto feedback sobre as expectativasrelacionadas às funcionalidades bases do sistema, e ao negócio como um todo. Página 30 de 68
  • 31. Além do mais, como Pedroso (2010) (15) cita, entre os principaisbeneficios, podemos citar: Código bem Testado: Como primeiro beneficio, temos o processo deautomação de testes, que ao longo do desenvolvimento, é a obtenção de uma suítede testes de regressão; Segurança para Refatorar: O código fonte foi gerado com o principio darefatoração, o que faz com que ele possa ser reestruturado, transformando-o em umcódigo com maior flexibilidade, sem duplicidades, melhor comunicação e mesmoassim com a funcionalidade preservada.; Design Evolutivo: A escrita dos testes feita antes do código induz aosprogramadores a pensar na interface externa do programa e no seu comportamentoantes de pensar nos detalhes de implementação. Isso faz com que o código-fonteseja projetado a partir de necessidades reais de uso, mantendo a solução sempreobjetiva e simples. Some-se a isso a disposição de escrever inicialmente sempre ocódigo mais simples possível, para somente depois pensar com calma em suaestrutura e torna-lo mais bem feito do ponto de vista do design interno, semmodificar sua interface externa; Documentação: Os testes são exemplos claros e diretos de como seespera que nosso programa se comporte. Uma rápida revisada sobre a suíte detestes quando bem estruturada é suficiente para entender muita coisa sobre ocódigo-fonte. O melhor de tudo, é que sendo os testes executados com frequência emantidos 100% satisfeitos durante todo o tempo, tem-se certeza de que aquelecódigo é uma especificação atualíssima que reflete com precisão o estado atual doprograma; Sistema de organização: A metodologia orientada a testes define comprecisão a sequência de atividades que deve ser desempenhada para a criação docódigo-fonte. 3.2. FERRAMENTAS DE DESENVOLVIMENTO Para o desenvolvimento do nosso projeto, utilizamos apenas uma IDE: Netbeans: Ótima ferramenta para desenvolvimento de softwares,principalmente pela questão dela já possuir plug-ins adicionais para edição visual Página 31 de 68
  • 32. dos programas, fazendo com que seja necessária apenas a inserção de códigosrelacionados às funções em especifico e, também conta o suporte a edição dediversas outras linguagens de desenvolvimento (16). Porém, sua grandedesvantagem, é que seu código-fonte torna-se bastante poluído e muitas vezes,torna-se extremamente difícil de ser editado manualmente devido a sua altacomplexidade, devido ao fato do Netbeans gerar diversas marcações e/ou códigoque por diversas vezes podem ser desnecessários ao uso da aplicação. 3.3. DIFICULDADES ENCONTRADAS Como principais dificuldades no desenvolvimento do nosso projeto,contamos logo de inicio com a falta de conhecimento que tínhamos na questão deconexão entre dispositivos utilizando o protocolo bluetooth. Para sanar tal dificuldade, tentamos procurar por sistemas semelhantes,ou pelo menos sistemas que usassem conexões bluetooth para enviar e receberdados. Foi nesse ponto que descobrimos o BlueCove e resolvemos adota-lo comopilar central do nosso projeto, fazendo com que finalmente tivéssemos uma basepara iniciar o desenvolvimento do PVB. Página 32 de 68
  • 33. 4. DESENVOLVIMENTO Dividimos a aplicação em dois módulos: O Módulo Servidor e o MóduloCliente. O primeiro foi desenvolvido para ser executado em um notebook e/oudesktop, já o segundo, deverá ser instalado em um celular comum. 4.1. EQUIPAMENTOS NECESSÁRIOS Durante os testes executados e para o funcionamento correto do softwarecliente, precisamos de um celular que tenha no mínimo: Java Virtual Machine; Tecnologia Bluetooth. No decorrer do processo de criação deste protótipo, todos os seus testesforam utilizando os seguintes modelos de celulares: Motorola Z3 e o Nokia ExpressMusic 5130. Figura 9 - Motorola Z3 (Motorola Inc.), primeiro equipamento usado durante os testes Página 33 de 68
  • 34. Figura 10 - Nokia Express Music 5130 (Nokia Copyright), segundo equipamento usado durante os testes Já para o funcionamento do servidor, foi preciso a aquisição de umdispositivo de conexão bluetooth comum e, tendo em vista que estamos na fase deprotótipo, não nos importamos com a classe e/ou outras especificações dodispositivo. 4.2. A METODOLOGIA NA PRÁTICA Como descrito na Figura 8, o Desenvolvimento Orientado a Testes deAceitação consiste de diversas fases. Como primeira fase, ouve diversas reuniõesda equipe de desenvolvimento, onde era discutido como deveria ser e se comportarnosso software. Nada de muito concreto nessa fase, apenas diversas ideiaslançadas e debatidas. Já na segunda fase, a de refino, foi onde filtramos tudo o queseria viável e possível de ser implementado. Durante essas fases iniciais, foielaborado a nossa primeira documentação, que consistia de apenas um resumo dotrabalho em questão. Tal resumo foi apresentado em sala de aula, e exaustivamentemelhorado, dando origem à documentação final deste Trabalho de Conclusão deCurso. Aqui entramos na terceira fase, o desenvolvimento em si. Começamos pordesenvolver a aplicação servidor, pois imaginamos que este seria o ponto crítico de Página 34 de 68
  • 35. todo o nosso sistema. Pois bem, seguindo a metodologia escolhida, após asprimeiras linhas de código, começamos em paralelo, os testes do sistema. Ointeressante dessa metodologia, é que sempre temos o código bem testado, fazendocom que diversos erros, sejam facilmente detectados, logo no início dodesenvolvimento. Por fim, na última fase da metodologia orientada a testes de aceitação,após desenvolver apenas um pedaço do software, e testa-lo por inúmeras vezes,detectamos a possibilidade de aperfeiçoar tal função. Isso foi feito por incontáveisvezes, até percebermos que não era mais possível otimiza-la. E o ciclo continua sempre se repetindo. Seguimos tais passos,implementando função por função até que finalmente nosso protótipo estavaoperacional e pronto para ser apresentado. 4.3. FUNCIONAMENTO Na prática, com um cardápio impresso e disponível na mesa do cliente, épossível que ele identifique os códigos dos itens que deseja solicitar e então,coloque-os na aplicação cliente previamente instalada em seu celular. A aplicaçãoservidor recebe tais itens, e os responsáveis apenas entregam na mesa do cliente oque foi solicitado. 4.3.1. Aplicação Servidor O servidor consiste de dois arquivos: Main.java e Conexao.java. Oprimeiro arquivo contém apenas uma chamada que invoca o servidor propriamentedito. Já o segundo, é o responsável por fazer toda a parte de conexão,emparelhamento de dispositivos e recebimento dos dados enviados da aplicaçãocliente. Além disso, esse lado da aplicação consiste de um software desenvolvidoem J2SE que funciona de uma forma extremamente simples. Ao carrega-lo, ele abreuma conexão bluetooth, tornando-se detectável para os outros dispositivos queestejam ao seu alcance e que possuem o aplicativo cliente instalado. Na Figura 11,podemos observar diretamente no código-fonte, onde exatamente o servidor torna-se detectável por outros dispositivos bluetooth: Página 35 de 68
  • 36. 37 System.out.println("Habilitando dispositivo para ser descoberto...");38 local = LocalDevice.getLocalDevice();39 local.setDiscoverable(DiscoveryAgent.GIAC);40 System.out.println("Dispositivo habilitado");41 server = (StreamConnectionNotifier)Connector.open(url);42 System.out.println("Aguardando por conexoes..."); Figura 11 - Código-Fonte, Tornando dispositivo detectável Como já citado, a parte de conexão é feita através de simples chamadas,onde é requisitado à biblioteca do BlueCove que faça a conexão com o hardwarebluetooth, tornando nosso servidor disponível para aceitar conexões de outrosdispositivos bluetooth. INICIO SERVIDOR DETECTÁVEL CLIENTE CONECTA AGUARDANDO PEDIDO Figura 12 - PVB Servidor, Visão Resumida Após o software tornar-se detectável, qualquer celular que tenha a versãoCliente do PVB pode facilmente detectar e conectar ao sistema, conseguindo assimtransferir todos os seus pedidos. A Figura 13, nos mostra a parte do código-fonte responsável por aceitardispositivos que possuem a aplicação cliente instalada. Como observado, após oservidor detectar que houve a conexão de algum dispositivo, ele para e aguarda atéque os dados do pedido sejam recebidos.44 conn = server.acceptAndOpen();45 System.out.println("Cliente conectado");46 System.out.println("Aguardando Pedido...n"); Figura 13 – Código-Fonte, Cliente Conecta O funcionamento do servidor é extremamente simples, ele recebe umastring com um conjunto de vários números concatenados e separados pelo símbolode dois pontos. Por exemplo: Página 36 de 68
  • 37. 14 : 015 : 02 Identifica a Identifica o Identifica o quantidade numero da item do item mesa pedido pedido Figura 14 - Concatenação de números enviado ao servidor No exemplo da Figura 14, temos a sequência 14:015:02, onde os doisprimeiros números identificam qual mesa o cliente está sentado, seguido por maistrês números, estes responsáveis por identificar o item que o cliente deseja, e porfim temos mais dois números, que significam a quantidade do item solicitado. Como podemos observar na Figura 15, o código-fonte que separa osvalores recebidos da aplicação cliente, é composto por:58 if ( !(cmd.equals("conta"))) {59 mesa = "";60 item = "";61 quantidade = "";6263 contador = cmd.length();64 for(int i = 0;i<contador;i++){65 if (i < 2) {66 mesa += cmd.substring(i,i+1);67 }else {68 if ((i > 2) && (i < 6)) {69 item += cmd.substring(i,i+1);70 }else{71 if (i > 6) {72 quantidade += cmd.substring(i,i+1);73 }74 }}} Figura 15 – Código-Fonte, extração dos valores concatenados Desta forma, fica fácil manipular todos os dados enviados pelo cliente,dando-nos a possibilidade para que possamos fazer o que bem entendemos com osdados recebidos. Página 37 de 68
  • 38. Também podemos notar pela Figura 16, onde está localizada a parte docódigo-fonte responsável por captar os dados enviados pelo cliente e exibir na tela: 84 if (Integer.parseInt(item) <= 11){ 85 totalParcial = Integer.parseInt(quantidade) * ((Double)dff.parse(itemsPreco[Integer.parseInt(item)].toString()).doubleValue()); 86 total += totalParcial; 87 88 if (contadorItem < 10){ 89 mostraContador = "0"+String.valueOf(contadorItem); 90 } else { 91 mostraContador = String.valueOf(contadorItem); 92 } 93 System.out.println(" "+mostraContador+" "+item+" " +itemsBar[Integer.parseInt(item)].toString()+" "+quantidade+" R$" +itemsPreco[Integer.parseInt(item)].toString() + "R$"+String.format("%.2f",totalParcial)); 94 } else{ 95 System.out.println( "Item nao encontrado.."); 96 } Figura 16 - Código-Fonte, imprimindo dados recebidos pelo servidor 4.3.2. Aplicação Cliente Já o lado cliente, foi desenvolvido utilizando J2ME que, como jádiscutimos, é uma subdivisão da linguagem de programação Java. O cliente deverá ter o aplicativo instalado em seu celular, para isso énecessário que seja feito um cadastro junto ao estabelecimento, e a partir disto édisponibilizado o software ao cliente e este por sua vez instala a aplicação em seuaparelho celular. Assim que iniciado, é necessário efetuar a busca por algum servidor queesteja disponível ao seu redor. Para isso, existe uma opção de iniciar busca. Aoiniciar tal busca, o software cliente procura por todos os dispositivos bluetooth queestejam ao seu alcance e que possuem o software servidor instalado. Como podemos observar na Figura 17, é exatamente o que acabamos dedescrever. Nesse pedaço do código-fonte, é feito a chamada de função para a buscade dispositivos (neste caso, dispositivos que possuem a aplicação servidorpreviamente instaladas e já com a conexão bluetooth habilitada). Logo após, éestabelecido à conexão com o servidor. Se não for possível conectar, será exibido Página 38 de 68
  • 39. uma mensagem de erro (Error Connecting), caso contrário o cliente se conectará eestará disponível para poder enviar os pedidos que desejar.349 public void FindDevices(){350 try{351 devices = new java.util.Vector();352 LocalDevice local = LocalDevice.getLocalDevice();353 DiscoveryAgent agent = local.getDiscoveryAgent();354 agent.startInquiry(DiscoveryAgent.GIAC,this);355 }catch(Exception e){this.do_alert("Erro ao iniciar busca" , 4000);}356 }357358 public void FindServices(RemoteDevice device){359 try{360 UUID[] uuids = new UUID[1];361 uuids[0] = new UUID("27012f0c68af4fbf8dbe6bbaf7aa432a",false);362 local = LocalDevice.getLocalDevice();363 agent = local.getDiscoveryAgent();364 agent.searchServices(null,uuids,device,this);365 }catch(Exception e) { this.do_alert("Erro ao iniciar busca" , 4000);}366 } Figura 17 – Código-Fonte, procurando servidor e estabelecendo conexão Após efetuar o emparelhamento entre o cliente e o servidor, existem trêsopções disponíveis para o cliente, que são as mesmas do lado servidor. A únicadiferença aqui, é que é nesse ponto que o usuário deve inserir os valores. Emseguida, o software cliente trata de concatenar os dados (assim como descriminadona parte do servidor), e então envia a mensagem através da conexão Bluetoothpreviamente estabelecida. É possível observar na Figura 18, onde dentro do código-fonte é feito aconcatenação dos dados digitados pelo usuário e em seguida transmitidos aoservidor:196 dout.writeChars(mesa + ":" + item + ":" + qtde + "n");197 dout.flush(); Figura 18 – Código-Fonte, concatenação dos dados digitados pelo usuário e enviado ao servidor Também está disponível a opção de “Fechar Conta”. Opção essa, queenvia uma mensagem ao servidor informando para finalizar o pedido da mesa. Em seguida, ocorrem dois fatos importantes: Página 39 de 68
  • 40.  No Servidor: É somada a conta, gerando um valor total e encerrada aconexão com o dispositivo móvel. Todos os itens pedidos e valores são exibidos natela do servidor;  No Cliente: O programa apenas é encerrado. Na Figura 19, destacamos uma versão extremamente resumida de comodeve funcionar a aplicação cliente: PROCURA ENVIA INICIO CONECTA SERVIDOR PEDIDO Figura 19 - PVB Cliente, Visão Resumida Página 40 de 68
  • 41. 4.3.3. Cardápio Para fins de testes, criamos um cardápio simples, contendo apenasalguns itens de exemplo, assim como mostrado abaixo: Cardápio – Divisão de Bebidas CÓDIGO DESCRIÇÃO VALOR UNITÁRIO 001 Coca-Cola Lata R$ 2,50 002 Coca-Cola Light Lata R$ 2,50 003 Kuat Lata R$ 2,50 004 Kuat Light Lata R$ 2,50 005 Fanta Laranja Lata R$ 2,50 Tabela 2 - Cardápio de Exemplo, Divisão de Bebidas Cardápio – Divisão de Lanches CÓDIGO DESCRIÇÃO VALOR UNITÁRIO 006 X-Tudo R$ 9,90 007 X-Egg R$ 8,00 008 X-Salada R$ 5,00 009 X-Burger R$ 5,50 010 Cachorro-Quente R$ 3,00 011 Misto Quente R$ 3,00 Tabela 3 – Cardápio de Exemplo, Divisão de Lanches Página 41 de 68
  • 42. 4.3.4. Exemplo de funcionamento4.3.4.1. Módulo Servidor Figura 20 - Aguardando Conexão Página 42 de 68
  • 43. Figura 21 - Dispositivo Conecta e Servidor para, aguardando pedido Página 43 de 68
  • 44. Figura 22 - Aplicação Servidor Recebe Pedido (1) Página 44 de 68
  • 45. Figura 23 - Aplicação Servidor Recebe Pedido (2) Página 45 de 68
  • 46. Figura 24 - Aplicação Servidor Fecha Conexão e mostra o valor total da conta Página 46 de 68
  • 47. 4.3.4.2. Módulo ClienteFigura 25 - Tela Inicial Aplicação Figura 26 - Dispositivo Móvel a Cliente procura da aplicação servidor Página 47 de 68
  • 48. Figura 28 - Servidor Encontrado Figura 27 - Tela de Pedidos Página 48 de 68
  • 49. Figura 29 - Tela de Pedidos PreenchidaFigura 30 – Preenchendo Tela de Pedidos Página 49 de 68
  • 50. Figura 32 - Opção que envia dados ao Figura 31 - Opção que Fecha a servidor Conta Página 50 de 68
  • 51. 4.4. LIMITAÇÕES ENCONTRADAS Por ainda se tratar de um protótipo, nosso software ainda conta comalgumas limitações, onde dentre elas podemos destacar: Limite de Conexões Simultâneas: O software servidor não aceita maisde um dispositivo conectado ao mesmo tempo, esta limitação esta ligadadiretamente à programação, onde ainda não foi implementada tal função, que paraque seja corrigida, será necessário a utilização de threads; Suporte a poucos Aparelhos: O software cliente simplesmente não rodaem alguns modelos de aparelhos móveis devido ao fato destes aparelhos conteremdiferentes versões da linguagem Java; Limite de Aparelhos ao Redor: O bluetooth conta com uma limitação de8 conexões simultâneas em sua rede. Portanto, se houver mais de 8 aparelhos como bluetooth habilitado no raio do dispositivo, há uma grande possibilidade daaplicação cliente retornar erro na hora que tentar localizar a aplicação servidor. Pordiversas vezes, o erro informado é “Dispositivo Não Encontrado”, devido o fato deem algumas circunstâncias o servidor ser o 9º dispositivo a ser localizado.Infelizmente, essa é uma limitação do próprio protocolo bluetooth. Página 51 de 68
  • 52. 5. CONCLUSÃO 5.1. CONSIDERAÇÕES FINAIS No início do desenvolvimento da aplicação elencamos váriasfuncionalidades que iriamos implementar: iniciar uma conexão entre um celular e umcomputador, onde o celular deveria ser capaz de enviar dados ao computador, e omesmo ser capaz de interpreta-los, tudo isso utilizando o protocolo de comunicaçãobluetooth. Ao término pode-se observar que as funcionalidades inicialmentepropostas foram criadas, atingindo nossas principais metas e objetivos. A grande dificuldade inicial, foi conseguir estabelecer uma conexãobluetooth. Poucos exemplos e material extremamente escasso na área dificultaramainda mais nosso entendimento e o desenvolvimento da aplicação. O uso da biblioteca BlueCove para o desenvolvimento da aplicação comoum todo nos facilitou a implementação e um melhor entendimento de como funcionaconexões Bluetooth com a linguagem de programação Java. Como mencionamos,essa biblioteca é uma implementação complexa da especificação JSR-82, que temcomo propósito padronizar um conjunto de APIs Java que possibilite a umdispositivo integrar um ambiente bluetooth. Nossa principal ideia ao desenvolvermos uma aplicação desse tipo éagilizar a forma como os clientes são atendidos nos mais variados estabelecimentosdo ramo alimentício. Notamos que poderíamos aproveitar de tecnologias que estãopresentes no nosso dia-a-dia, tal como celulares com conexão bluetooth, e alinguagem Java, que está presente também na grande maioria dos novos celulares. É claro que apesar de tais tecnologias estarem presentes em nossocotidiano, é fácil notar a falta de aplicações que as use. Não sabemos ao certoporque isso ocorre. Talvez pelo fato da precária documentação sobre como trabalharcom dispositivos móveis que atualmente existem no mercado. Se os fabricantes dosmesmos disponibilizassem algumas informações internas do funcionamento de taisdispositivos, isso facilitaria o ingresso em tal área. Ou se pelo menos houvessealgum outro tipo de padrão, que definiria os tipos de aplicações ou produtos que osdispositivos móveis necessitariam ter ou suportar. De qualquer modo, não existe Página 52 de 68
  • 53. uma resposta totalmente concreta para tal pergunta. Essa ainda é uma área poucoexplorada pelo mercado. Além disso, na questão do desenvolvimento dos softwares em si, temos oproblema da difícil implementação da conexão bluetooth, devido ao fato de poucadocumentação e exemplos disponíveis para podermos trabalhar com o mesmo. Opadrão JSR-82 veio para tentar suprir tal necessidade, porém ainda não é muitoexplorado e estudado pelos desenvolvedores, que mesmo assim encontram váriasdificuldades ao tentar implementa-lo. Foi essa a razão que fez com que adotássemos a biblioteca BlueCove,que é a responsável por implementar o padrão JSR-82, que facilitou nosso trabalhode desenvolvimento, pois podemos focar totalmente no desenvolvimento da nossaaplicação. Contudo, esperamos que com mais esse trabalho consigamos chamaratenção das empresas e desenvolvedores, para o grande potencial que podemos terutilizando tecnologias que a grande maioria da população já possui. Entendemosque com o fim desse trabalho, fomos incentivados a buscar cada vez maisconhecimento não só profissional, mas também acadêmico. 5.2. TRABALHOS FUTUROS Em seguida, alguns itens que pretendemos implementar para que nossaaplicação esteja pronta para ser comercializada: a. Servidor com suporte a múltiplas conexões simultâneas; b. Interação com banco de dados. 5.2.1. Em relação à Segurança A camada de segurança que será implementada terá seu funcionamentobaseado principalmente em conceitos de sessão e whitelist. Whitelist, em uma tradução literal seria lista branca, que tem pordefinição listar os usuários ou sistemas que podem acessar - ou tem permissão paraisso - um determinado serviço, sistema ou dado sendo sua antítese a Blacklist, quelista quem não tem esse privilégio. Página 53 de 68
  • 54. Nossa opção por usarmos uma whitelist é pela maior facilidade emdeterminarmos quem poderá acessar o sistema do que quem não poderá acessá-lo;o cálculo para essa conclusão é simples:  Se número de bloqueados for maior que o número de permitidos, usarwhitelist;  Se número de bloqueados for menor que o número de permitidos, usarblacklist. Outra ponderação na escolha de whitelist foi na sua facilidade demanutenção, pois é mais fácil inserir um elemento em um universo de permitidos doque retirar um elemento de um universo de restritos. A whitelist será composta pelos MAC’s (Media Access Control) Addressdos celulares cadastrados nos estabelecimentos. Sessão é o método que determina que o usuário acessando determinadoserviço ou sistema é o mesmo que o sistema acredita estar logado, em outrostermos, é responsável por garantir a identidade do cliente/usuário. O processo de autenticação de um usuário/cliente no sistema começarácom uma solicitação do cliente para abrir uma conexão com o Sistema/Servidor;uma vez aceita, o sistema irá validar o MAC Address do cliente comparando-o com awhitelist. Caso o sistema encontre o MAC Address na relação da whitelist, ele daráinício a uma sessão, caso contrário será fechada a conexão. Uma vez que a sessão for aberta, sua vida útil será até o encerramentoda conta ou se houver algum problema na conexão. Por medidas de segurança, caso outro dispositivo tente acessarsimultaneamente a sessão, o mesmo terá a sua conexão cancelada; evitando queterceiros façam pedidos de forma anônima ou por roubo de identidade. Cada sessão é única e direcionada a apenas a um usuário, no caso MACAddress; sendo que cada MAC Address só pode ter uma sessão por vez e cadasessão só poderá ter um único MAC Address durante toda a sua vida útil. Página 54 de 68
  • 55. 5.2.2. Melhorias no Cliente Pensamos primeiramente em sanar as limitações da aplicação,melhorando a conexão, de forma que se possa encontrar o servidor mais facilmente.estudaremos também, uma forma de tornar o software cliente funcionar na maioriados celulares disponíveis no mercado, tornando cada vez mais viável nossosoftware. Em segundo plano trabalharemos o visual implementando uma tela desaudações e um cardápio mais completo contendo promoções feitas pela casa, umavez que o cliente se conectar ao servidor, uma lista de promoções será envida aocliente, possibilitando ser acessada qualquer momento, um bom incentivo para o usodo software, uma vez que essas promoções só serão validas se o pedido vier pelosoftware... pensamos também na possibilidade de quando a conta for fechada, oresumo da conta, juntamente com a soma dos itens sejam enviados a aplicaçãocliente, pensamos em algo mais simples para esta aplicação, porem funcional, deforma que fique bem genérica, podendo ser utilizada em todos os estabelecimentosque sejam franqueados ao PVB. 5.2.3. Melhorias no Servidor A equipe está estudando implementar a interface do servidor de formasimples e objetiva. Há algumas métricas que pretendemos utilizar como: menusrelacionados por assuntos semelhantes e a quantidade de “cliques” que sãonecessários para navegar de um menu a outro.  Prioridade dos pedidos: Iremos implementar um contador que seráresponsável por calcular o tempo de espera de cada pedido. Assim o sistema iráordenar com maior prioridade os pedidos que tiverem o valor do contador mais elevado. Sendo a fórmula para o TEMPO TEMPO contador: DO ATUAL PEDIDO Tempo Atual - Tempo do pedido CONTADORFigura 33 - Equação do Contador relacionado à Prioridade de Pedidos Página 55 de 68
  • 56.  Menus/Telas: 1. Cadastro de Produto: É a janela que será responsável porcadastrar o produto no Banco de Dados; informações como: marca, descrição, tipode unidade de medida e número do produto (id) serão obrigatórios; sendo o númerodo produto de origem automática pelo Sistema. 2. Cadastro de Fornecedores: Nessa janela serão cadastrados osdados dos fornecedores, assim como nome, endereço, CNPJ e contato da empresa. 3. Pedidos: Será a janela que ficará disponível para osresponsáveis pela cozinha, nela estarão os pedidos que estão abertos, ordenadosconforme prioridade. 4. Entrada de Notas Fiscais: Nessa tela serão inseridas as notasfiscais no Sistema, que automaticamente alimentarão o estoque. Há também anecessidade da criação de um ícone para impressão de notas fiscais. 5. Estoque: Nosso conceito de estoque foi inspirado no SAP, ondecada nota fiscal é responsável por alimentar o estoque. Cada item já tem que estarpreviamente cadastrado no banco, via tela de Cadastro de Produto; e cadaFornecedor também tem que estar previamente cadastrado, via tela de Cadastro deFornecedores. Conforme houver o consumo via pedido o estoque terá o débitoautomaticamente. Página 56 de 68
  • 57. 6. REFERÊNCIAS BIBLIOGRÁFICAS 1 CARDOSO, F. H. Agência Nacional de Telecomunicações. Anatel,1997. Disponivel em: <http://www.anatel.gov.br>. Acesso em: 19 Março 2010. 2 CIARELLI, M. Anatel estima 300 milhões de celulares no Brasil em2013. Exame, 2010. Disponivel em:<http://exame.abril.com.br/tecnologia/noticias/anatel-estima-300-milhoes-celulares-brasil-2013-561697>. Acesso em: 22 Outubro 2010. 3 ALECRIM, E. Tecnologias Bluetooth. InfoWester, 2008. Disponivel em:<http://www.infowester.com/bluetooth.php>. Acesso em: 19 Outubro 2010. 4 ERICSSON, IBM, TOSHIBA, NOKIA, 3COM, LUCENTTECHNOLOGIES, MICROSOFT E MOTOROLA. Bluetooth Special Interest Group.Bluetooth SIG, 1998. Disponivel em: <http://www.bluetooth.com>. Acesso em: 15Outubro 2010. 5 LAYTON, J.; FRANKLIN, C. Como Funciona o Bluetooth. Como asCoisas Funcionam?, 2006. Disponivel em:<http://informatica.hsw.uol.com.br/bluetooth.htm>. Acesso em: 22 Outubro 2010. 6 ORACLE. Conceitos e Definições Úteis. Java SE, 2007. Disponivel em:<http://www.java.com/pt_BR/download/faq/helpful_concepts.xml>. Acesso em: 15Outubro 2010. 7 ORACLE. About the Java Technology. Java, 2007. Disponivel em:<http://download.oracle.com/javase/tutorial/getStarted/intro/definition.html>. Acessoem: 11 Outubro 2010. 8 ORACLE. Java SE 6 Documentation. Java SE, 2007. Disponivel em:<http://download.oracle.com/javase/6/docs/index.html>. Acesso em: 11 Outubro2010. 9 ORACLE. Java ME at a Glance. Java ME, 2007. Disponivel em:<http://www.oracle.com/technetwork/java/javame/overview/index.html>. Acesso em:11 Outubro 2010. 10 JSR-82. JSR-82: Java Bluetooth, 2006. Disponivel em:<http://www.jsr82.com>. Acesso em: 15 Outubro 2010. Página 57 de 68
  • 58. 11 BLUECOVE Project. BlueCove, 2004. Disponivel em:<http://www.bluecove.org>. Acesso em: 12 Março 2010. 12 SANCHEZ, I. Introdução ao Desenvolvimento Orientado a Testes(TDD). Coding Dojo Floripa, 2006. Disponivel em:<http://dojofloripa.wordpress.com/2006/11/07/introducao-ao-desenvolvimento-orientado-a-testes>. Acesso em: 26 Outubro 2010. 13 HENDRICKSON, E. Driven Development with Tests: ATDD and TDD.Test Obsessed, 2008. Disponivel em: <http://testobsessed.com/wp-content/uploads/2008/12/atddexample.pdf>. Acesso em: 3 Novembro 2010. 14 NADALETE, L. G. Capítulo 7: Teste Ágil, Como Implementar?Conversando Sobre Teste de Software, 2010. Disponivel em:<http://dftestes.gershon.info/index.php/Cap%C3%ADtulo_7:_Teste_%C3%A1gil,_como_implementar%3F>. Acesso em: 3 Novembro 2010. 15 PEDROSO, B. Desenvolvimento Orientado a Testes, ConceitosBásicos, Aplicação e Benefícios. Java Magazine, n. 82, p. 66-74, Agosto 2010. 16 SUN MICROSYSTEMS. NetBeans IDE. NetBeans, 200. Disponivelem: <http://www.netbeans.org>. Acesso em: 12 Março 2010. 17 CAMARGO, D. JavaFree. JavaFree, 2003. Disponivel em:<http://www.javafree.org>. Acesso em: 12 Março 2010. 18 MATTOS, É. T. Programação Java para Wireless. São Paulo:Digerati Books, 2005. Capítulo 1 ao 6, onde é passada uma base para odesenvolvimento de softwares usando a linguagem J2ME. 19 TANENBAUM, A. S. Redes de Computadores. Rio de Janeiro:Elsevier, 2003. Capítulo 4 explica a Arquitetura, Aplicação e As Camadas doProtocolo Bluetooth. 20 TAURION, C. Internet Móvel. 1ª Edição. ed. Rio de Janeiro: Campos,2002. Capítulo 2 onde há uma introdução ao protocolo Bluetooth e o Capítulo 3,onde são relacionadas as aplicações voltada para a Internet Móvel. 21 SCRIMGER, R. TCP/IP, A Bíblia. 7ª Edição. ed. Rio de Janeiro:Elsevier, 2002. Capítulo 25 detalhe à Internet Sem Fio. Página 58 de 68
  • 59. 22 GLEIZER, G. D. A.; JUNIOR, A. D. L. E. S. J. Bluetooth - CamadaFísica e Controle de Acesso ao Meio. GTA / UFRJ - Grupo de Teleinformática eAutomação, 2007. Disponivel em:<http://www.gta.ufrj.br/grad/07_1/bluetooth/glossar.htm>. Acesso em: 22 Novembro2010. 23 GLEIZER, G. D. A.; JUNIOR, A. D. L. E. S. J. Protocolo de Controle eAdaptação de Enlace Lógico (L2CAP). GTA / UFRJ - Grupo de Teleinformática eAutomação, 2007. Disponivel em:<http://www.gta.ufrj.br/grad/07_1/bluetooth/l2cap.htm>. Acesso em: 22 Novembro2010. 24 WIKIPEDIA. OBEX. Wikipédia, 2010. Disponivel em:<http://pt.wikipedia.org/wiki/OBEX>. Acesso em: 22 Novembro 2010. Página 59 de 68
  • 60. 7. ANEXOS 7.1. CÓDIGO-FONTE APLICAÇÃO SERVIDOR 7.1.1. Conteúdo do Arquivo Conexao.java 1 package serverfinal; 2 3 import java.io.*; 4 import java.text.DecimalFormat; 5 import javax.bluetooth.*; 6 import javax.microedition.io.*; 7 8 public class Conexao { 9 private int contador = 0; 10 private int contadorItem = 0; 11 private String mostraContador = ""; 12 private String item = ""; 13 private String mesa = ""; 14 private String mesaA = ""; 15 private String quantidade =""; 16 private double totalParcial = 0; 17 private double total = 0; 18 private LocalDevice local = null; 19 private StreamConnectionNotifier server = null; 20 private StreamConnection conn = null; 21 public final UUID uuid = new UUID("27012f0c68af4fbf8dbe6bbaf7aa432a",false); 22 public final String name = "Echo Server"; 23 public final String url = "btspp://localhost:" + uuid + ";name=" + name +";authenticate=false;encrypt=false;"; 24 private String[] itemsBar = {"", "Coca-Cola Lata", "Coca-Cola Light Lata", "KuatLata", "Kuat Light Lata", "Fanta Laranja Lata", "X-Tudo", "X-Egg", "X-Salada", "X-Burger", "Cachorro-Quente", "Misto Quente"}; 25 private String[] itemsPreco = {"", "2,50", "2,50", "2,50", "2,50", "2,50", "9,90","8,00", "5,00", "5,50", "3,00", "3,00"}; 26 private static DecimalFormat dff = (DecimalFormat)DecimalFormat.getInstance(); 27 28 public Conexao() { 29 try { 30 System.out.println("n------------------------------------------------------------------"); 31 System.out.println("<><><>< Sistema Servidor P.V.B. ><><><>"); 32 System.out.println("-------------------------------------------------------------------"); 33 System.out.println("Habilitando dispositivo para ser descoberto..."); 34 local = LocalDevice.getLocalDevice(); 35 local.setDiscoverable(DiscoveryAgent.GIAC); 36 System.out.println("Dispositivo habilitado"); 37 server = (StreamConnectionNotifier)Connector.open(url); Página 60 de 68
  • 61. 38 System.out.println("Aguardando por conexoes..."); 39 System.out.println("-------------------------------------------------------------------"); 40 conn = server.acceptAndOpen(); 41 System.out.println("Cliente conectado"); 42 System.out.println("Aguardando Pedido...n"); 43 44 DataInputStream din = new DataInputStream(conn.openInputStream()); 45 46 contadorItem = 0; 47 while(true){ 48 String cmd = ""; 49 char c; 50 while (((c = din.readChar()) > 0) && (c!=n) ){ 51 cmd = cmd + c; 52 } 53 54 if ( !(cmd.equals("conta"))) { 55 mesa = ""; 56 item = ""; 57 quantidade = ""; 58 59 contador = cmd.length(); 60 for(int i = 0;i<contador;i++){ 61 if (i < 2) { 62 mesa += cmd.substring(i,i+1); 63 }else { 64 if ((i > 2) && (i < 6)) { 65 item += cmd.substring(i,i+1); 66 }else{ 67 if (i > 6) { 68 quantidade += cmd.substring(i,i+1); 69 } 70 } 71 } 72 } 73 74 contadorItem++; 75 if (contadorItem == 1){ 76 System.out.println("----------------------------------------------------------------"); 77 System.out.println("MESA: " + cmd.substring(0,2)); 78 System.out.println("----------------------------------------------------------------"); 79 System.out.println(" ITEM CODITEM DESCRICAO QTDE VALORUNITARIO TOTAL"); 80 } 81 82 if (Integer.parseInt(item) <= 11){ 83 totalParcial = Integer.parseInt(quantidade) * ((Double)dff.parse(itemsPreco[Integer.parseInt(item)].toString()).doubleValue()); 84 total += totalParcial; 85 Página 61 de 68
  • 62. 86 if (contadorItem < 10){ 87 mostraContador = "0" + String.valueOf(contadorItem); 88 } else { 89 mostraContador = String.valueOf(contadorItem); 90 } 91 System.out.println(" " + mostraContador + " " + item + " " +itemsBar[Integer.parseInt(item)].toString() + " " + quantidade + " R$ " +itemsPreco[Integer.parseInt(item)].toString() + " R$ " + String.format("%.2f",totalParcial)); 92 } else{ 93 System.out.println( "Item nao encontrado.."); 94 } 95 96 }else { 97 System.out.println("-----------------------------------------------------------------"); 98 System.out.println("Valor da conta: R$" + String.format("%.2f", total)); 99 System.out.println("------------------------------------------------------------------");100 }101 }102103 } catch (Exception e) { System.out.println("Cliente desconectado...");}104 }105 } 7.1.2. Conteúdo do Arquivo Main.java1 package serverfinal;23 public class Main {45 public static void main(String[] args) {6 Conexao echoserver = new Conexao();7 }8} 7.2. CÓDIGO-FONTE APLICAÇÃO CLIENTE 7.2.1. Conteúdo do Arquivo EchoClient.java 1 import javax.microedition.midlet.*; 2 import javax.microedition.lcdui.*; 3 import javax.microedition.io.*; 4 import javax.bluetooth.*; 5 import java.io.*; 6 7 public class EchoClient extends MIDlet implementsCommandListener,DiscoveryListener { 8 9 List main_list,dev_list;10 Command exit,ok;11 TextBox cmd; Página 62 de 68
  • 63. 12 Display display; 13 java.util.Vector devices,services; 14 LocalDevice local; 15 DiscoveryAgent agent; 16 DataOutputStream dout; 17 int currentDevice = 0; 18 String qtde,mesa,item; 19 20 private Form form; 21 private TextField textField1; 22 private TextField textField; 23 private TextField textField2; 24 private Command okCommand; 25 private Command exitCommand; 26 private Command itemCommand; 27 28 public EchoClient() { 29 } 30 private void initialize() { 31 } 32 public void startMIDlet() { 33 switchDisplayable(null, getForm()); 34 } 35 public void resumeMIDlet() { 36 } 37 public void switchDisplayable(Alert alert, Displayable nextDisplayable) { 38 Display display = getDisplay(); 39 if (alert == null) { 40 display.setCurrent(nextDisplayable); 41 } else { 42 display.setCurrent(alert, nextDisplayable); 43 } 44 } 45 public Form getForm() { 46 if (form == null) { 48 form = new Form("Pedido", new Item[] { getTextField(), getTextField1(),getTextField2() }); 49 form.addCommand(getOkCommand()); 50 form.addCommand(getExitCommand()); 51 form.addCommand(getItemCommand()); 52 form.setCommandListener(this); 53 } 54 return form; 55 } 56 public void commandAction(Command command, Displayable displayable) { 58 if (command == exit){ 59 exitMIDlet(); 60 } 61 if (command == List.SELECT_COMMAND){ 62 if (displayable == main_list){ Página 63 de 68
  • 64. 63 if (main_list.getSelectedIndex() >= 0){ 64 FindDevices(); 65 do_alert("Procurando dispositivos...", Alert.FOREVER); 66 } 67 } 68 if (displayable == dev_list){ 69 StreamConnection conn = null; 70 ServiceRecord service = (ServiceRecord) 71 services.elementAt(dev_list.getSelectedIndex()); 72 String url = service.getConnectionURL( 73 ServiceRecord.NOAUTHENTICATE_NOENCRYPT, 74 false); 75 try { 76 conn = (StreamConnection) Connector.open(url); 77 dout = new DataOutputStream(conn.openOutputStream()); 78 switchDisplayable(null, getForm()); 79 80 } catch (Exception e) {this.do_alert("Error Connecting" , 4000);} 81 82 } 83 } 84 if(command == ok){ 85 } 86 if (displayable == form) { 87 if (command == exitCommand) { 88 exitMIDlet(); 89 } else if (command == itemCommand) { 90 try{ 91 dout.writeChars("contan"); 92 dout.flush(); 93 } catch (Exception e) {this.do_alert("Error sending data" , 4000);} 94 } else if (command == okCommand) { 95 try{ 96 97 mesa = textField.getString(); 98 item = textField1.getString(); 99 qtde = textField2.getString();100101 if (mesa.length() == 1) {102 mesa = "0"+mesa;103 }104105 if (item.length() == 1) {106 item = "00"+item;107 } else{108 if (item.length() == 2) {109 item = "0"+item;110 }111 }112 if( qtde.length() == 1) { Página 64 de 68
  • 65. 113 qtde = "0"+qtde;114 }115 dout.writeChars(mesa+":"+item+":"+qtde+"n");116 dout.flush();117118 textField1.setString("");119 textField2.setString("");120121 } catch (Exception e) {this.do_alert("Error sending data" , 4000);}122 }123 }124 }125 public TextField getTextField() {126 if (textField == null) {127 textField = new TextField("Mesa", null, 2, TextField.NUMERIC);128 }129 return textField;130 }131132 public TextField getTextField1() {133 if (textField1 == null) {134 textField1 = new TextField("Item", null, 3, TextField.NUMERIC);135 }136 return textField1;137 }138 public TextField getTextField2() {139 if (textField2 == null) {140 textField2 = new TextField("Quantidade", null, 2, TextField.NUMERIC);141 }142 return textField2;143 }144 public Command getOkCommand() {145 if (okCommand == null) {146 okCommand = new Command("Ok", Command.OK, 0);147 }148 return okCommand;149 }150 public Command getExitCommand() {151 if (exitCommand == null) {152 exitCommand = new Command("Sair", Command.EXIT, 0);153 }154 return exitCommand;155 }156 public Command getItemCommand() {157 if (itemCommand == null) {158 itemCommand = new Command("Fechar Conta", Command.ITEM, 0);159 }160 return itemCommand;161 }162 public Display getDisplay () { Página 65 de 68
  • 66. 163 return Display.getDisplay(this);164 }165 switchDisplayable (null, null);166 destroyApp(true);167 notifyDestroyed();168 }169 public void startApp() {170 main_list = new List("P.V.B.",Choice.IMPLICIT);171 dev_list = new List("Selecione o Dispositivo",Choice.IMPLICIT);172 cmd = new TextBox("Text to echo","",120,TextField.ANY);173 exit = new Command("Sair",Command.EXIT,1);174 ok = new Command("Send",Command.OK,1);175 display = Display.getDisplay(this);176177 main_list.addCommand(exit);178 main_list.setCommandListener(this);179 dev_list.addCommand(exit);180 dev_list.setCommandListener(this);181 cmd.addCommand(ok);182 cmd.setCommandListener(this);183184 main_list.append("Procurar Servidor",null);185 display.setCurrent(main_list);186 }187 public void pauseApp() {}188189 public void FindDevices(){190 try{191 devices = new java.util.Vector();193 LocalDevice local = LocalDevice.getLocalDevice();194 DiscoveryAgent agent = local.getDiscoveryAgent();195 agent.startInquiry(DiscoveryAgent.GIAC,this);196 }catch(Exception e){this.do_alert("Erro ao iniciar busca" , 4000);}197 }198199 public void FindServices(RemoteDevice device){200 try{201 UUID[] uuids = new UUID[1];202 uuids[0] = new UUID("27012f0c68af4fbf8dbe6bbaf7aa432a",false);203 local = LocalDevice.getLocalDevice();204 agent = local.getDiscoveryAgent();205 agent.searchServices(null,uuids,device,this);206 }catch(Exception e){this.do_alert("Erro ao iniciar busca" , 4000);}207 }208 public void destroyApp(boolean unconditional) {}209210 public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClassdeviceClass) {211 devices.addElement(remoteDevice);212 } Página 66 de 68
  • 67. 213214 public void inquiryCompleted(int param) {215 switch (param) {216 case DiscoveryListener.INQUIRY_COMPLETED:217 if (devices.size() > 0){218 services = new java.util.Vector();219 this.FindServices((RemoteDevice)220 devices.elementAt(0)); 385 }else221 do_alert("Nenhum dispositivo encontrado",4000);222 break;223 case DiscoveryListener.INQUIRY_ERROR:224 this.do_alert("Erro na busca" , 4000);225 break;226 case DiscoveryListener.INQUIRY_TERMINATED: 392this.do_alert("Busca cancelada" , 4000);227 break;228 }229 }230231 public void serviceSearchCompleted(int transID, int respCode) {232 switch(respCode) {233 case DiscoveryListener.SERVICE_SEARCH_COMPLETED:234 if(currentDevice == devices.size() -1){235 if(services.size() > 0){236 display.setCurrent(dev_list);237 } else238 do_alert("O serviço não foi encontrado",4000);239 } else{240 currentDevice++;241 this.FindServices((RemoteDevice)devices.elementAt(currentDevice));242 }243 break;244 case DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE:245 this.do_alert("Dispositivo não alcançável" , 4000);246 break;247 case DiscoveryListener.SERVICE_SEARCH_ERROR:248 this.do_alert("Erro na busca" , 4000);249 break;250 case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:251 this.do_alert("Nenhum registro encontrado" , 4000);252 break;253 case DiscoveryListener.SERVICE_SEARCH_TERMINATED:254 this.do_alert("Busca cancelada" , 4000);255 break;256 }257 }258259 public void servicesDiscovered(int i, ServiceRecord[] serviceRecord) {260 for (int x = 0; x < serviceRecord.length; x++ )261 services.addElement(serviceRecord[x]); Página 67 de 68
  • 68. 262 try{263 dev_list.append(((RemoteDevice)devices.elementAt(currentDevice)).264 getFriendlyName(false),null);265 }catch(Exception e){this.do_alert("Erro ao iniciar a pesquisa" , 4000);}266 }267268 public void do_alert(String msg,int time_out){269 if (display.getCurrent() instanceof Alert ){270 ((Alert)display.getCurrent()).setString(msg);271 ((Alert)display.getCurrent()).setTimeout(time_out);272 }else{273 Alert alert = new Alert("Bluetooth");274 alert.setString(msg);275 alert.setTimeout(time_out);276 display.setCurrent(alert);277 }278 }279 } Página 68 de 68

×