Prévia do material em texto
UNIVERSIDADE PAULISTA CURSO DE CIÊNCIA DA COMPUTAÇÃO Aluno: João Paulo Soares de Brito – D9642A5 (Ferramenta para Comunicação em Rede) APS BRASÍLIA – DF, 2022 Aluno: João Paulo Soares de Brito – D9642A5 APS APS (Atividade Pratica Supervisionada) do curso Ciência da Compuação, Campus Universidade Paulista – DF. BRASÍLIA – DF, 2022 Sumário Objetivo do trabalho 5 Introdução 6 Fundamentos da comunicação de dados em rede 9 3.1 Sentido de Transmissão 10 3.2 Modos de Transmissão 10 Sincronização 11 Meios Físicos de Transmissão 12 Plano de desenvolvimento da aplicação 14 4.1 Softwares utilizados no processo de desenvolvimento do projeto 14 4.1.1 Astah Community 14 4.1.2 Visual Studio Code 14 4.1.3 Spring Tools Suite 15 4.1.4 Maven 15 4.2 Protocolos WebSocket e STOMP 16 4.2.1 WebSocket 16 4.2.2 STOMP 16 4.2.3 Spring Boot 17 Interface com o Usuário 17 HTML5 17 4.3.2 CSS3 18 4.3.3 JavaScript 18 Modelagem do sistema 18 4.4.1 Diagrama de atividades 19 4.4.2 Diagrama de caso de uso 19 4.4.2.1 Especificação do caso de uso 20 4.4.3 Diagrama de Classes 20 Projeto (estrutura) do programa 21 Relatório com as linhas de código 25 Referências: 31 1. Objetivo do trabalho Antes mesmo do serviço de mensagens do Windows Live Messenger, outros programas como o ICQ e mIRC marcaram a experiências dos brasileiros que ainda começavam a aprender a interagir com a internet após o início de sua comercialização no Brasil entre 1994 e 1995. Desse modo, criar o nosso próprio bate papo instantâneo através da programação é um grande aprendizado, pois entenderemos como funciona por trás de tudo. O trabalho apresentado tem como objetivo principal desenvolver uma aplicação na linguagem de programação orientada a objetos, Java. E, também, aprimorar e aprofundar os nossos conhecimentos nessa linguagem utilizando as técnicas de comunicação de dados em rede. O trabalho acadêmico é responsável direto pela aplicação prática da teoria aprendida dentro da sala de aula. A aplicação técnica dos códigos ligeiramente abstratos visto em sala com explicações técnicas e às vezes complicadas na primeira observação. A possibilidade de aplicação traz a motivação necessária para a realização do trabalho supervisionado. Optamos por desenvolver o trabalho na linguagem JAVA por se tratar de uma linguagem altamente conhecida e poderosa para desenvolver qualquer tipo de sistema. A Linguagem JAVA nos pareceu a mais adequada por ser muito utilizada no mercado de trabalho uma vez que é uma linguagem Orientada Objeto. No trabalho desenvolveremos uma comunicação entre computadores utilizando componentes derivados da teoria de Sockets de Berkeley apresentado na disciplina de Rede de Computadores. Desde a antiguidade foi notado que a comunicação é essencial para nossa sobrevivência e desenvolvimento, com isso foram criadas diversas técnicas para realizar tal feito, desde meios físicos como a escrita, até verbalizações, chegando ao conjunto de ambos que é realizado através da internet. Vamos conhecer neste trabalho como é realizada uma comunicação através de um sistema desenvolvido especialmente com o objetivo de tornar a troca de informações de maneira mais rápida e prática. 2. Introdução Em grande parte do mundo, a Internet está se tornando o principal meio de comunicação nos negócios. As ferramentas de comunicação da Internet economizam dinheiro de várias maneiras. E-mail, mensagens instantâneas e redes sociais são gratuitos. Existem muitos tipos diferentes de ferramentas de comunicação pela Internet, como e-mail, VoIP, fóruns, chat online e redes sociais, entre outros. Usar as mais recentes ferramentas e métodos de comunicação pela Internet é essencial para trazer sua empresa para a era moderna da comunicação e do marketing. O computador pessoal foi originalmente usado como um dispositivo de computação independente. Um programa foi instalado no computador e usado para fazer processamento de texto ou processamento de números. No entanto, com o advento da rede e das redes locais, os computadores podem trabalhar juntos para resolver problemas. Computadores de ponta foram instalados como servidores, e os usuários na rede local podiam executar aplicativos e compartilhar informações entre departamentos e organizações. Isso é chamado de computação cliente-servidor. Assim como as organizações criam sites da Web para fornecer acesso global a informações sobre seus negócios, também criam páginas da Web internas para fornecer informações sobre a organização aos funcionários. Esse conjunto interno de páginas da Web é chamado de intranet. As páginas da Web na intranet não são acessíveis a quem está fora da empresa; na verdade, essas páginas apareceriam como “não encontradas” se um funcionário tentasse acessá-las de fora da rede da empresa. Às vezes, uma organização deseja poder colaborar com seus clientes ou fornecedores e, ao mesmo tempo, manter a segurança de estar dentro de sua própria rede. Em casos como esse, uma empresa pode querer criar uma extranet , que é uma parte da rede da empresa que pode ser disponibilizada com segurança para quem está fora da empresa. As extranets podem ser usadas para permitir que os clientes façam login e verifiquem o status de seus pedidos ou para que os fornecedores verifiquem os níveis de estoque de seus clientes. As ferramentas de comunicação baseadas em rede funcionam como impulsionadores significativos para a eficiência em organizações de quase todos os tamanhos. Da mesma forma, as empresas usam software de mensagem instantânea para colaborar e trocar ideias rapidamente ou como uma forma de obter respostas eficientes a perguntas curtas sem a necessidade de se encontrar pessoalmente ou conectar-se por telefone. Os serviços de videoconferência permitem que os funcionários participem virtualmente de reuniões sem sair de suas mesas, e a videoconferência possibilita fazer conferências com funcionários separados por centenas de quilômetros. O proprietário ou líder de uma empresa com funcionários remotos pode usar a videoconferência para fornecer notícias importantes e análises de desempenho com um toque mais pessoal. As redes de mídia social oferecem às empresas um canal de marketing relativamente novo. Ao postar anúncios e ofertas especiais em sites de mídia social, as empresas podem alcançar rapidamente centenas ou até milhares de clientes. Com redes de distribuição de anúncios baseadas em rede, as empresas fazem com que os clientes que procuram determinados produtos ou serviços vejam mensagens de marketing direcionadas, aumentando a eficiência de seu orçamento de publicidade. Comunicação de voz temos a telefonia pela Internet a mais populares é o Skype. Com o Skype e outras ferramentas de telefonia de Internet semelhantes, você pode conduzir conversas de voz gratuitas entre dois computadores. O Skype também pode ser usado para videoconferência, chamadas de webcam, mensagens instantâneas e envio de mensagens SMS. Comunicação via e-mail ainda é uma ferramenta essencial que todo negócio deveria ter. Apesar disso, com o aumento das mensagens por meio de sites de redes sociais e mensagens instantâneas, o e-mail não é tão importante quanto costumava ser. Os fóruns, como o e-mail, também existem desde o surgimento da Internet. Os fóruns fornecem um local para trocar mensagens e participar de conversas. As principais diferenças das mensagens instantâneas são que os fóruns geralmente são públicos e as comunicações não são em tempo real. Os fóruns e seus pôsteres e leitores regulares formam comunidades que podem ser valiosas para o seu negócio. Muitas empresas e indivíduos anunciam seus sites com assinaturas que são automaticamente anexadas a todas as postagens feitas em um fórum. Os fóruns,como o e-mail, também existem desde o surgimento da Internet. Os fóruns fornecem um local para trocar mensagens e participar de conversas. As principais diferenças das mensagens instantâneas são que os fóruns geralmente são públicos e as comunicações não são em tempo real. Os fóruns e seus pôsteres e leitores regulares formam comunidades que podem ser valiosas para o seu negócio. Muitas empresas e indivíduos anunciam seus sites com assinaturas que são automaticamente anexadas a todas as postagens feitas em um fórum. Com a evolução dos celular para os smartphone, o desejo de acesso à Internet nesses dispositivos fez com que as redes de dados fossem incluídas como parte da rede de telefonia móvel. Embora as conexões de Internet estivessem tecnicamente disponíveis antes, foi realmente com o lançamento das redes 3G em 2001 (2002 nos Estados Unidos) que smartphones e outros dispositivos celulares puderam acessar dados da Internet. Essa nova capacidade impulsionou o mercado de smartphones novos e mais poderosos, como o iPhone, lançado em 2007. Em 2011, as operadoras sem fio começaram a oferecer velocidades de dados 4G, dando às redes celulares as mesmas velocidades que os clientes estavam acostumados a obter através de sua conexão doméstica . Conforme as tecnologias de telefonia móvel evoluíram, provedores em diferentes países escolheram diferentes padrões de comunicação para suas redes de telefonia móvel. Cada padrão tem seus prós e contras, mas o ponto principal é que os telefones que usam um padrão não podem alternar facilmente para o outro. Nos EUA, isso não é um grande problema, porque as redes móveis existem para oferecer suporte a ambos os padrões. Mas quando você viajar para outros países, descobrirá que a maioria deles usa redes GSM, com a única grande exceção sendo o Japão, que padronizou o CDMA. Embora o Bluetooth geralmente não seja usado para conectar um dispositivo à Internet, é uma importante tecnologia sem fio que habilitou muitas funcionalidades que são usadas todos os dias. Quando criado em 1994 pela Ericsson, o objetivo era substituir as conexões com fio entre os dispositivos. Hoje, é o método padrão para conectar dispositivos próximos sem fio. O Bluetooth tem um alcance de aproximadamente 300 pés e consome muito pouca energia, o que o torna uma escolha excelente para diversos fins. Algumas aplicações de Bluetooth incluem: conectar uma impressora a um computador pessoal, conectar um telefone celular e fone de ouvido, conectar um teclado e mouse sem fio a um computador e conectar um controle remoto para uma apresentação feita em um computador pessoal. 3. Fundamentos da comunicação de dados em rede Hoje, com um simples comando, seja ele um clique ou uma palavra digitada, as empresas, organizações e seus membros participantes, podem comunicar-se e ter acesso a relatórios ou informações de suas atividades de forma simultânea, independentemente de sua localização geográfica. Isso se dá ao grande avanço das redes de computadores modernos e seus diversos recursos em um curto período de tempo. Com o passar dos anos os computadores tornaram-se cada vez mais descentralizados, garantindo assim, uma comunicação cada vez mais ágil e eficiente, e quando se fala em eficiência, três princípios básicos se destacam na área da comunicação dados, são eles: Entrega: O sistema deve entregar corretamente os dados ao usuário ou dispositivo de destino. Confiabilidade: O sistema deve garantir que os dados não foram modificados ou corrompidos antes da entrega ao destinatário. Tempo de atraso: O sistema deve entregar dados de forma quase simultânea, isto é, sem perda de tempo significativa. Em tempos passados, talvez, o maior objetivo para se ter um computador em casa fosse utilizar aplicativos de texto e os jogos. Mas, esse pensamento mudou de forma drástica com a chegada da internet, que com sua chegada, revolucionou, entre outras áreas, a forma de comunicação remota. A internet possibilitou a criação de diversas redes sociais, aplicativos de mensagens, videochamadas e etc. Mas, para que tais comunicações sejam realizadas, dependem de processos, que por sua vez, são compostos de elementos básicos, que toda comunicação de dados em rede deve ter: Mensagem: É o objeto utilizado na comunicação, ou seja, a informação a ser transmitida. Pode ser representada por um texto, imagem, vídeo, áudio, figuras, números, ou qualquer combinação entre esses elementos. Transmissor: É aquele que envia a mensagem de dados. Pode ser um computador, celular, câmera de vídeo ou qualquer outro dispositivo que possa enviar elementos que compõe uma mensagem já citados anteriormente. Receptor: É o dispositivo que recebe a mensagem. Pode ser um computador, celular, câmera de vídeo e assim por diante. Meio de transmissão: É ou meio por onde se encaminha a mensagem, podendo ser físico ou não. Protocolo: É um conjunto de regras que regem a comunicação e transferência de dados entre dois sistemas computacionais. Quanto ao que se refere a transmissão de dados, a comunicação pode ser realizada de diferentes formas, definindo-se por: Sentido de Transmissão, Modo de Transmissão e Sincronização. 3.1 Sentido de Transmissão O sentido de transmissão ou sentido de trocas pode ser feito de três formas diferentes: Simplex: A comunicação simplex é aquela em que existe apenas um transmissor e um receptor. Nesse caso, a comunicação é unidirecional, ou seja, apenas um dos dois dispositivos no link é capaz de transmitir e outro, por sua vez, só será capaz de receber. Um bom exemplo deste tipo de comunicação é a TV e o rádio AM e FM. Half-duplex: Neste modo, cada estação pode transmitir e receber dados, mas não ao mesmo tempo. Enquanto um dispositivo está transmitindo o outro está recebendo e vice-versa. Neste tipo de transmissão, toda a capacidade do canal fica por conta do dispositivo que estiver transmitindo. Como exemplo deste tipo de transmissão, temos o WalkTalking. Full-duplex: Neste modo, ambas as estações podem transmitir e receber de forma simultânea. Como exemplo temos o telefone celular, onde é possível falar e ouvir ao mesmo tempo. 3.2 Modos de Transmissão O modo de transmissão trata da quantidade de bits que podem ser transmitidos simultaneamente pelo canal de comunicação. Transmissão em modo Paralelo: A transmissão paralela tem como característica vários bits caminhando juntos através de fi os independentes, sendo mais rápida, já que os bits são transmitidos de forma simultânea. Sua desvantagem está no custo, pois é cara a transmissão de bits simultâneos por longas distâncias, são exigidos cabos complexos que incluem vários condutores, o que o torna sensível às interferências eletromagnéticas. Exemplos: LPT1, LPT2, IDE, SCSI, PCI. Transmissão em modo Série: A transmissão serial consiste no envio de bits, sendo que um por vez, pois com isso, é possível atingir facilmente distâncias maiores. Os cabos são mais simples e baratos, o que facilita a sua construção com blindagem eletromagnética e com isso a redução das interferências que são captadas. Antigamente, um dos problemas da transmissão serial era a lentidão, só que hoje, ela está extremamente rápida e não possui problemas de sincronismo e interferências, como os encontrados em transmissões paralelas. A transmissão serial já é tão eficiente que está substituindo os dispositivos que utilizam transmissão paralela. Exemplos: USB, Sata, PCI-Express. 3.3 Sincronização Transmissão Assíncrona: Na transmissão Assíncrona os dados são enviados um a um sem um controle de tempo entre um e outro. O tempo de transmissão decorrido de dois bits pode ser variado pelo equipamento de transmissão. Nesse tipo de transmissão, um bit especial é inserido no início e no fim da transmissão de um caractere e assim permite que o receptor entenda o que foi realmente transmitido.A principal desvantagem desse tipo de transmissão é a má utilização do canal, pois os caracteres são transmitidos irregularmente, além de um alto overhead (os bits de controle que são adicionados no início e no fim do caractere), o que ocasiona uma baixa eficiência na transmissão dos dados. Transmissão Síncrona: Na transmissão síncrona, os bits de um caractere são enviados imediatamente após o anterior, não existem os bits de controle no início e no fim do caractere e nem irregularidades nos instantes de transmissão. A transmissão síncrona é estabelecida através de uma cadência fixa para a transmissão dos bits de todo um conjunto de caracteres, um bloco. Resumindo, o transmissor e o receptor comunicam-se, sincronizam suas ações, e preparam-se para receber a comunicação, já sabendo da taxa de transmissão e o tamanho dos dados ordenados e conhecidos. A comunicação síncrona é mais cara que a assíncrona, pois necessita de um relógio no hardware para permitir o seu sincronismo e é muito utilizada em redes com altas taxas de transmissão. 3.4 Meios Físicos de Transmissão Os meios físicos de transmissão podem ser classificados em dois tipos: os meios guiados onde o sinal percorre através de meios sólidos (cabos coaxiais, par trançado, fibra ótica), e os meios guiados, onde o sinal se propaga na atmosfera (Via rádio, via satélite). Entre os meios físicos mais utilizados pode-se destacar cinco, são eles: Cabo par Trançado: Este meio de transmissão é o mais utilizado peças redes telefônicas. Esse tipo de cabo é constituído por dois fios de cobre enrolados afim de reduzir interferências Cabo Coaxial: Outro meio de transmissão guiado, o cabo coaxial possui uma blindagem melhor se comparado ao par trançado, além de poder se estender por distancias maiores em maior velocidade. É constituído por dois condutores de cobre com isolamento e blindagem especial. Fibra Óptica: A fibra óptica é um meio de transmissão guiado que emite pulsos de luz, cada pulso representa um bit. A fibra possui muitas vantagens quando comparada aos outros tipos de cabo, entre elas, pode-se destacar sua velocidade que alcança a casa das dezenas de gigabits por segundo, além de ser imune a interferências. O centro da fibra é constituído por um núcleo de vidro por onde é emitida a luza. Esse núcleo é revestido por uma camada de vidro com refração inferior ao núcleo. Transmissão via Rádio: A transmissão via rádio pode ser bastante atraente por não precisar de cabos físicos, por percorrer longas distancias e atravessar paredes e obstáculos. Além de ser considerado um sinal omnidirecional, isto é, pode se propagar em todas as direções, desse modo, transmissor e receptor não precisam estar alinhados fisicamente. Transmissão via satélite: Os sinais via satélite são ligados por estações (transmissores-receptores), que recebem as transmissões em uma determinada faixa de frequência, geram novamente o sinal através de repetidores e transmitem novamente o sinal em uma outra faixa de frequência. 4. Plano de desenvolvimento da aplicação Para o desenvolvimento da aplicação foi utilizado dois notebooks da fabricante DELL, um com o processador Intel® Core™ i5 – 7200 CPU @ 2.50 – 2.70 GHz, com memoria principal de 8 GB, e SSD de 240 GB sobre um sistema operacional Windows 10 PRO 64x, outro com o processador Intel® Core™ i7 1165G7 CPU @ 4.7GHz, com memoria principal de 16GB, e SSD de 560GB sobre o sistema operacional Linux Mint - Cinnamon, e outro computador da fabricante Lenovo com processador Intel® Core™ i5-1035G1 CPU 2.6 GHz, com memoria principal de 8GB, e SSD de 480GB sobre o sistema operacional Windows 10 Home Single Language x64. 4.1 Softwares utilizados no processo de desenvolvimento do projeto 4.1.1 Astah Community O programa Astah é uma ferramenta UML (Unified Modeling Language). Esta ferramenta nos permite visualizar a essência das ideias do projeto, criando de maneira rápida e simples diagramas para facilitar o entendimento sobre o sistema. No projeto foi utilizado para fazer os diagramas de: Classes, Atividades e Caso de Uso. 4.1.2 Visual Studio Code O Visual Studio Code é um editor de texto multiplataforma criado pela Microsoft para o desenvolvimento de diversas aplicações. Esse poderoso editor nos permite criar aplicações com mais produtividade, dentre as principais vantagens temos: ● IntelliSense: Fornece completações e preenchimento automático inteligentes com base em tipos de variáveis, definições de funções e módulos importados; ● Depuração: ela permite debugar aplicativos em execução com pontos de interrupção, pilhas de chamadas e com auxilio de um console interativo; ● Comandos Git integrados: é facilmente trabalhar com o Git diretamente do editor; ● Extensível e personalizável: é possível instalar extensões para adicionar novos idiomas, temas, depuradores e para se conectar a serviços adicionais. As extensões são executadas em processos separados, garantindo que não tornem seu editor mais lento; ● Implantação na nuvem: juntamente com o Microsoft Azure, é possível implantar e hospedar seus sites na nuvem, com uma grande facilidade; No projeto foi utilizado para a criação do front-end utilizando das linguagens Javascript e CSS3. 4.1.3 Spring Tools Suite A IDE Spring Tools Suite é feito sob medida para desenvolver aplicativos robustos usando o Framework Spring Boot, ele incorpora tecnologias modernas que torna possível executar processos separados, tornando o desempenho do desenvolvimento do projeto mais produtivo. Principais vantagens para o uso dessa IDE: ● Navegação Inteligente: é possível compreender e navegar rapidamente pelo código-fonte se tornando essencial para codificação; ● Edição Inteligente: o preenchimento de código é uma parte crítica para desenvolvimento do código-fonte, e essa ide fornece grandes opção quando se trata da edição do código; ● Informações a tempo de execução: Spring Tools enqiquece o código- fonte com informações detalhadas do aplicativo em tempo de execução; No sistema utilizamos o Spring Tools Suite para o desenvolvimento do back- end utilizando o Framework Spring Boot com a linguagem Java. 4.1.4 Maven O Maven é uma ferramenta que agiliza a produção de projetos Java, ele é responsável pelo gerenciamento de dependências e build. No projeto foi utilizado para gerenciar as dependências do Websocket. 4.2 Protocolos WebSocket e STOMP 4.2.1 WebSocket É um protocolo que torna possível a comunicação bidirecional entre o navegador web e um servidor, utilizado de uma conexão TCP. Ele permite a criação de “túnel” para transportar de forma continua informações entre um navegador e um servidor de uma aplicação. WebSocket é compatível com a maioria dos navegadores da web modernos e, para navegadores que não o suportam, temos bibliotecas que fornecem alternativas para outras técnicas, como cometa e long-polling (chamada seletiva). Inicialmente, o HTTP é usado apenas para o handshake – cada uma das aplicações vão “negociando” como eles iram trabalhar -, depois que isso acontece a conexão HTTP é alterada para uma conexão TCP/IP recém-aberta para ser usada por um WebSocket. O WebSocket é um protocolo de nível muito baixo que atua sobre o TCP, ele transforma um fluxo de bytes em um fluxo de mensagens e não muito mais que isso. Diante disso, cabe aos aplicativos interpretar o significado de uma mensagem. Como em um mensagem não se é fornecida nenhuma informação adicional sobre como será gerido ou processado, dificilmente é possível implementar aplicativos complexos sem escrever código adicional. Por esta razão, o WebSocket permite o uso de subprotocolos que iram operar em um nível de aplicação superior para fazer com que os aplicativos definam um formato de mensagem que o cliente e o servidor possam entender, no caso do projeto foi utilizado o: STOMP.4.2.2 STOMP STOMP é um protocolo de mensagens simples orientadas a texto criado para linguagens de script como Ruby, Python e Perl com o intuito de fornecer a troca de mensagens entre clientes e corretores em um formato de conexão interoperável. Analogamente, o STOMP é chamado de HTTP para web, ele atua fornecendo um cabeçalho e corpo para a mensagem contendo comandos muito uteis para gerenciar a comunicação e, por outro lado, implementar soluções com recursos mais sofisticados, como reconhecimento de mensagens. 4.2.3 Spring Boot Um dos projetos do “ecossistema” Spring, o framework Spring Boot surgiu para substituir as complexas configurações do antigo Spring Framework que fazia com que o desenvolvedor perdesse muito tempo nas configurações e não focasse o bastante na regra de negócio. Diante disso surgiu o Spring Boot tendo como principal ideia a de "simplesmente executar”, o que acabou sendo uma “mão na roda” para os programadores Java. O Spring Boot trouxe agilidade, e possibilita focar nas funcionalidades da aplicação com o mínimo de configuração o que torna isso possível é que o Spring Boot simplesmente analisa o projeto e automaticamente o configura. A estrutura do Spring Boot acelera o desenvolvimento de aplicativos que utilizam do WebSocket fazendo que sua implementação do lado do servidor fique uma tarefa mais simples pois para isso são necessárias poucas configurações. 4.3 Interface com o Usuário A interface com o usuário é uma parte essencial para o desenvolvimento de uma aplicação, visando sempre facilitar a usabilidade e a experiência do usuário. A ideia de uma boa interface com o usuário não é apenas a de focar na estética, mas também na eficiência e na acessibilidade de uma aplicação. Diante disso, o projeto foi desenvolvido pensando da objetividade, com o pretendendo de ser o mais simples possível. Para criação da interface com usuário foi utilizado HTML5, CSS3 e o JavaScript. 4.3.1 HTML5 O HTML5, ou Hypertext Markup Language, é uma linguagem de marcação de hipertexto para apresentar e estruturar o conteúdo na web. A linguagem possui tags que facilitam o entendimento do desenvolvedor e do browser, além de fornecer ferramentas para o css e o javascript fazerem seu trabalho da melhor forma possível fazendo com que o site ou aplicação trabalhe de forma leve e funcional. 4.3.2 CSS3 CSS, sigla para Cascading Style Sheets, traduzindo Folha de Estilo em Cascatas. O CSS é usado juntamente com as linguagens de marcação HTML ou XHTML. O CSS separa o conteúdo da representação visual do site, ele define estilos para um projeto web utilizando de efeitos de transição, modificando a estrutura da aplicação. 4.3.3 JavaScript É uma linguagem de programação que permite a você implementar itens complexos em páginas web, ele é responsável por fazer algo a mais do que simplesmente mostrar a página com os conteúdos estáticos. Esse dinamismo do Javascript o faz ser uma das linguagens mais utilizadas mundialmente, antigamente visto como apenas um linguagens front-end, hoje podemos ver aplicações rodando também no back-end (usando o Node.js) e também full stack. No projeto foi utilizado além do JavasScript puro, foi utilizado a biblioteca SockJS que tem como objetivo fornecer um objeto do tipo WebSocket. O SockJS oferece uma API Javascript coerente para vários navegadores que cria um canal de comunicação full duplex de baixa latência entre o navegador e o servidor da web.O SockJS deve funcionar para todos os navegadores modernos e em ambientes que não suportam o protocolo WebSocket - por exemplo, por trás de proxies corporativos restritivos. 4.4 Modelagem do sistema A modelagem de sistema é um dos processos mais importantes para a criação de um projeto de software, é uma maneira de criar modelos abstratos apresentando diferentes visões e perspectivas para a concepção de um sistema. Para se modelar um sistema é necessário usar algum tipo de notação gráfica para representá-lo, é a notação mais utilizada atualmente é (UML) Unified Modeling Language. A Linguagem de modelagem unificada (UML) estabelece uma linguagem visual comum no complexo mundo do desenvolvimento de software, sendo também de fácil compreendimento por usuários do mundo dos negócios. 4.4.1 Diagrama de atividades O diagrama de atividades é um dos digramas considerados de comportamento, isso porque ele tem a função de descrever o que é necessário acontecer no sistema modelado. Esse diagrama ajuda a unir as pessoas das áreas de negócios e de desenvolvimento de uma organização para entender o processo e o comportamento do sistema. 4.4.2 Diagrama de caso de uso O diagrama de caso de uso tem como objetivo demonstrar as diferentes maneiras que o usuário pode interagir com o sistema. Este diagrama resume os detalhes dos usuários da aplicação (chamados de atores) e as interações com o sistema, um bom diagrama de caso de uso ajuda a equipe de desenvolvedores a Imagem 1 – Diagrama de atividades Fonte: Própria, 2021. representar e discutir os cenários em que o sistema interage com as pessoas, o escopo do sistema e as metas que a aplicação ajuda os atores a atingir. Imagem 2 – Diagrama de caso de uso 4.4.2.1 Especificação do caso de uso 1. [IN] O usuário informa seu nome; 2. [OUT] O sistema informa exibirá o chat para o usuário se comunicar com outros usuários; 3. [OUT] (Exceção) caso o usuário não preencha o nome o sistema lançará uma mensagem informando que o preenchimento é obrigatório; 4.4.3 Diagrama de Classes Um dos diagramas mais importante para o desenvolvimento de um sistema, o diagrama de classes tem o intuito de mapear de forma clara a estrutura de um projeto, determinando suas classes, enumerações, atributos e relações entre os objetos. Fonte: Própria, 2021. 5. Projeto (estrutura) do programa O projeto consiste em uma aplicação que envia mensagens entre um navegador e um servidor WebSocket, usando o sistema de mensagens STOMP com Spring para criar um aplicativo web interativo. A seguir a descrição da estrutura do programa e o seu funcionamento. A classe “WebSocketConfig” é usada para habilitar o servidor WebSocket. Implementamos “WebSocketMessageBrokerConfigurer” interface e fornece algumas implementações para seus métodos para configurar a conexão do websocket. No primeiro método, é registrado um endpoint de websocket que os clientes usarão para se conectar ao nosso servidor de websocket.No segundo método, é configurado um agente de mensagens que será usado para repassar as mensagens de um cliente para outro. Veja o trecho de código a seguir: Imagem 3 – Diagrama de classes Fonte: Própria, 2021. https://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override // registramos um endpoint de websocket que os clientes usarão para se conectar ao nosso servidor de websocket. public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").withSockJS(); } @Override // configurando um agente de mensagens que será usado para rotear mensagens de um cliente para outro. public void configureMessageBroker(MessageBrokerRegistry registry) { registry.setApplicationDestinationPrefixes("/app"); registry.enableSimpleBroker("/topic"); } } As mensagens podem ser passadas por um “@Controller”. O “ChatController” é mapeado para lidar com mensagens para o destino “/chat.sendMessage” e também adicionar novos clientes ao servidor , como mostra a seguinte codigo: As principais funções de conexão quando falamos na parte do cliente são: ● A função connect() usa o SockJS stomp cliente para se conectar ao /ws ponto de extremidade que nós configurado no Spring. Após a conexão bem sucedida,o cliente assina o destino /topic/public e informa o nome do usuário ao servidor, enviando uma mensagem ao destino /app/chat.addUser ; ● A função sendMessage(event) responsável por enviar as mensagens ao servidor; ● A função onMessageReceived() responsável por receber as novas mensagens do servidor; @Controller public class ChatController { //Método responsável por repassar as mensagens feitas pelos clientes para os outros clientes. @MessageMapping ( "/chat.sendMessage" ) @SendTo ( "/topic/public" ) public ChatMessage sendMessage ( @Payload ChatMessage chatMessage) { return chatMessage; } //Método responsável por adicionar novos clientes na sessão @MessageMapping ( "/chat.addUser" ) @SendTo ( "/topic/public" ) public ChatMessage addUser ( @Payload ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) { headerAccessor.getSessionAttributes().put( "username" , chatMessage.getSender()); return chatMessage; } } O software funciona de maneira simples, o usuário inicia em uma página onde estabelece primeiro uma conexão HTTP com o servidor e depois poderá informar o nome para fazer a conexão com o servidor de websocket bidirecional, enviando um Upgrade cabeçalho. O serviço aceitará mensagens que contenham um nome em uma mensagem cujo corpo seja um objeto JSON para fazer essa conexão. Veja a imagem da tela inicial a seguir. A seguir a imagem do header retornado como resposta da requisição. Ao submeter o formulário o servidor recebe a requisição e retorna como resposta o tópico em que o usuário será inscrito e também redireciona o usuário para a página correspondente a esse tópico. Veja a imagem da página do chat. Imagem 4 – Tela inicial. Fonte: Própria, 2021. Imagem 5 – Header. Fonte: Própria, 2021 . Imagem 6 - Página do chat. Fonte: Própria, 2021. 6. Relatório com as linhas de código import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBro ker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerCon figurer; @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override // registramos um endpoint de websocket que os clientes usarão para se conectar ao nosso servidor de websocket. public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").withSockJS(); } @Override // configurando um agente de mensagens que será usado para rotear mensagens de um cliente para outro. public void configureMessageBroker(MessageBrokerRegistry registry) { registry.setApplicationDestinationPrefixes("/app"); registry.enableSimpleBroker("/topic"); } } import com.message.demo.entities.ChatMessage; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.stereotype.Controller; @Controller public class ChatController { @MessageMapping("/chat.sendMessage") @SendTo("/topic/public") // adiciona mensagem ao topico public ChatMessage sendMessage(@Payload ChatMessage chatMessage) { return chatMessage; } @MessageMapping("/chat.addUser") @SendTo("/topic/public") public ChatMessage addUser(@Payload ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) { // Adiciona nome na sessão headerAccessor.getSessionAttributes().put("username", chatMessage.getSender()); return chatMessage; } } // entidade que representa uma ação do usuario public class ChatMessage { private MessageType type; private String content; private String sender; public enum MessageType { CHAT, JOIN, LEAVE } public MessageType getType() { return type; } public void setType(MessageType type) { this.type = type; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getSender() { return sender; } public void setSender(String sender) { this.sender = sender; } } import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //Responsavel por inicializar o Spring e suas configurações @SpringBootApplication public class MessageApplication { public static void main(String[] args) { SpringApplication.run(MessageApplication.class, args); } } var usernamePage = document.querySelector('#username-page'); var chatPage = document.querySelector('#chat-page'); var usernameForm = document.querySelector('#usernameForm'); var messageForm = document.querySelector('#messageForm'); var messageInput = document.querySelector('#message'); var messageArea = document.querySelector('#messageArea'); var connectingElement = document.querySelector('.connecting'); var stompClient = null; var username = null; var colors = [ '#2196F3', '#32c787', '#00BCD4', '#ff5652', '#ffc107', '#ff85af', '#FF9800', '#39bbb0' ]; function connect(event) { username = document.querySelector('#name').value.trim(); if(username) { usernamePage.classList.add('hidden'); chatPage.classList.remove('hidden'); var socket = new SockJS('/ws'); stompClient = Stomp.over(socket); stompClient.connect({}, onConnected, onError); } event.preventDefault(); } //conecta ao servidor function onConnected() { stompClient.subscribe('/topic/public', onMessageReceived); stompClient.send("/app/chat.addUser", {}, JSON.stringify({sender: username, type: 'JOIN'}) ) connectingElement.classList.add('hidden'); } function onError(error) { connectingElement.textContent = 'Could not connect to WebSocket server. Please refresh this page to try again!'; connectingElement.style.color = 'red'; } //envia nova mensagem function sendMessage(event) { var messageContent = messageInput.value.trim(); if(messageContent && stompClient) { var chatMessage = { sender: username, content: messageInput.value, type: 'CHAT' }; stompClient.send("/app/chat.sendMessage", {}, JSON.stringify(chatMessage)); messageInput.value = ''; } event.preventDefault(); } //recebe novas mensagens function onMessageReceived(payload) { var message = JSON.parse(payload.body); var messageElement = document.createElement('li'); if(message.type === 'JOIN') { messageElement.classList.add('event- message'); message.content = message.sender + ' Entrou!'; } else if (message.type === 'LEAVE') { messageElement.classList.add('event-message'); message.content = message.sender + ' Saiu!'; } else { messageElement.classList.add('chat- message'); var avatarElement = document.createElement('i'); var avatarText = document.createTextNode(message.sender[0]); avatarElement.appendChild(avatarText); avatarElement.style['background-color'] = getAvatarColor(message.sender); messageElement.appendChild(avatarElement); var usernameElement = document.createElement('span'); var usernameText = document.createTextNode(message.sender); usernameElement.appendChild(usernameText); messageElement.appendChild(usernameElement); } var textElement = document.createElement('p'); var messageText = document.createTextNode(message.content); textElement.appendChild(messageText); messageElement.appendChild(textElement); messageArea.appendChild(messageElement); messageArea.scrollTop = messageArea.scrollHeight; } function getAvatarColor(messageSender) { var hash = 0; for (var i = 0; i < messageSender.length;i++) { hash = 31 * hash + messageSender.charCodeAt(i); } var index = Math.abs(hash % colors.length); return colors[index]; } usernameForm.addEventListener('submit', connect, true) messageForm.addEventListener('submit', sendMessage, true) <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0"> <title>Chat</title> <link rel="stylesheet" href="/css/main.css" /> </head> <body> <noscript> <h2>Sorry! Your browser doesn't support Javascript</h2> </noscript> <div id="username-page"> <div class="username-page-container"> <h1 class="title">Digite seu nome</h1> <form id="usernameForm" name="usernameForm"> <div class="form-group"> <input type="text" id="name" placeholder="nome" autocomplete="off" class="form-control" /> </div> <div class="form-group"> <button type="submit" class="accent username-submit">Entrar</button> </div> </form> </div> </div> <div id="chat-page" class="hidden"> <div class="chat-container"> <div class="chat-header"> <h2>Chat</h2> </div> <div class="connecting"> Connecting... </div> <ul id="messageArea"> </ul> <form id="messageForm" name="messageForm"> <div class="form-group"> <div class="input-group clearfix"> <input type="text" id="message" placeholder="Digite uma mensagem..." autocomplete="off" class="form-control"/> <button type="submit" class="primary">Enviar</button> </div> </div> </form> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.1.4/sockjs.min.js"></script > <script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script> <script src="/js/main.js"></script> </body> </html> 7. Referências: ● https://smallbusiness.chron.com/block-undesired-skype-messages-51046.html ● COMER, Douglas E.. Internet Working with TCP/IP. 4a. Ed. Prentice Hall, 2000. ● FOROUZAN, Behrouz A. Comunicação de dados e redes de computadores. 3a. ed. Porto Alegre: Bookman, 2006. ● STALLINGS, William. Data and computer communications. 8a. ed. Upper Saddle River, NJ : Prentice Hall, 2006. ● STALLINGS, William. Redes e sistemas de comunicação de dados. 5ª. ed. Rio de Janeiro: Elsevier, 2005. https://smallbusiness.chron.com/block-undesired-skype-messages-51046.html https://smallbusiness.chron.com/block-undesired-skype-messages-51046.html NOME: João Paulo Soares de Brito TURMA: CC6P30 RA: D9642A5 CURSO: Ciência da Computação CAMPUS: Brasília SEMESTRE: 6 TURNO: Noturno CÓDIGO DA ATIVIDADE: 77B2 SEMESTRE: 6 ANO GRADE: 2021/1 HORAS DATA DA ATIVIDADE DESCRIÇÃO DA ATIVIDADE TOTAL DE HORAS ASSINATURA DO ALUNO ATRIBUÍDAS (1) ASSINATURA DO PROFESSOR 04/03/2021 Estudo e pesquisa 5h 11/03/2021 Reunir para desenvolver o trabalho 2h 18/03/2021 Escolha do tema 4h 10/04/2021 Pesquisa sobre as principais técnicas de comunicação de dados em rede 6h 19/04/2021 Escolha dos algoritmos adotados no projeto 9h 22/04/2021 Criação do diagrama de classe e avaliação do projeto 10h 26/04/2021 Desenvolvimento do código em java 18h 27/04/2021 Desenvolvimento do código em javaScript 22h 13/05/2021 Formatação do trabalho em ABNT 7h 20/05/2021 Finalização 2h