Free YouTube Transcribe

Video transcript

5) Fazedor de Continhas: implementação das classes específicas do Servidor (parte 1)

André Luís dos Reis Gomes de Carvalho · 7,378 words · 34 min read

WhatsAppTelegramX

Want to search this transcript, jump the video from any line, or download it as TXT, SRT, or VTT?

Open in the transcript tool

Full transcript

0:00Olá pessoal o propósito dessa vídeoaula é discutir com vocês a estrutura da implementação do programa servidor que faz parte do sistema de programas com arquitetura cliente servidor que a gente vem estudando nessas nossas últimas aulas que é o

0:24fazedor de continhas eu já comentei com vocês antes que existe um conjunto de classes que estão presentes tanto na implementação do cliente quanto na implementação do Servidor e a gente já comentou a respeito delas em aulas

0:46anteriores e agora a gente deve focar nas classes que fazem parte exclusivamente da implementação do programa servidor eh Começarei explicando para vocês

1:07sobre ações que são realizadas bem no início da Main do programa servidor e que são ações que têm o propósito de iniciação é legal a gente ter consciência de que nesse momento nesse

1:30momento em que ocorre em que ocorrem né Essas iniciações eh é legal a gente saber que é um momento onde acontece apenas a execução da mém não tem nenhuma outra coisa nesse momento

1:52executando junto com Amém e a gente eh vai mostrar para vocês agora então o que que acontece nesse momento bom a primeira das

2:14ações de iniciação que devem ser realizadas no servidor a primeira delas é essa daqui ela diz respeito checagem dos parâmetros que vieram para a m dentro do vetor

2:39args a gente conhece esse vetor args desde a primeira aula da nossa disciplina esse vetor arges Ele sempre teve presente em qualquer programa que a gente fez anteriormente só que durante muito tempo

2:59emos exatamente para que que ele servia e isso deve ter ficado Claro na aula que a gente explicou sobre as classes específicas do cliente ali naquela ocasião a gente falou muito sobre o vetor

3:19args se você ainda não assistiu essa vídeoaula é interessante assistir porque lá você vai ter explicações bem mais detalhadas a respeito do Propósito né Desse vetor arges mas o fato é que a ação número um deve checar os parâmetros que vieram no

3:42args esses parâmetros servem para que o usuário possa indicar o usuário administrador do e servidor hein porque nós estamos aqui no sistema Então quem é usuário aqui é o usuário

4:04que administra o servidor tá então eh esses parâmetros que vem no vetor arg são parâmetros que serviriam pro usuário que é administrador do Servidor poder indicar qual porta que ele quer que o servidor adote para aceitar conexões de

4:26clientes é importante saber que e espera-se que nesse vetor args existam zero parâmetros ou então um parâmetro nesse vetor arg só deve ter uma informação ou então nenhuma se no vetor arg

4:49tiver duas ou mais informações então está errado E é claro vai haver sinalização desses erros então se eu puser no no no vetor arges parâmetros de dois para mais vai vão ser

5:10sinalizados erros tá agora se no vetor arges não tiver absolutamente nada então tudo bem não vão ser sinalizados erros porque isso é aceitável se no vetor arges houver uma única informação só um parâmetro colocado ali na posição zero do vetor

5:31args também não vai acontecer a sinalização de erros por quê Porque uma informação é aceitável zero é aceitável uma é aceitável dois ou mais não são aceitáveis no caso de haver uma informação no vetor arges Então é porque o usuário

5:54administrador indicou qual era a porta que ele desejava que o servidor adotasse para atender as conexões dos clientes e justamente essa porta é que seria a única informação contida no vetor args é claro que essa única informação

6:16poderia estar errada por exemplo ela poderia ser uma informação que não fosse numérica ou então ela poderia ser um número de uma porta que não está livre para ser usada para ser adotada pelo servidor porque já tem algum outro programa rodando na mesma máquina que

6:36usa que adotou aquela porta então mesmo que haja uma informação só no vetor arges ainda podemos ter sinalização de erros por quê Porque essa única informação poderia tá errada poderia ser uma informação que não fosse numérica poderia ser uma informação que

6:58representasse uma a porta mas uma porta que já está em uso então nesses casos ainda teríamos sinalização de erros tá agora se aqui no vetor arges a gente tivesse uma informação só e essa informação fosse numérica e essa informação representasse o número de uma

7:19porta que está livre para ser usada para ser adotada pelo programa servidor Então nesse caso nenhuma sinalização de erros aconteceria e a porta contida aqui seria adotada pelo servidor mas se no vetor arges não tiver nada não tiver

7:41informação nenhuma guardada no vetor arges o que que isso significa significa que o usuário administrador não indicou a porta que ele desejava que o servidor adotasse para aceitar conexões dos clientes ele não indicou e o que acontece quando ele não

8:01indica vai dar erro não não vai dar erro nesse caso o que vai acontecer é que o servidor vai adotar uma porta padrão para aceitar as conexões dos clientes Então se o usuário administrador quiser indicar a porta que ele quer que seja adotada ele pode fazer

8:24isso passando parâmetros para o programa servidor que seriam recebidos nesse vetor ARS Mas isso é uma opção não uma obrigatoriedade o usuário tem essa opção de indicar a porta que ele quer que seja

8:45adotada Mas se por acaso ele não fizer isso uma porta padrão vai ser adotada né e o servidor vai funcionar do mesmo jeito só que com essa porta padrão tá Então essa é a primeira ação que acontece né A primeira ação de

9:08iniciação que acontece eh no início da função Main do método Main do Servidor tá eh a gente já comentou bastante né sobre o vetor arges quando demos aquela aula

9:29sobre o cliente sobre a estrutura da implementação do cliente mas eh eu gostaria de aproveitar o momento né em que a gente está agora justamente falando novamente sobre isso para trazer para vocês umas informações adicionais todo mundo que já assistiu a aula sobre

9:50o cliente deve se lembrar que para o o usuário poder passar esses parâmetros que iriam passar esses parâmetros pro programa né que aqui no caso é o servidor que iriam acabar guardados aqui no vetor args pro

10:13pro para m ter acesso a eles a gente viu lá na videoaula sobre o cliente que o isso poderia ser feito através de um comando dado no prompt de comandos do sistema operacional é era uma maneira da gente poder passar esses Tais parâmetros

10:34pro programa e eles acabariam aqui disponíveis no vetor args para o método M usar eu gostaria de mostrar para vocês uma alternativa E qual seria essa alternativa basicamente a ideia seria

10:56criar atalhos como eu criei aqui ó servidor cliente são atalhos eu posso criar esses atalhos na área de trabalho posso criar esses atalhos no menu iniciar posso criar esses atalhos eh em qualquer lugar na realidade né eu

11:16quero mostrar para vocês que uma vez criados Se eu der um duplo clique no servidor no atalho pro servidor o servidor roda conforme todo mundo pode ver aqui tá rodando ó o servidor está ativo para desativá-lo uso o comando desativar e se eu der um duplo clique no

11:39atalho do cliente ele também roda conforme todo mundo pode ver aqui já tá funcionando ó já tá pedindo aqui a opção do usuário Digamos que eu escreva mais o

12:00[Música] iG e ele me dá 8 por porque todo cliente tem no servidor uma variável que inicialmente Vale zer eu fiz mais 8 é óbvio que a hora que eu escrevi igual deu 8 agora eu faço

12:21dividido por 4 igual deu do Por que deu dois porque agora depois que eu fiz mais o a variável que o meu cliente tinha lá no servidor estava valendo oito tanto que na hora que eu fiz igual ele me deu que o valor atual é

12:42oo agora fazendo dividido por 4 obviamente 8 di por 4 a variável lá no servidor vai ficar valendo 2 na hora que eu chego aqui e peço igual ele me diz dois né então programa tá funcionando né nosso programa tá funcionando e o mais

13:03interessante é que ele não foi acionado nem de dentro de um ambiente de desenvolvimento e nem tampouco digitando comando no prompt de comando ele eles foram acionados né os os dois programinhas aqui pelos links né que eu

13:25criei agora como é que são esses links como como é que eu crio um link acho que é uma coisa legal da gente ensinar para vocês né então vou fechar aqui os programinhas e vamos falar sobre a criação dos links para criar um link na realidade é muito

13:46simples é só a gente clicar onde a gente quer criar o link por exemplo aqui na área de trabalho com o botão direito do mouse vai aparecer esse menu eu escolho novo at atalho e link é a mesma coisa né atalho é o nome que se dá em português então novo

14:06atalho e ele criou aqui para mim ó o meu novo atalho com esse nome né De novo atalho e apareceu essa janelinha aqui ó que é para eu eh escrever né Qual é o comando que eu daria lá no prompt de

14:26comandos para executar o que eu quero que seja executado quando eu clicar nesse atalho então o atalho ele fica associado a um comando um comando que poderia ter sido dado no prompt de comandos mas eu não vou dar esse comando no prompt de comandos eu vou associar Esse comando a um atalho ele vai ficar

14:47portanto associado ao atalho e quando eu clicar no atalho É como se eu tivesse dado o comando no promto de comandos tá para rodar o Java programas feitos em Java a gente deve escrever Java e o nome do programa que a gente

15:08quer rodar por exemplo e Servidor ou então por exemplo cliente o interessante pessoal é que eu já vou colocar aqui o resto do do do do

15:29dos complementos desse comando todo mundo lembra lá da aula em que eu ensinei dar comando no Prom de comando que no Prom de comando a gente colocava né aqueles parâmetros que a gente quer passar pro programa de forma que ele eh receba né lá no vetor args da Main tá

15:51então se eu fosse Eh escrever aqui Java servidor eu poderia não pôr parâmetro nenhum na frente deixar só assim o que significaria que o servidor iria escolher porta padrão Ou se eu quiser

16:11indicar a porta que eu desejo que o servidor use eu posso escrever aqui o número da porta esse 4000 iria parar lá no vetor arges do Servidor da M do Servidor tá então basicamente eu escrevo isso ó Java servidor 4000 dou avançar ele vai

16:34perguntar para mim um nome pro atalho é esse nome aqui ó tá vendo ó esse atalho chama servidor esse outro atalho aqui chama cliente que nome que eu quero dar para esse atalho que eu tô criando aqui eu vou chamar ele de serve porque afinal de contas o comando

16:55que eu pus ali é do Servidor mas eu vou chamar ele de ser que eu já tenho um atalho chamado servidor aqui tá aí eu vou concluir uma vez concluído ó já está aqui o atalho criado o importante é que vocês saibam que Apesar dele já tá

17:16criado ele não está pronto ele não funciona ainda tá se eu der um duplo clique aqui ó não vai ó não não funcionou Por que que ele não não está funcionando né ele não está funcionando porque ainda tem um pequeno detalhe que eu preciso fazer aqui nesse atalho que é

17:37o seguinte eu preciso clicar nele com o botão direito do mouse e escolher propriedades e nas propriedades vocês vão ver que a gente tem aqui destino isso é exatamente o comando que

17:58eu tinha escrito e que eu diz que eu poderia escrever no prompt de comandos que ele funcionaria né que é esse comando só que lembrem eu escrevi só assim ó Java só escrevi Java e em seguida eu escrevi servidor e em seguida eu escrevi

18:214000 foi isso que eu escrevi mas notem que aqui tá escrito bem mais do que Java tá escrito bem mais por quê Porque na realidade ele escreveu o local onde está o Java o Java aqui no meu computador está no disco C dentro de uma pasta chamada program

18:47files dentro de uma pasta chamada Java dentro de uma pasta chamada jdk traço 13.0.1 dentro de uma pasta chamada Bin

19:07então ele já colocou ali a pasta tá nem sempre ele seria capaz de colocar essa pasta tá eh ele só foi capaz porque o meu sistema operacional está configurado de um jeito que se eu escrever simplesmente Java ele já vai saber onde está porque o meu sistema operacional tá com figurado para

19:29isso tá agora e se não estivesse se não estivesse eu teria que escrever toda essa parte aqui se eu não se não tivesse configurado né Essa parte não estaria escrita aqui tá estaria só java.exe e eu teria que

19:49escrever onde ele está para isso bastaria eu procurar onde que ele está aqui no no explorador de arquivos né Localizar onde tá o Java e perceber que ele tá nessa pastinha aqui ó C2 P program files Java

20:10jdk 13.0.1 barbin então eu perceberia que ele tá nessa pasta poderia copiar isso daqui ó copia control c vem aqui e cola control v e dessa forma a gente indicou onde tá instalado no nosso computador o

20:32Java pra gente poder eh dar esse comando aqui ó Java pxi tá eu tenho que dizer onde está o Java Note que ele já tinha adivinhado que tava nesse lugar por quê Porque o meu computador está configurado de uma forma tal que ele sabe onde tá o Java e ele completou ali

20:53sozinho para mim mas eh poderia não estar né configurado e aí a gente teria que completar essa parte aqui sozinho né a mão na na mão mesmo e a gente faria como procurando aqui no explorador de arquivos onde que o Java

21:13tá instalado e copiando essa pastinha para cá antes do comando java.exe e essa parte aqui na frente a gente já tinha escrito né servidor 4000 Então isso é uma coisa que preciso ressaltar para vocês que pode ser que essa parte aqui

21:34não esteja preenchida né aí a gente vai ter que preencher agora essa parte aqui ela está preenchida Mas ela está preenchida errada foi preenchido automáticamente Mas não é isso que deveria estar aqui aliás eh às vezes é é é meio complicado né a gente ter coisas que acontecem

21:55automaticamente coisas que acontecem automaticamente nem sempre acontecem do jeito que a gente quer então eh a gente eh aqui teve né um preenchimento automático e não foi um preenchimento automático correto tá isso acontece muitas vezes em muitas outras

22:17situações não só aqui na criação de atalhos tá de coisas acontecerem automaticamente e não serem exatamente as coisas que a gente gostaria que acontecesse sim então a gente eh tá enfrentando uma situação dessa né teve aqui um preenchimento automático que não tá certo o que deveria estar

22:38escrito aqui é onde está instalado o programa servidor em que pasta está o programa servidor compilado todos os ponto Class do programa servidor é isso que deveria estar escrito aqui então eu vou vir aqui né no no meu

23:00computador no disco C do pontos dentro da pasta fazedor de continhas cliente servidor tem a pasta cliente tem a pasta servidor eu vou entrar dentro da pasta servidor é aqui que estão os pont Class ou seja o resultado da compilação das minhas classes que constituem o servidor

23:23é aqui que elas estão Então eu preciso pegar esse nome de pasta aqui Crol c e preciso colar aqui control V Então o que tem que estar aqui é a pasta Onde Estão onde estão as classes

23:43que formam o meu programa e não que ele tinha preenchido aí automaticamente se eu chegar aqui e clicar agora em aplicar Ok o link que eu criei aqui já foi eh atualizado observem que se eu der um duplo Clique nele agora agora rodou tá então agora

24:07funcionou porque agora Eu ajeitei o que não estava certo aqui nesse link uma outra coisa que eu queria mostrar para vocês antes de encerrar essa parte aqui do dos parâmetros passados pros programas no vetor args agora através de link né antes de

24:29encerrar esse assunto eu gostaria de mostrar para vocês só um pequeno detalhe o atalho do cliente já tá feito tá funcionando conforme eu mostrei já tinha mostrado né Eh como que ele foi criado seguindo a mesma lógica né que eu já acabei de explicar para vocês aqui para criar o

24:51o o atalho serve só tem uma pequena observação aqui que é a seguinte quando eu mostrei para vocês como que se ativava um programa lá do promt de comandos eu falei que na hora de ativar o cliente eu teria que escrever na frente né Java

25:14na frente de Java cliente eu teria que escrever ou Nada caso eu quisesse as opções padrão né ou eu poderia escrever a máquina Onde está rodando o servidor ou poderia escrever a máquina e a porta adotada pelo servidor e lá naquela

25:34ocasião quando eu escrevi a máquina eu escrevi local host eu expliquei para vocês que local host representava a máquina local que eu tô usando E como eu tô usando um computador só para rodar o cliente o servidor na hora que eu for rodar o cliente tudo bem eu falar que ele deve se Conectar

25:54conectar a um servidor que está no local host ou seja na mesma máquina né mas que se tivesse numa outra máquina poderia escrever o nome da máquina ou o IP e local host é o nome da máquina mas eu posso escrever também o IP e nesse link aqui ó está escrito o IP no atalho cliente tá escrito o IP vou mostrar para

26:17vocês ó se eu vi aqui em propriedades hha que eu vi aqui no comando ó esse comando aqui é Java inclusive dizendo onde está o java em seguida tem cliente em seguida tem o IP que é o IP aqui dessa Minha

26:38máquina tá e em seguida 4000 aqui eu poderia ter escrito Se eu quisesse local host mas dessa vez eu pus o IP só para mostrar para vocês que também dá certo tá E aqui é claro tem a pastinha Onde está o cliente Onde está o Programa

26:59cliente Onde estão os os arquivos pon clas as classes né que formam o cliente então é isso daqui já tava atualizado e por isso já funcionava né na verdade aqui também já tava atualizado esses dois eles estavam certos né eles estavam funcionando já eh de cara né Eu tive que criar um aqui

27:21para mostrar para vocês os ajustes que são necessários Espero que todo mundo tenha entendido ccou no servidor rodou clicou no cliente rodou e funcionou perfeitamente ol já está conectado ao servidor Então isso é o que eu queria

27:42falar para vocês sobre o os parâmetros passados no vetor args eu queria mostrar para vocês que a gente poderia se quisesse usar atalhos tá mostrei para vocês como esses atalhos poderiam ser criados Ok bom vamos voltar

28:04agora as ações de iniciação que eu estava mostrando para vocês que aconteciam no início da M do Servidor já tínhamos acabado de falar sobre a ação um Vamos falar agora a respeito da ação

28:25dois ainda no início da M do Servidor após realizar essa ação um devemos realizar essa ação dois que é o quê declarar e instanciar uma estrutura de dados que no nosso caso é um Array list mas poderia

28:45ser uma estrutura de armazenamento qualquer nós vamos declarar instanciar essa estrutura ela vai se chamar usuários então a minha estrutura vai se chamar usuários e vai ser do tipo arraylist é um objeto chamado usuários da classe arraylist nós vamos declarar E

29:06instanciar para quê para armazenar nela objetos da classe parceiro onde estarão todos os acessos aos clientes conectados que são justamente os parceiros do Servidor Quem são os parceiros do Servidor os clientes

29:31conectados Então dentro dessa estrutura aqui nós teremos um monte de objetos da classe parceiro ó um monte de objetos da classe parceiro estarão armazenados aqui dentro cada um deles vai ser um acesso a

29:51um cliente que tá conectado no servidor Eh esses acessos eles vão vão ser usados ao longo de todo o programa para se comunicar com os clientes Então sempre que eu precisar realizar qualquer tipo de comunicação com os clientes conectados é aqui que eu vou encontrar

30:14os clientes conectados porque eu tenho uma estrutura de dados para guardar esses objetos da classe parceiro né E conforme vocês devem se lembrar a gente teve uma vídeoaula na qual a gente comentou sobre as classes

30:35que são comuns tanto pro Programa cliente quanto pro programa servidor e essa classe parceiro ela tava no meio Néa ela era uma das classes que eram eh comuns tanto pro Programa cliente quanto pro programa servidor e essa classe ela tinha entre os seus

31:00atributos um socket um receptor que tinha tipo Object input stream nós tínhamos um socket chamado conexão um receptor que era da classe Object input stream e um transmissor que era do

31:21tipo Object output stream eram os atributos aqui da classe parce então e essa classe parceiro tinha métodos né envie receba espie eram os principais métodos que eu encontrava aqui para eu poder pedir que

31:43o servidor eh Para para que no servidor eu pudesse pedir que o cliente me enviasse alguma coisa ou para que no cliente eu pudesse pedir que o servidor me enviasse alguma coisa eu chamava o método env para que no servidor eu pudesse pedir que o cliente eh recebesse alguma coisa ou para no

32:06cliente eu pedi que o servidor recebesse alguma coisa eu usava o método receba né Então essa classe parceiro ela tem métodos que me permitem enviar receber eh informações pro parceiro ou seja para quem tá conectado né E nós vamos ter no

32:28servidor vários eh clientes conectados não sei se vocês vão se lembrar mas se não Se lembrarem assistam novamente o vídeo no qual eu expliquei a estrutura da implementação do programa cliente mas lá no Programa cliente a gente tinha só um objeto da classe

32:48parceiro e ele se chamava servidor por quê Porque o cliente só se comunicava com um programa e era o programa servidor agora o servidor já é diferente porque ele ele se comunica só com Programa cliente mas com vários programas cliente que cada usuário tá

33:10usando onde quer que ele queira usar na máquina dele né então eu posso na minha casa pôr para rodar um programa cliente você na sua casa pode pôr para rodar um programa cliente e o Programa cliente que eu pus para rodar e o Programa cliente que você ps para rodar vão se comunicar com o servidor então o

33:30servidor vai se comunicar com dois programas clientes um que tá rodando na minha casa e um que tá rodando na sua casa né e pode ser que sejam não apenas dois mas 3 4 10 50 100 programas cliente né então o servidor ele pode dar conta de atender um monte de clientes ele pode

33:53ter um monte de clientes conectados então no servidor não vai ter apenas um objeto da classe parceiro Vai ter um monte Vocês estão entendendo e vão estar todos armazenados nessa estrutura de dados aqui que nesse nessa ação de número dois

34:15eu vou declarar e instanciar tá Então essa é a ação de iniciação de número dois finalmente vamos falar aqui da ação de iniciação de número

34:39três que deve ser realizada no início da Main do Servidor depois de termos realizado as ações de número um e de número dois o que faremos na ação de número três vai ser

35:00declarar instanciar e startar uma aceitador de conexão aceitador de conexão é uma classe que existe no servidor uma classe que erda de tred portanto essa classe é tred nós vamos declarar instanciar e startar uma

35:24aceitador que eh terá a missão de aceitar conexões dos eh programas cliente então a missão dessa classe aqui vai ser ficar aceitando conexões dos programas cliente por isso ela se chama aceitador né de

35:47conexão o Construtor dessa classe tem dois parâmetros então a Main a hora que declarar instanciar para depois startar essa aceit a vai ter que passar pro Construtor dela a porta que dev ser

36:08usada pela aceit para aceitar as conexões dos clientes e também a deve passar pro Construtor dessa Classe A estrutura de dados usuários a portanto vai compartilhar com ela a estrutura de dados usuários

36:31eh e ela a cada conexão aceita vai startar vai declarar instanciar e startar uma supervisora de conexão supervisora de conexão é uma classe que também erda de tred e que tem a missão

36:52de supervisionar uma conexão Cuidar dessa conexão e eh a aceitador de conexão né Tem como missão a cada conexão aceita startar uma supervisora de conexão tá então aceitou uma

37:16conexão starta uma supervisora para cuidar daquela conexão aceitou outra conexão starta uma supervisora para Cuidar dessa outra conexão então nós vamos ter rodando um monte de supervisoras de conexão só uma aceitador

37:39E aé tá então quando a gente chegar aqui nessa parte de tarefas simultâneas que já não fazem mais parte do início da M aqui nas tarefas simultâneas nós vamos ter coisas que vão ser executadas no final da

38:00Main no final da M do Servidor [Música] eh Então a gente vai ter ações né que vão estar sendo realizadas no final da M do Servidor e nesse momento a gente já tá

38:22na na situação de ter tarefas simultâneas executadas como eu já falei para vocês no início da M do Servidor só a m do Servidor tá rodando Mas a partir do momento que a m do Servidor chega aqui na ação

38:42TRS e starta uma aceitador ela já não vai estar mais rodando sozinha ela vai estar rodando junto com a aceitador e a partir do momento que a aceitador aceita uma conexão a Ace starta uma supervisora aceitou outra conexão starta outra

39:03supervisora aceitou outra conexão aceita outra supervisora de forma que quando a m estiver rodando lá os comandos que fazem parte do fim da M ela não vai estar mais rodando sozinha ela vai est rodando com uma aceitador e várias supervisoras de

39:25conexão então aí já vão ser várias tarefas que vão estar em execução simultânea tá agora aqui nesse momento O que é importante a gente saber que no início da M do Servidor a última ação que vai ser feita

39:45aqui que ainda a gente diz que faz parte do início da M do Servidor né a última ação vai ser declarar instanciar e startar uma aceitador essa aceit na hora de ser instanciada o Construtor dela vai ter que receber a porta na qual as conexões com os clientes vão ser

40:10aceitas e também vai receber a estrutura de dados usuários queé vai compartilhar com ela né a estrutura de dados usuários e ela vai fazer o que com essa estrutura de dados usuários O que que a aceitador faz com essa estrutura ela Compartilha essa estrutura com cada supervisora que

40:33ela startar na hora que uma conexão acontecer na hora que uma conexão for aceita então aceitou uma conexão starta uma supervisora e vai passar pro construtor de supervisora esse essa estrutura de dados

40:55usuários então a aceita Tem que compartilhar essa estrutura né com todas as supervisoras que ela startar quando a gente for falar mais abaixo sobre as supervisoras a gente vai entender para que que a supervisora usa né Essa estrutura de dados mas o fato

41:17aqui agora é que a gente tem que saber que isso vai acontecer né A M Na hora que startar a aceitador vai passar com o parâmetro pro construtor da aceitador a porta ser usada para aceitar conexões de cliente e para compartilhar com a aceitador vai passar também pro

41:38Construtor a estrutura de dados usuários e a aceitador vai ter portanto acesso né a essa estrutura de dados usuários e eu já expliquei que toda vez que uma conexão for aceita ela vai declarar instanciar e e startar uma supervisora

42:00para cuidar daquela conexão que foi aceita e nesse momento ela vai passar pro construtor da supervisora para compartilhar com a supervisora que ela está startando essa estrutura de dados usuários mais para frente a gente vai ver o que que a supervisora deve fazer com essa

42:23estrutura depois das ações que ocorre no início da M do Servidor as quais a gente já comentou são ações de iniciação as ações 1 2 e 3 depois disso ter acontecido a gente entra

42:44na na etapa de execução de tarefas simultâneas tarefas vão estar em execução simultânea e a m vai ser uma dessas tarefas tá o final da M do Servidor fica executando junto com as

43:07tredes que foram estadas após ele executar as tarefas de iniciação então a gente tá aqui numa etapa agora na qual várias tarefas simultâneas podem estar sendo executadas pelo menos duas que

43:28que seriam né A M do Servidor que já vai estar no final ela vai est em execução e também essa aceitador de conexões aqui que foi eada ainda no início da M do Servidor Então pelo menos essas duas tarefas vão

43:50estar em execução mas poderemos eventualmente ter mais do que essas duas tarefas mais do que o final da Main e a aceitador de conexões em execução pode acontecer por quê Porque a aceitador de conexões ela starta várias supervisoras de

44:14conexão uma para cada conexão que ela aceitar então se a aceitador de conexão Já aceitou algumas conexões ela já colocou para rodar simultaneamente várias supervisoras e a aceitador continua rodando e o final da Main também

44:36continua rodando se por um acaso a aceitador de conexão ainda não aceitou nenhuma conexão então ela ainda não pôs nenhuma supervisora para rodar e ela a aceitador vai ser a única tarefa simultânea que vai tá sendo executada em

44:57simultaneidade com o final da M do Servidor Tá bom vamos falar qual é o papel desse final dessa m do Servidor que conforme a gente já sabe fica executando junto com as tredes estadas

45:18bom tá aqui em no item um o que que se espera desse final D espera-se que ela continuamente interaja esse continuamente indica que vai haver um loop haverá uma repetição para que aconteça interação

45:43interação interação várias interações né então haverá um loop esse continuamente indica isso indica que haverá um loop um loop para que o final da M continuamente interaja com o usuário administrador avisando para ele que o servidor está ativo e informando para

46:06ele que ele pode desativar o servidor basta que ele Digite o comando desativar então o o finalzinho da Main fica continuamente informando isso ao usuário e aguardando que algo seja de digitado então ele informa que o

46:29servidor está ativo informa que pode se desativar o servidor digitando o comando desativar e ainda fica aguardando alguma coisa ser digitada quando a digitação acontecer porque enquanto ela não acontecer está sendo aguardada a

46:52digitação o final da M estará aguardando a dig ação quando a digitação acontecer se por um acaso não for o comando desativar um erro vai ser informado pois o único comando que é

47:13aceito lá no servidor vai ser o comando desativar Então se por acaso a pessoa digitar um comando que não é o comando desativar ela vai ser informada que digitou alguma coisa errada e se ela digitar Esse comando o comando desativar que que vai acontecer

47:35a vai então enviar para todos os parceiros cliente que estão conectados Ou seja todos aqueles que estão presentes na estrutura de dados usuários vai enviar para todos eles um comunicado de deslig

47:58e em seguida a a m do Servidor termina o programa programa em seguida é terminado tá ela avisa para todos os parceiros cliente que estão conectados que estão presentes na estrutura de dados chamada

48:19usuários ela envia para todos eles um comunicado de desligamento informando com isso que o servidor está sendo desligado desativado E aí o depois de mandar esses esses comunicados de desligamento o finalzinho

48:40da M termina o programa termina o programa como um todo termina não só a Main mas todas as tredes são terminadas nesse momento depois de ter mandado para todos os parceiros clientes presentes nessa estrutura o tal do comunicado de

49:01desligamento Então é isso que o finalzinho da Main precisa ficar fazendo Vamos falar agora sobre a segunda tarefa simultânea tarefa esta que vai estar

49:21executando ao mesmo tempo que executa eh o final da Main do Servidor Então essa tarefa simultânea número dois ela é realizada pela tred aceitador de conexão

49:42e essa essa trad tem lá o seu método Run e nesse método Run que vai estar executando porque quando a gente starta uma trad o método que entra em execução é o método do Run então o método Run vai est lá executando e ali tem um loop ali tem uma repetição Para quê Para que

50:07continuamente a aceitador de conexão aceite novas conexões ela deve continuamente aceitar novas conexões com os programas cliente que pedirem qualquer cliente que de conexão ela deve

50:29aceitar e aí assim que ela aceitar uma conexão ela vai ficar continuamente aceitando conexões hein assim que uma conexão for aceita ela vai startar uma tred do tipo supervisora de conexão para supervisionar ou seja para atender

50:51qualquer solicitação recebida por aquela conexão que é Ela acabou de aceitar e naturalmente ela compartilha naturalmente a aceitador de conexão compartilha com ela com ela quem com a supervisora de conexão que ela

51:14startou para supervisionar a conexão que ela acabou de aceitar Então essa conexão aqui ela é passada como parâmetro para o Construtor da supervisora de conexão hein a aceitador de

51:34conexão aceitou a conexão ela tem a conexão e ela vai querer startar uma supervisora para supervisionar aquela conexão então o que que ela vai fazer ela vai declarar e instanciar a supervisora antes de startar e na hora que ela for instanciar a supervisora ela

51:55vai passar pro construtor da supervisora a conexão que ela acabou de aceitar Então ela passa a conexão que ela acabou de aceitar e ela passa também para compartilhar com a supervisora ela passa a estrutura de dados usuários que é onde estão todos os

52:18clientes conectados observem que a aceitador de de conexão ela não faz muito muita coisa ela simplesmente aceita uma conexão e já starta uma supervisora declara instancia passa pro Construtor a conexão que ela acabou de aceitar e

52:40também para compartilhar com a supervisora ela passa o a estrutura de dados usuários E aí ela já starta supervisora e como ela tá em loop Ela tá aqui num processo contínuo ela uma vez que startou a supervisora ela

53:00volta a aceitar novas conexões depois que ela startou a supervisora ela volta a aceitar uma nova conexão aí se o cliente solicita uma nova conexão ela aceita declara Instância uma supervisora

53:21Passando pro construtor da supervisora a conexão que ela acabou de aceitar e também a estrutura de dados usuários aí ela starta essa supervisora que ela declarou instanci e volta a aceitar conexões tá ela fica

53:42continuamente fazendo isso só isso A missão dela é só aceitar a conexão é bom que ela seja curta é bom que ela seja rápida porque ela não deve demor muito para voltar a aceitar uma conexão Porque se ela aceitou uma conexão e ela

54:03demorar muito para voltar a aceitar outra pode acontecer de um cliente solicitar e não conseguir a conexão por quê Porque ela tá ela estaria ocupada né e não estaria lá aceitando tá então é bom que ela seja de fato curta que ela seja de fato rápida e que ela não faça

54:25muita coisa além de aceitar ela aceita a conexão já cria uma supervisora para cuidar daquela conexão ou seja ela aceitador ela não cuida da conexão ela só aceita e já declara Instância uma supervisora passa paraa supervisora a conexão que ela acabou de aceitar passa

54:46pra supervisora a estrutura de dados usuário já starta a supervisora e já volta a aceitar uma outra conexão tá então ela faz só isso né aceitar declarar instanciar startar e voltar a aceitar Então ela tem

55:09um uma missão relativamente breve uma relativamente curta ela só aceita quem cuida da conexão de fato vai ser a supervisora e como eu já disse isso é proposital é bom que a aceitador seja breve seja rápida naquilo que ela

55:30tem que fazer para quê para ela aceitar uma conexão e não demora muito já tá aceitando outra e não demora muito já tá aceitando outra para que não corramos o risco de um cliente solicitar uma conexão e não conseguir porque a aceitador estaria ocupada fazendo alguma coisa e não estaria aceitando ela tem

55:52que voltar a aceitar novas conexões bem rapidamente e foi assim que a nossa aceitador de conexão foi programada e agora para concluir esse vídeo vamos falar a respeito do terceiro e último tipo de tarefa

56:14simultânea que vai tá rodando lá pro final da execução da M do Servidor tá esse terceiro e último tipo de tarefa é um tipo de tarefa que é eh

56:39realizado por cada trad do tipo supervisora de conexão que for estada várias trads desse tipo podem ser estadas pela aceitador de conexão conforme eu já expliquei antes e cada eh cada trad desse tipo aqui

57:03supervisora de conexão que for estada vai fazer o seguinte inicialmente ela vai instanciar um transmissor que é do tipo Object output stream Então ela declara e instancia um

57:24transmissor e também vai declarar e instanciar um receptor que é do tipo Object input [Música] stream os dois tanto o transmissor quanto o receptor que ela vai declarar em Instância a vão estar Associados a conexão que ela supervisiona que é

57:46justamente a conexão que foi recebida como parâmetro no Construtor dessa trad mandado mandada né por essa trad aqui ó Então essa trad manda pro Construtor

58:08dessa trad essa conexão e com ela declara-se e instancia um transmissor e também um receptor com tudo isso ou seja com a conexão com o transmissor com o receptor o que que é

58:33feito inicialmente aqui por essa trad ela vai agora declarar instanciar um parceiro cliente tá ou seja um cliente do tipo parceiro que vai ser usado ao longo de toda sua execução ou seja ao longo de toda a execução dessa

58:54trad para se comunicar com o cliente além de incluí-lo na estrutura de dados usuários Então a nossa tred supervisora recebeu uma conexão com a conexão criou um transmissor um receptor e também um

59:16parceiro cliente e ela vai incluir esse parceiro cliente na estrutura de dados usuários Para quê Para que aquele parceiro cliente que ela acabou de declarar e instanciar usando a conexão que é responsabilidade dela supervisionar para que aquele parceiro

59:36cliente como qualquer outro que está presente na estrutura de dados usuários possa receber comunicados do Servidor destinados a todos os clientes Então sempre que o servidor precisar mandar comados que são

59:57destinados a todos os clientes ele vai usar essa estrutura de dados usuários por porque nela vão estar todos os parceiros cliente que se que que que correspondem na realidade aos clientes que estão conectados então ele vai usar né o servidor quando tiver que mandar

1:00:18algum tipo de comunicado para todos os clientes ele vai usar essa estrutura porque ali devem estar todos os clientes e por isso ela vai a nossa trad aqui inicialmente né vai incluir esse parceiro cliente que ela acabou de

1:00:39declarar Instância a na estrutura fazendo com que a estrutura contenha mais um cliente ela deve conter todos e vai conter mais esse porque esse acabou de se conectar e a nossa supervisora tá cuidando da conexão [Música]

1:01:01eh e o que quando é que o servidor precisa mandar eh comunicados para todos os clientes isso acontece quando o servidor recebe o comando desativar quando o usuário administrador digita o comando

1:01:23desativar e aí o que acontece ele vai ter que mandar para todos os clientes conectados e ele vai achar uma forma de se comunicar com todos eles dentro dessa estrutura ele vai ter que se comunicar com todos eles e mandar o comunicado de

1:01:44desligamento né Então essa é uma situação em que acontece né do Servidor querer mandar comunicado a todos os clientes muito bom feito isso né Depois disso que eu acabei de explicar que são

1:02:04coisas que inicialmente devem ser feitas pela sua tred supervisora de conecção então depois dessas coisas iniciais que que ela deve fazer ela deve passar a continuamente receber que significa ISS continuamente significa loop ela vai ficar num Loop recebendo recebendo

1:02:27recebendo recebendo recebendo o quê recebendo o que for enviado pelo parceiro cliente que ela declarou e instanci além de incluir na estrutura usuários então ela vai ficar recebendo o que for enviado pelo

1:02:48parceiro cliente e vai atender tudo que for solicitado então então se for solicitada uma operação ela vai realizar a operação uma adição uma subtração uma multiplicação uma divisão se for solicitado um resultado

1:03:09se vier um pedido de resultado ela vai enviar o resultado ao Programa cliente solicitante isso quando quando vier um pedido de resultado lá do cliente e ela eventualmente vai remover o

1:03:29parceiro cliente da estrutura de dados usuários e vai terminar a sua execução quando quando vier uma solicitação do cliente do tipo pedido para sair então se o o cliente mandar um pedido para

1:03:51sair ela vai receber esse pedido para sair e ela vai eh terminar a sua execução mas antes ela vai remover o parceiro cliente que mandou o pedido para sair da estrutura de dados usuários esse parceiro cliente

1:04:13é o parceiro cliente que ela supervisiona cada tred desse tipo supervisiona um parceiro cliente e se através desse parceiro cliente vier um pedido de adição Então ela realiza a adição se vier um pedido de subtração

1:04:35ela realiza a subtração se vier um pedido de divisão ela realiza a divisão se vier um pedido de multiplicação ela realiza a multiplicação se vier um pedido de resultado ela envia o resultado mas se vier um pedido para sair então ela vai remover

1:04:56parceiro cliente da estrutura de usuários Porque ele pediu para sair então ele sai dessa estrutura onde todos os usuários conectados ficam e termina a sua execução Então ela para de executar ou seja para de estar ali atendendo né esse parceiro cliente há um

1:05:20detalhe que eu não escrevi aqui mas que ela também realiza antes de terminar a execução é executar um método que existe aqui no parceiro cliente que se chama Adeus esse método a Deus faz a desconexão do transmissor do receptor da

1:05:43da da da conexão em si ele desfaz todas essas ligações esse método que existe no parceiro cliente se chama a Deus tá então na na hora que vier um pedido para sair ela vai remover o parceiro cliente da estrutura de usuários ela vai executar do parceiro cliente esse método

1:06:06Adeus e ainda ela vai logo em seguida terminar sua execução não mais cuidando não mais supervisionando aquela conexão daquele parceiro cliente e era isso que eu tinha para explicar para vocês num próximo vídeo

1:06:28nós vamos examinar o código de programação dessas classes

Recently added transcripts

Browse the whole transcript library Browse all Portuguese transcripts

This transcript was generated from the captions YouTube publishes for this video. Get the transcript of any YouTube video atfreeyoutubetranscribe.com, free, unlimited, no sign-up.