Construção de um protótipo de comunicação por tecnologia Bluetooth para o servidor Open Simulator



Documentos relacionados
MANUAL DE CONSULTA RÁPIDA DO MODEM OPTIONS FOR NOKIA Copyright 2002 Nokia. Todos os direitos reservados Issue 2

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

MANUAL DE CONSULTA RÁPIDA DO NOKIA MODEM OPTIONS. Copyright 2003 Nokia. Todos os direitos reservados Issue 1

INF1013 MODELAGEM DE SOFTWARE

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET

Um sistema SMS 1 simplificado

Sistemas Distribuídos

ZS Rest. Manual Profissional. Instalação do Software. v2011

Operador de Computador. Informática Básica

5.2 MAN s (Metropolitan Area Network) Redes Metropolitanas

ZSRest. Manual de Configuração. CheckOutPDA. V2011-Certificado

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

Sistemas Distribuídos

Tutorial de Utilização do CellControl SMS I/O em rede DXNET com CLP Dexter µdx série 200

Manual de Administração DPS Printer 2.1 NDDigital S/A - Software

Prototype, um Design Patterns de Criação

Redes e Telecomunicações

Manual do Utilizador

UNIVERSIDADE ESTADUAL DO OESTE DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS COLEGIADO DE INFORMÁTICA

bit Tecnologia ao Serviço do Mundo Rural

P HC XL - Nem calcula o produto que temos para si...

Tecnologia PCI express. Introdução. Tecnologia PCI Express

A licença é vinculada ao HD (Hard Disk) da máquina, esta não podendo ser substituída em caso de formatação ou perda de qualquer espécie do hardware.

Orientação a Objetos

Olho por olho, e o mundo acabará cego. Mohandas Gandhi

Java Mail Server. Manual do Utilizador

Entrar neste site/arquivo e estudar esse aplicativo Prof. Ricardo César de Carvalho

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

Sistemas Distribuídos Capítulos 3 e 4 - Aula 4

Mobile Business. Your sales on the move.

ARQUITETURA DE COMPUTADORES

Relatório Preliminar de. Projecto de Telecomunicações em Contexto Empresarial II. VoIP Desenvolvimento de Aplicações em Plataformas Open Source

Intellikon 2.2. Código de Manual: Ik22001POR Versão do Manual: 1.0 Última revisão: 21/2/2006 Aplica-se a: Intellikon 2.2.

Para começarmos as configurações, primeiramente vamos habilitar o DVR Veicular para o acesso. Clique em Menu e depois entre em Geral.

O gjaiku é um aplicação de desktop para uso com o serviço online de microblogging, Jaiku.

Manual SAGe Versão 1.2 (a partir da versão )

AirPort Express: configurações iniciais

FTIN Formação Técnica em Informática Módulo Sistema Proprietário Windows AULA 04. Prof. André Lucio

Redes de Acesso Telefone VoIP WiFi baseado em Windows Mobile

Manual Gespos SMS. (ultima revisão 20 Fev. 2003)

Tutorial para envio de comunicados e SMS

ElectroControlo M01 Manual do Utilizador

Tutorial de Utilização do CellControl SMS 200 em rede DXNET com CLP Dexter µdx série 200

Como instalar uma impressora?

CONFIGURAÇÃO MINIMA EXIGIDA:

Manual Captura S_Line

Securithor - Configuração Inicial Monousuário

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

Softwise Consultoria e Informática Desenvolvendo soluções

Computação Orientada aos Serviços. WF (parte 1) Semestre de Inverno 12/13

Tipos de Rede. Maria João Bastos MegaExpansão

Programa de Instalação do Lince GPS

IMPORTANTE: O PNM4R2 não entra em estado funcional enquanto o Windows não

1 - Imprimir documentos na rede da escola.

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web;

Guia. PDA e SmartPhones. Windows Mobile, Pocket PC e CE.

Sistemas Operacionais

O Manual do Desktop Sharing. Brad Hards Tradução: Pedro Morais

Programa de Atualização de Pontos do Lince GPS

Comm5 Tecnologia Protocolo MI. Protocolo. Família MI

FemtoM2M. Programação de Firmware. Versão: 1.0 Data:

Para participar de um mapa colaborativo usando o Cmap Tools

Um Driver NDIS Para Interceptação de Datagramas IP

Arquitetura de Rede de Computadores

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER

Relatório Preliminar de. Projecto em Contexto Empresarial I. VoIP Desenvolvimento de Aplicações em Plataformas Open Source

Java ME e suas principais tecnologias de conectividade. Gracieli Begia Mateus

C9850 MFP / ES3640 MFP

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTÁTISTICA GRADUAÇÃO EM CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMUNICAÇÃO DE DADOS

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

Manipulação de Dados em PHP (Visualizar, Inserir, Atualizar e Excluir) Parte 2

Índice: Nitgen do Brasil

Ferramentas de Modelação e Análise de Sistemas baseadas em Redes de Petri (RdP)

Trabalho Prático Nº1 Introdução ao C#.NET

Introdução a Java. Hélder Nunes

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Servidor de Dados. Sistemas de Informação Módulo 4

3. DESCRIÇÃO DO PROTÓTIPO

Grupo I [6v] Considere o seguinte extracto de um programa de definição de uma calculadora apenas com a função soma de dois valores reais

REDES DE COMPUTADORES

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS

DELEGAÇÃO REGIONAL DO ALENTEJO CENTRO DE FORMAÇÃO PROFISSIONAL DE ÉVORA REFLEXÃO 3

Protocolo TCP/IP. Neste caso cada computador da rede precisa de, pelo menos, dois parâmetros configurados:

TC - IOT CSD M2M Emulator. Emulador de ligações comutadas de comunicação de dados (Circuit Switched Data) Versão: 1.

BEM VINDO (A) À ACTVS SOFTWARE E APOIO A GESTÃO

Office 365. Office365 Página 1

Redes de Computadores. Guia de Laboratório Configuração de Redes

LW056 SWEEX WIRELESS LAN PC CARD 54 MBPS. O Windows detectará automaticamente o aparelho e aparecerá a seguinte janela.

Ao ligar o equipamento, você verá a mensagem abaixo, o objetivo dela é fazer a configuração mínima para LOGAR ao servidor da Internet.

ALTERNATIVA PARA CONEXÃO VIA INTERNET DE IP MASCARADO A IP REAL

Manual de Infraestrutura para Alunos

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

CPU Unidade Central de Processamento. História e progresso

TUTORIAL DE UTILIZAÇÃO. Rua Maestro Cardim, cj. 121 CEP São Paulo - SP (11)

Procedimentos para Reinstalação do Sisloc

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Transcrição:

Construção de um protótipo de comunicação por tecnologia Bluetooth para o servidor Open Simulator (Technical report APEX-TR04) PTDC/EIA-EIA/116069/2009 André dossantoslealgomes

This work is funded by ERDF - European Regional Development Fund through the COMPETE Programme (operational programme for competitiveness) and by National Funds through the FCT - Fundação para a Ciência e a Tecnologia (Portuguese Foundation for Science and Technology) within project FCOMP-01-0124-FEDER-015095 and by FCT, under grant UMINHO/BI/55/2012.

Índice Capítulo1 Introdução...3 Capítulo2 OpenSimulator...4 Capítulo3 TecnologiaBluetooth...6 MicrosoftBluetoothStacknoWindows...7 Emparelhamento...7 Capítulo4 InTheHand 32feet.Net...9 Instalarabiblioteca32feet.Net...9 Referenciarabiblioteca32feet.NetnumprojectoMicrosoftVisualStudio...9 Capítulo5 BluetoothApp... 11 BluetoothAppServer... 12 BluetoothAppClient... 22 Capítulo6 Conclusão... 25 2

Capítulo1 Introdução Este projecto insere se numa bolsa de iniciação científica e tem por objectivo construir um protótipo base deumprogramaquesejacapazdeestabelecera comunicaçãosemfiosatravésdeumdispositivomóveleumservidordeanimação de mundos virtuais.éintençãoquenofinaloprograma comunique com um servidor através de bluetooth e queeste, por sua vez, seja uma ponte até ao servidor de mundos virtuais. Deve conseguir se que sejam trocadas mensagens nosdoissentidos. Opresentedocumentoestádivididoemcincograndescapítulosparaalémdeste que compõe a sua introdução. No Capítulo 2 será apresentada a plataforma OpenSimulator oqueéoopensimulator,paraqueserveeemquemedida se encaixa neste projecto. No Capítulo 3 é feita uma breve referência à tecnologia bluetoothnumâmbitogeral.explica seemqueconsisteestatecnologiaecomose podeprepararumambientedetrabalhoparatrabalharcomela.nocapítulo4é apresentada a biblioteca.net que foi usada e como se poderá instalá la. No Capítulo5,omaisimportante,éondeéexplicadaaarquitecturadaaplicaçãobem comooseucódigoparaquesepossapercebertodoofuncionamentodamesma. Porfim,noCapítulo6,éfeitaumabreveconclusãosobreotrabalhodesenvolvido. 3

Capítulo2 OpenSimulator O projecto OpenSimulator, normalmente apelidado de OpenSim, é um projecto que consiste numa aplicação servidor open source muito semelhante ao conhecidosecondlife,quetemcomofunçãoprincipaloalojamentodemundos virtuais(verfigura 1).Atravésdeumaaplicaçãocliente,outilizadorliga se ao mundovirtualeacedeaummundoqueécarregadopeloservidor.nestemundo,o utilizadorpodeinteragircomoutroseviverumavidatotalmentevirtual. OOpenSimulatorusaumabibliotecadoSecondLifeparacuidardacomunicação entreoclienteeoservidor,e,poressemotivo,épossívelconnectarumservidor doopensimatravésdeumclientedosecondlife.outrosclientesparaosecond Life podem também ser connectados uma vez queosecondlifeeoopensim usamosmesmosprotocolosdecomunicação. Figura1 ScreenshotdomundovirtualnumservidorOpenSimulator. OOpenSimulatorpodefuncionaremdoismodosdistintos:individualouemmodo grid.nomodoindividual,umúnicoprocessotratadetodoosimulador.nomodo grid,váriosaspectosdesimulaçãosãoseparadosentremúltiplosprocessos,que podemserexecutadosemdiferentesmáquinas.omodoindividualésimplesde configurarmasé,poroutrolado,limitadoaumpequenonúmerodeutilizadores. 4

Omodogridtemcomopotencialofactodeserbastanteescalonávelconformeo crescimentodonúmerodeutilizadores. OOpenSimulatoréescritonalinguagemdeprogramaçãoC#,epodecorrersoba plataformaopen sourcemonooumicrosoft.net.graçasàsuaconstruçãolimpae modularizada, o OpenSimulator é uma plataforma facilmente extensível em termosdefuncionalidadesatravésdaadiçãodemódulosplug in. No âmbito deste projecto, é esta a plataforma sob a qual será trabalhadaa aplicação a construir. A aplicação deverá, de algum modo, efectuar uma comunicaçãocomoservidordoopensimulator.maisadianteserávistocomoisto éfeito. 5

Capítulo3 TecnologiaBluetooth O Bluetooth é um protocolo proprietário que usa redes sem fios para troca de dados em curtas distâncias. Através de pequenas ondas de rádio, ele cria redes pessoaissemfios(doinglêswirelesspersonalareanetworks WPAN's)ecomisto consegue que tanto dispositivos fixos como dispositivos móveis comuniquem entresi.nosexemplosdedispositivosqueusembluetoothnosdiasdehojeestão os telemóveis, PDA's e pocket PC's, impressoras, computadores portáteis, máquinasdigitais,consolasdevideojogos,entremuitosoutros. A título de curiosidade, a empresa responsável pelo desenvolvimento e patenteamentodestatecnologiaéa Bluetooth Special Interest Group. Este grupo nãoémaisdoqueumaglomeradodemaisde2000empresasdetodoomundo quesejuntaramcomopropósitodeproduzirasespecificaçõesparaobluetooth 1.0,em1999.Entreelasestãonomescomo:Agere,Ericsson,IBM,Intel,Microsoft, Motorola,NokiaeToshiba. Figura2 DispositivosBluetooth. Oobjectivodestatecnologiaéconseguirtransmitirdadosentreequipamentosque possuam um circuito de rádio de baixo custo. O limite máximo para o estabelecimento de comunicação entre eles é normalmente um raio de algumas dezenasdemetrosparaemissoresdeclasseiieligeiramentemenosdequeuma centenademetrosparaemissoresmaiscapazes,declassei.nestesentido,eao contrárioasligaçõesinfra vermelhos(irda),osdispositivosqueusembluetooth nãonecessitamdeestaralinhadosdirectamenteumcomooutroparasepoderem 6

comunicar,oquefazcomqueestatecnologiasejamaisflexívelnasuautilizaçãoe permita a comunicação entre duas salas que estejam próximas, por exemplo. Assim, devido a estas características e tal como foi referido anteriormente, a tecnologia de Bluetooth serve essencialmente para ligar periféricos sem a necessidade de se estar a usar fios para o efeito. Dos exemplos já mencionados talvezostelemóveissejamocasomaispopularnousodamesma,comafinalidade de trocar informações como contactos, fotos e media diverso com outros telemóveis e computadores. O auricular Bluetooth que substitui o tradicional auricularcomfioséoutroexemplodousodestatecnologia. MicrosoftBluetoothStacknoWindows OsistemaoperativoMicrosoftWindowsXP,apartirdaversãoServicePack2,já inclui a sua própria Bluetooth Stack, ou seja, o software necessário para que se possa usar a comunicação por Bluetooth entre um dispositivo externo e o computador. Comparando a versão da stack do Windows com outras implementadasporoutrascompanhiasestatem,provavelmente,menossuporte que as demais. Porém, é suficientemente capaz de cobrir a grande maioria das necessidadesdodia a diasejamelasaligaçãoaumaimpressoraoucomunicação com um dispositivo móvel (telemóvel ou PDA). A stackdowindowstemoutra vantagememrelaçãoàconcorrênciaqueéofactodeestarfortementeintegrada comosistemaoperativo. Para instalar este software não é necessário fazer nada além de connectar o adaptador Bluetooth.Comofoireferido,a partir do Microsoft Windows SP2, a stack jávemcomosistemaoperativo.assim,algunsinstantesdepoisdo adaptadortersidoconnectadoaowindowspelaprimeiravez,estevaidetectá loe iráinstalar/activarastackautomaticamente.duranteoprocessoserápedidoao utilizadorqueatribuaumnomeàsuamáquinaqueservirápara,nofuturo,outros dispositivosaidentificaremesaberemseessamáquinaestávisívelparaelesou não. Emparelhamento MuitosdosserviçosfornecidosatravésdeBluetoothpodemexpôrdadosprivados econfidenciaisoupermitirquepartedaconexão(umououtroutilizador)possa controlar o dispositivo a que se conectou. Por razões de segurança é por isso necessário controlar que dispositivos podem ser conectados a um outro dispositivodado.aomesmotempo,esemprequeestejamnoalcance,éútilpara os dispositivos Bluetooth que seja possível estabelecer uma ligação entre aparelhosquejáseconhecemequesaibamqueéseguroestabeleceressamesma 7

ligação sem a intervenção do utilizador. Pararesolveresteproblema,esta tecnologia usa um processo chamado emparelhamento (do inglês pairing).dois dispositivosnecessitamdeestaremparelhadosparapoderemcomunicarumcom ooutro.oprocessodeemparelhamentoédesencadeadogeralmentedaprimeira vezqueumdispositivorecebeumpedidodeconexãoporpartedeumoutrocom quemnuncafoiemparelhado.umavezestabelecidaesta"ponte",osdispositivos lembrar se ão no futuro a quem se poderão conectarsemanecessidadede autorizaçãoporpartedoutilizador.sefordesejado,arelaçãodeemparelhamento podeserremovidaaqualqueraltura. Omodocomoesteprocessoacontecenapráticaémuitosimples:odispositivoque desejaestabeleceraconexãotemdeintroduzirumapalavra passe(passkey)queo outro dispositivo ao qual se deseja conectar também deverá conhecer. Desta forma, garante se que não existem ligações não desejadas e perigosas. Assim, e depois dos dois dispositivos terem introduzido a mesma palavra passe, o emparelhamento é concluído com sucesso e a conexão é feita.apartirdeste momentocadaumdosdispositivosconheceooutroeligar se áaeledecadavez que este esteja no seu alcance. Como foi referido anteriormente, estesperfisde emparelhamentopoderãoserremovidosaqualqueraltura. 8

Capítulo4 InTheHand 32feet.Net Porformaaconseguiroobjectivodesteprojecto,ouseja,acomunicaçãoapartir domundovirtualdoopensimulatorcomumdispositivomóvelreal,atravésde tecnologiasemfiosbluetooth,foinecessárioprocederaalgumapesquisacomo intuitodeencontraralgumtipodeferramentaquefosseútilnestecontexto. Foi encontrado o32feet.net, queéumprojectoconcebidopelaempresain The Hand com o objectivo de tornar as tecnologias de rede de área pessoal como o Bluetooth, IrDa (Infra Vermelhos) e outras, facilmente acessíveis a partir de código.net. Este projecto suporta aplicações desktop, móveis e sistemas embebidos. Actualmenteabrangeasseguintestecnologias: Bluetooth IrDa(Infra Vermelhos) ObjectExchange O suporte a Bluetooth requer um dispositivo com a Microsoft Bluetooth Stack instalada. Requer também a.net Compact Framework v2.0 ou acima ou a WindowsCE.Net4.2ouacimaparadispositivosmóveis.Paraambientesdesktop comwindowsxpouvistaouacimaénecessárioterinstaladaa.netframework v2.0,pelomenos. Instalarabiblioteca32feet.Net Parasepoderusarabibliotecacomosmétodoseclassesqueelapoderáoferecer aoprogramadorénecessárioprocederaumapequenaesimplesinstalação.esta instalaçãoirácopiarparaumapastaumficheiro.dllquedeveserreferenciadono MicrosoftVisualStudio.Paraalémdisto,tambémficamdisponíveisumasériede demosdediversosprojectos,utilizandoestabiblioteca.ocódigo fontedosdemos encontra setantoemc#comoemvisualbasic.net. Referenciarabiblioteca32feet.NetnumprojectoMicrosoft VisualStudio Depois de instalada, a biblioteca 32feet.Net deve ser referenciada, dentro do MicrosoftVisualStudio,paraqueosseusmétodosfiquemdisponíveisdentroda 9

classequeseestáaconstruir.paratal,bastairaomenudesolutionexplorer,abrir apastacomotítuloreferences,ecomobotãodireitodoratofazeraddreference. Depois deste passo basta procurar na lista de referências a que tem o nome de InTheHand.Net.Personaleadicioná la. 10

Capítulo5 BluetoothApp A aplicação BluetoothApp é constituída por dois blocos fundamentais: o BluetoothAppServereoBluetoothAppClient(verFigura3).Comoosprópriosnomes oindicam,nestesdoisblocos,háumquefuncionacomooclienteeumoutroque funcionacomooservidor. Figura3 MódulosdoBluetoothApp. Estes dois módulos são estritamente necessários. Como já foi mencionado, o objectivoéfazeracomunicaçãodoavatar(personagem)queestáainteragirno mundo virtual, dentro do servidor OpenSim,comumdispositivomóvelquese ligueaeleporbluetooth.deveráserpossívelenviarerecebermensagensdolado dequemestácomodispositivomóveletambémdoladodequemestáa"jogar" noopensimulator. Neste sentido, a aplicação foi pensada de forma a que o servidor OpenSim comunique com um outro servidor através de Sockets. Esteoutroservidor é o BluetoothAppServer,poisirátratardetodaapartedegestãodasmensagensque circulam desde o dispositivo móvel até ao servidor OpenSim e vice versa. O BluetoothAppServercomunicaatravésdetecnologia bluetooth com o dispositivo móvel (um PDA, neste caso). Assim, a parte servidor da aplicação (BluetoothAppServer), será a responsável pela comunicação,porsockets,como servidoropensime,tendoestaligaçãoestabelecida,deverásercapazderecebere enviar mensagens com sucesso para omesmo.aomesmotempo,deveráser também capaz de enviar e receber mensagens do PDA (atravésdaaplicação BluetoothAppClient)ereencaminhá lascorrectamenteparaoservidoropensim. 11

Resumindo, conforme se vê na figura Figura 3, pode se dizer que a aplicação principal é constituída pelos dois blocos apresentados em que um deles é executado num PDA e o outro é executado numa máquina Desktop. Obloco executadonopdatemafunçãoderecebereenviarmensagensparaoblocoque está a ser executado na máquina Desktop. Este, por sua vez, faz o redirecionamentoparaoservidoropensimparaque,quemestejaajogar,possa verasmensagensaapareceremnovisualizadordojogo. Na Figura 4quesesegue,podevervisualizada a arquitectura geral da aplicação quefoidescrita: Figura4 Arquitecturadaaplicação. EstediagramapoderiaterumaalteraçãoenolugardeBluetoothAppClientpoderia estar apenas a palavra "PDA". Porém, a níveltécnicoeemrelaçãoàformade implementação, estaéamaneiramaiscorrectadeexpressaroquerealmente acontece. OmóduloBluetoothAppClient é a parte que vai ser executada no dispositivomóvelpretendidoeéapartirdelequeseefectuaologinnoservidor OpenSim. É também graças à parte interactiva deste módulo que o utilizador consegue inserir e enviar mensagens, que serão enviadas para o BluetoothAppServereposteriormentereencaminhadasparaoservidorOpenSim. BluetoothAppServer Comojáfoimencionado,estapartedaaplicaçãoéresponsávelpelacomunicação PDA(BluetoothAppClient) BluetoothAppServere BluetoothAppServer OpenSim, cadaumadelasnosdoissentidos. 12

EstaéapartedaaplicaçãoqueéexecutadanumcomputadorDesktop,enquanto queaoutraparte(bluetoothappclient)éaquevaiserexecutadanumcliente,ou seja,numdispositivomóvel.nestecaso,odispositivomóvelquefoiutilizadofoi umpda/pocketpccomwindowsmobile5. A comunicação entre o PDA e o BluetoothServeréfeitaatravés da tecnologia bluetoothedabibliotecaanteriormenteapresentada 32feet.Net. Apresentam se,emseguida,asvariáveisdeclasserespeitantesàclasseserverdo namespacebluetoothappserver. namespace BluetoothAppServer class Server const int MAX_MESSAGE_SIZE = 128; const int MAX_TRIES = 3; public BluetoothClient btclient; public BluetoothListener btlistener; public BluetoothDeviceInfo[] devices; public bool listening; public Guid ServiceName; public String str; public System.Threading.Thread t1; public System.Threading.Thread t2; public TcpClient socketforserver; public NetworkStream networkstream; public System.IO.StreamReader streamreader; public System.IO.StreamWriter streamwriter; public String deviceconnected; AvariávelbtClientdotipoBluetoothClientforneceumserviçoparaumaconexão de um cliente por bluetooth, enquanto a variável btlistener do tipo BluetoothListenerforneceumserviçoqueficaàesperadeconexõesporpartede clientes. Estas variáveis são importantes na conexão que éfeitaentreaparteclienteda aplicação(bluetoothappclient),aexecutarnopda,eestapartedoservidor.umaé importanteparaoenviodemensagensparaopda(btclient),aoutraéimportante paraarecepçãodasmesmasvindasdopda(btlistener).atençãoqueistoqueestá a ser mostrado agora diz respeito apenas ao servidor de bluetooth. A parte da aplicação que irá executar no PDA terá que conter duas variáveis semelhantes, paraqueatrocademensagensseprocessecomsucessonosdoissentidos. 13

Maisadiante,serãotambémexplicadoumoutroconjuntodevariavéisigualmente importantesnainicializaçãodestaclassequetêmavercomaconexãofeitapor SocketscomoservidorOpenSim. Emseguida,apresenta seoconstrutordaclasseserver. public Server() this.btclient = new BluetoothClient(); this.devices = this.btclient.discoverdevices(); this.btlistener = null; this.listening = true; this.servicename = new Guid("E075D486-E23D-4887-8AF5- DAA1F6A5B172"); this.str = null; this.t1 = new System.Threading.Thread(receiveMessageFromBluetoothLoop); this.t1.start(); this.t2 = null; this.socketforserver = null; this.networkstream = null; this.streamreader = null; this.streamwriter = null; this.deviceconnected = ""; Derealçaravariáveldevicesqueservirá,maisadiante,parasepodersaberquais osdispositivosdetectadosnaáreaqueestãocomobluetoothactivado. O primeirométodoquese vai apresentarserveparaobteronomedeumdado dispositivo.éométodogetbluetoothdevice. public BluetoothDeviceInfo getbluetoothdevice(string bluetoothdevice) foreach (BluetoothDeviceInfo device in this.devices) if (device.devicename == bluetoothdevice) return device; return null; 14

Através de uma String passadacomoparâmetro,vai se procurar, entre os dispositivos ligados que estão na área de alcance, aquele que contém um nome igualaessastring.encontradoodispositivopretendido,eleédevolvidosobotipo deumbluetoothdeviceinfo.estetipopertenceàbiblioteca32feet.neteservepara recolherumvariadonúmerodeinformaçõesacercadeumdispositivodesdeoseu nome, fabricante, endereço físico, data da última ligação estabelecida, entre outros.estemétodoéutilizadoalgumasvezesnestaclassedevidoànecessidade emefectuarredirecionamentosdemensagensparaumdeterminadodispositivo. NaligaçãoentreoPDA(BluetoothAppClient)eBluetoothAppServerexistemquatro métodosquesãoresponsáveispelasoperaçõesnecessárias,sendoeles: public void sendmessagetobluetooth(bluetoothdeviceinfo device, String msg); private void sendmessagetobluetoothaux(bluetoothdeviceinfo device, int NumRetries, byte[] Buffer, int BufferLen); public String receivemessagefrombluetooth(int BufferLen); private void receivemessagefrombluetoothloop(); Na ligação entre o BluetoothAppServereoservidorOpenSimostrêsmétodos necessáriosàsuacomunicaçãosão: public void connectopensim(string str); public void sendmessagetoopensim(string message); public void receivemessagefromopensim(); Estesdoisconjuntosdemétodosconstituemoblocodaaplicaçãodenominadode BluetoothAppServer. AtravésdaFigura5pode severmelhorcomocomunicameemquesentidooperam osmétodosapresentados. 15

Figura5 Arquitecturaefuncionamentodosmétodos. Os dois métodos de recepção, receivemessagefrombluetoothloop e receivemessagefromopensim,sãodoismétodoscontroladosporduasthreadsque garantemqueobluetoothappserverestásempreàesperaderecebermensagens. O método sendmessagetobluetooth apenasrecebeonomedodispositivoparao qualpretendeenviaramensagemeamensagempropriamentedita,sobaforma de uma String. Porém, oqueelefazéapenasum"call"aométodooperário, sendmessagetobluetoothaux,querealmenteenviaamensagem. public void sendmessagetobluetooth(bluetoothdeviceinfo device, String msg) this.sendmessagetobluetoothaux(device, MAX_TRIES, System.Text.Encoding.Unicode.GetBytes(msg), msg.length * 2); private void sendmessagetobluetoothaux(bluetoothdeviceinfo device, int NumRetries, byte[] Buffer, int BufferLen) int CurrentTries = 0; do try 16

this.btclient = new BluetoothClient(); this.btclient.connect(new BluetoothEndPoint(device.DeviceAddress, this.servicename)); catch (SocketException se) if (CurrentTries >= NumRetries) throw se; CurrentTries++; while (this.btclient == null && CurrentTries < NumRetries); if (this.btclient == null) Console.WriteLine("Error establishing conctact"); Stream stream = null; try stream = this.btclient.getstream(); stream.write(buffer, 0, BufferLen); catch Console.WriteLine("Error sending to Client"); finally if (stream = null) stream.close(); if (this.btclient = null) this.btclient.close(); Averdadeirafunçãodestemétodooperárioéconectar serealmenteaoclientede bluetooth, através do endereço físico dodevice (dispositivo)paraoqualse pretende enviar a mensagem. Esta conexão é feita à custa da variável anteriormente apresentada btclient. Depois da conexão estar estabelecida, é escrita num Streamamensagemquese quer que sejaenviada.éumprocesso relativamentesimples. O método receivemessagefrombluetoothtratadarecepçãodemensagensvindas dodispositivomóvelparaobluetoothappservermaséauxiliadoporummétodo importantequeéoreceivemessagefrombluetoothloop. 17

private void receivemessagefrombluetoothloop() String strreceived; this.btlistener = new BluetoothListener(this.ServiceName); this.btlistener.start(); strreceived = this.receivemessagefrombluetooth(max_message_size); while (this.listening) if (strreceived = "") strreceived = this.receivemessagefrombluetooth(max_message_size); AtravésdavariávelbtListener,épostaumathreadàescutadeligaçõesporparte declientes.quandochegaumastring,amesmaépostanavariávelstrreceived. Emseguida,apresenta se o código do método que realmente faz a recepção da mensagem,oreceivemessagefrombluetooth. public String receivemessagefrombluetooth(int BufferLen) int bytesread = 0; System.IO.Stream stream = null; byte[] buffer = new byte[max_message_size]; String messagereceivedaux = ""; try this.btclient = btlistener.acceptbluetoothclient(); stream = this.btclient.getstream(); bytesread = stream.read(buffer, 0, BufferLen); messagereceivedaux = System.Text.Encoding.Unicode.GetString(buffer, 0, bytesread); if (messagereceivedaux.startswith("device")) String[] strarray = new String[250]; String connectiondata; strarray = messagereceivedaux.split(' '); connectiondata = strarray[2] + " " + strarray[3]; Console.WriteLine("Sending the login - " + connectiondata + " - to OpenSim server"); this.connectopensim(connectiondata); this.deviceconnected = strarray[1]; 18

Console.WriteLine("The device - " + deviceconnected + " - is connected"); else this.sendmessagetoopensim(messagereceivedaux); Console.WriteLine(this.deviceConnected + " > " + messagereceivedaux); catch if (listening) Console.WriteLine("Error listening to incoming message"); finally if (stream = null) stream.close(); if (this.btclient = null) this.btclient.close(); return str; SemprequeumamensagemchegaaoBluetoothAppServer,ouseja,semprequeé escritaumamensagemnostreamdecomunicaçãoporbluetooth,eledetectaseé aprimeiravezqueodispositivomóvelseestáaligaraelee,casoseja,éfeitaa conexão ao servidor OpenSim e é enviado o login preenchido anteriormente no PDA(usernameepassword)paraqueelesepossaligaraomundovirtualdoOpen Simulator.Senãoforaprimeiramensagemqueéenviada,ésinalqueelejáestá ligado e aí a mensagem é correctamente encaminhada através de métodos que serãoexplicadosemseguida. Comofoivisto,estesquatrométodosapresentadosdizemrespeitoaotratamento de mensagens (envio e recepção) entre o BluetoothAppServer eodispositivo móvel/pda,ouseja,obluetoothappclient.agora,seráapresentadaaoutrafunção, tambémimportante,do BluetoothAppServer acomunicaçãopor Socketscomo servidor OpenSim. Sem esta parte, as mensagens escritas no PDA nunca chegariamaovisualizadordoopensimulator,evice versa. Anteriormente apresentaram se os três métodos que compõem a comunicação entre BluetoothAppServer e o servidor OpenSim, sendo eles: connectopensim, sendmessagetoopensime,porfim,oreceivemessagefromopensim. 19

Oprimeiroservepara,comoonomeoindica,estabeleceracomunicaçãocomo servidor OpenSim. Como já foi várias vezes referido, esta comunicação é estabelecidaatravésdeumprotocolode Sockets.Assimsendo,éprecisofazera criação de um Socketeligá lo ao respectivo endereço IP/Porta em que está o servidor.seestepassoforfeitocomsucesso,emseguida,vaiserpostaaexecutar a thread igualmentemencionadaacimaqueéresponsávelporreceberas mensagensdoopensim. public void connectopensim(string str) try this.socketforserver = new TcpClient("193.136.19.112", 9004); Console.WriteLine("Connection to OpenSim server established"); this.t2 = new System.Threading.Thread(receiveMessageFromOpenSim); this.t2.start(); catch Console.WriteLine("Failed to connect to OpenSim server"); return; this.networkstream = socketforserver.getstream(); this.streamreader = new System.IO.StreamReader(networkStream); this.streamwriter = new System.IO.StreamWriter(networkStream); this.streamwriter.writeline(str); server"); Console.WriteLine("Login - " + str + " - was sended to OpenSim this.streamwriter.flush(); Paraalémdisto,osStreamsdecomunicaçãosãotambéminicializadoseéenviada uma mensagem de teste para o servidor OpenSim que contém o login do utilizadorquesequerligar. O método seguinte, sendmessagetoopensim, éoresponsável por enviar uma mensagem para o servidor OpenSim. No fundo, esta operação já é feita uma primeira vez no método anterior, connectopensim. Ainda assim, a criação do métodoaseguirapresentadofacilitaa(re)utilizaçãoeleituradecódigo. 20

public void sendmessagetoopensim(string message) this.streamwriter.writeline(message); this.streamwriter.flush(); Comosepodeobservarnométodoanterior,aoperaçãofeitaapenasconsisteem passarastringrecebidaparaostreamwriter. Nométodoseguinte,receiveMessageFromOpenSim,éondeéfeita,efectivamente,a recepçãodeumamensagemvindadoservidoropensim.nãoesquecerqueeste métodofoiaquelequeficouassociadoàthreadaquandodaexecuçãodaconexão aoservidor.assim,éprecisoteremcontaqueestemétodoestásempreacorrer. Neste contexto, se o Socket estiver ligado, este método está constantemente à esperaque"alguém"escrevanostreamreader.casosejaescritaumamensagema suafunçãoéreencaminharcorrectamenteamensagemparaodispositivoquea deve receber, através do método apresentado anteriormente sendmessagetobluetooth. De realçar que ele sabe para qual o dispositivo que deverá enviar a mensagem através da variável global deviceconnected. A intenção desta variável é conter sempre o nome do dispositivo que está ligado ao servidor OpenSim. Ela é preenchidaassimquepassapelaprimeiravez,pelobluetoothappserver,ologin comonomedeutilizadoreapasswordquevãoemdirecçãoaoopensim.nesta fase,éfiltradoodispositivoqueenviouestamensagemeépreenchidaavariável globaldeviceconnected. public void receivemessagefromopensim() try if (this.socketforserver.connected) while (true) String msgreceived; msgreceived = this.streamreader.readline(); Console.WriteLine("OpenSim > " + msgreceived); if (msgreceived.equals("login successful")) String msg = ""; msg = msgreceived + " " + this.deviceconnected; this.sendmessagetobluetooth(this.getbluetoothdevice(this.deviceconnected), msg); 21

else this.sendmessagetobluetooth(this.getbluetoothdevice(this.deviceconnected), msgreceived); catch Console.WriteLine("Exception reading from OpenSim server"); Assimterminaaapresentaçãoeasucintaexplicaçãodocódigoquecompõemo bloco BluetoothAppServer. O bloco que, como já foi mencionado, é responsável porduasgrandestarefas: Recebereenviarmensagensparaodispositivomóvel/PDA.Naprática,tem de receber e enviar mensagens para o bloco da aplicação que é o BluetoothAppClient. RecebereenviarmensagensparaoservidorOpenSimulator. Comistoconsegue segarantirocorrectofluxodemensagensacircularementreo utilizadornopdaeoutilizadorquejoganovisualizadordoopensimulator. Emseguida,seráapresentadaaoutrapartedestaaplicação,queéaquelaqueé executadanopdaequetambémtemassuastarefasimportantes. BluetoothAppClient Agoraéapresentadaapartedaaplicaçãoqueinteragecomoutilizador,queenvia equelhemostra"resultados".estaaplicaçãomaispequenaéconstituídaportrês classesimportantes:client,form1eform2. AclasseClientéresponsávelpelastarefasdenegócio.Nestesentido,estaclasse vaiconterosmétodosresponsáveisporrecebereenviarasmensagensdesejadas, talcomojáacontecianapartedobluetoothappserver.assim,aclasseclientnãoé maisdoqueumaréplicadealgunsdosmétodosquesãousadosnaclasseserver dobluetoothappserver,sendoeles: 22

public void sendmessagetobluetooth(bluetoothdeviceinfo device, String msg); private void sendmessagetobluetoothaux(bluetoothdeviceinfo device, int NumRetries, byte[] Buffer, int BufferLen); public String receivemessagefrombluetooth(int BufferLen); private void receivemessagefrombluetoothloop(); Poressemotivo,nãoserãoaquiexplicadosestesquatrométodosqueconstituem a classe em causa. Eles são cópias integrais dos mesmos métodos usados no ServerdoBluetoothAppServer.Énaturalqueassimaconteca,vistoqueomeiode comunicação é o mesmo e pretende se que haja troca de mensagens nos dois sentidos.aúnicadiferençanestecasoéapartequeinteragecomoutilizador,ou seja,acamadadeapresentaçãodaaplicação. Neste sentido, aparecem as outras duas classes: Form1 e Form2. Na realidade estas duas classes são apenas dois Forms emformatodejanelas,parao dispositivo móvel, para facilitar a interacção e introdução de informação por partedoutilizador. Oprimeiro,oForm1,apresenta senafigura6: Figura6 FormdeLogin Form1. 23

Este Form éresponsávelporapresentaraoutilizadorapossibilidadede introdução dos seus dados pessoais de acesso à conta no servidor Open Simulator.Istodepoisdeterapossiblidadedepoderescolheraqueservidorse desejaconnectarporbluetooth,apartirdeumalistadedispositivosligadosna sua área de alcance.ocódigorespeitanteaestaclassenãoserveospropósitos deste documento, sendo apenas código relativo à parte de apresentação, não contendoqualquerligaçãoaotemadoprojecto.éapenascódigonecessáriopara que os dispositivos apareçam correctamente listados e para que os dados pessoaissejamcorrectamentereencaminhados. Ooutroform,Form2,podeserobservadonaFigura7: Figura7 Formparavisualizaçãodaconversação Form2. EsteFormserveparaqueoutilizadorpossaescrevermensagensedireccioná las paraoservidoraoqualestáligadoeserveparamostrarologdaconversaçãoque ele, que está ligado por Bluetooth, mantém com o utilizador que está efectivamenteajogarnomundovirtualdoopensimulator.anãoapresentação docódigorelativoaesteformsegueosmesmospropósitosdoanterior. 24

Capítulo6 Conclusão Após a conclusão desta pequena aplicação o objectivo inicial que incluia a possibilidadedetrocademensagensnosdoissentidosentreumutilizadorcom um PDA e um outro utilizador a jogar no mundo virtual do OpenSimulator foi atingido. Desalientarousodabiblioteca32feet.Net,deverasumóptimoimpulsionadordo projecto.éumabibliotecabemconstruídaecommuitosmétodoseclassesúteisà disposição de quem quiser desenvolver código.net para trabalhar com redes bluetooth,ouinfra vermelhos. Háquemencionartambémofactodequeafaseemqueaaplicaçãoficouneste momentorepresentaaindaumafasedepoucamaturação.istoéuminício,uma base,comofoiditoanteriormente,dealgoquepodecrescerapartirdaqui.a intençãodesteprojectoéqueseconsigaquemensagenssejamautomaticamente enviadas do servidor OpenSimulator para o PDA que está "logado" nele no momento.aspossibilidadesdeaplicaçãodestetipodeideiasnomundorealsão vastas. Pessoalmente também posso acrescentar que gostei imenso de desenvolver o projectopoistrabalheicomtecnologiacomaqualaindanãotinhatrabalhadoaté àdata,oquemefezaprenderalgodenovo. 25