P ROGRAMAÇÃO D ISTRIBUÍDA Primeira Fase da Aplicação Distribuída: Gestão de Salas João Gomes...

Preview:

Citation preview

1

PROGRAMAÇÃO DISTRIBUÍDAPrimeira Fase da Aplicação Distribuída:

Gestão de Salas

João Gomes Nº 21150324Marco Andrade Nº 21190335

2

ESTRUTURA DE COMUNICAÇÃO

Int code, inteiro que transporta o código referente a operação que se pretende efectuar.

T Message, campo genérico que encapsula os dados necessários para processar a operação descrita pelo campo code.

3

CÓDIGOS DE COMUNICAÇÃO Códigos 0->50, cliente para servidor

1 -> Login 2 -> Pedir listagem de salas 3 -> Pedir Listagem de reservas de salas do utilizador

actual 4 -> Pedir para registar reserva 5 -> Logout 6 -> Pedir para cancelar reserva 7 -> Pedir listagem de todas as reservas

4

CÓDIGOS DE COMUNICAÇÃO CONT.

Códigos 50->100 servidor para o cliente sucesso 99 -> Login efectuado com sucesso 98 -> Preparar para receber listagem de salas 97 -> Preparar para receber listagem de reservas de

salas do utilizador actual 96 -> Sala reservada com sucesso 95 -> Listagem de todas as reservas

5

CÓDIGOS DE COMUNICAÇÃO CONT.

Códigos 50->100 servidor para o cliente, falha 50 -> Login inválido 51 -> Utilizador sem salas reservadas 52 -> Sala já reservada 53 -> Falhou pedido para cancelar reserva

6

CÓDIGOS DE COMUNICAÇÃO CONT.

Códigos enviados quando há alterações 70 ->Alterações nas reservas 71 -> Alterações nas salas

7

LIGAÇÃO

Servidor aceita ligação e lança thread

User: Username, password

Cliente Estabelece Ligação via TCP

Cliente envia pedido de autenticação

Code 1, message: User

Code: 50/51Login ok=50Login fail=51

Login ok, cliente lança thread ligação

Login Fail, mostra mensagem ao utilizador

ClienteServidor

8

LIGAÇÃO

Após verificação das credenciais do utilizador, o programa cliente lança uma Thread que vai receber todas respostas do Servidor.

O cliente Gráfico é responsável por enviar todos os pedidos para obter a informação que necessita.

Cliente Gráfico

Thread Ligação

Invoca método Actualiza, passando o código que recebeu do servidor

Servidor

Thread Multicast

Thread ClientConn

ection

ThreadClient

ThreadClient

.

.

.

Pedidos

Respostas

Pedido IP/Porto via Multicast

Resposta via UDP

10

SERVIDOR

O servidor está implementado da seguinte forma:

Servidor

Thread Principal

Thread Multicast

Thread ClientConnection

Thread TheadClient 1

… Thread TheadClient N

11

THREADS NO SERVIDOR

Thread Principal: Esta thread é responsável por lançar duas

threads: a thread ClientConnection e threadMulticast, esta é ainda responsável pela gestão da consola onde é possível efectuar operações de gestão de salas, utilizadores e reservas.

Thread Multicast: Esta thread é responsável por ficar à escuta de

pedidos multicast de modo a dar suporte a resolução do IP do servidor via multicast, no IP 127.0.0.1 porto 9090. Esta thread responde apenas a mensagens com o conteúdo “IP”

12

THREADS NO SERVIDOR CONT.

Thread ClientConnection: Esta thread é responsável por aceitar os pedidos

de ligação de clientes e pedir a classe Data para registar o socket do cliente e o ID da thread que o vai atender.

Thread ThreadClient: Esta thread é responsável por atender todos os

pedidos de clientes bem como responder a esses pedidos. Esta thread serve apenas para descodificar as mensagens vindas do cliente e fazer os respectivos pedidos à classe Data que é quem trata de toda a informação. Após obter a informação de Data codifica a informação obtida e envia ao cliente.

13

CLIENTE

O cliente está implementado da seguinte forma:

Cliente

Janela Login

ClienteGráfico

Thread Cliente

14

JANELA DE LOGIN

Quando o programa é iniciado é lançada uma janela modal que permite ao utilizador procurar por um servidor através de multicast fazer e fazer Login.

Após um Login com sucesso esta janela é fechada e é lançada uma Thread (ligação) que vai receber todas as mensagens enviadas do cliente para o servidor.

É ainda disponibilizado ao utilizador uma janela gráfica para efectuar as operações que desejar.

15

COMUNICAÇÃO THREAD LIGACAO->CLIENTE GRÁFICO

Quando a Thread ligação recebe uma mensagem vindo do cliente invoca o método Actualiza(int code) que actualiza os dados conforme o código que recebeu por parâmetro.

16

ARMAZENAMENTO DE DADOS

Os dados são armazenados de forma serializada, em três .txt, estes ficheiros são: Reserves.txt, armazena os dados referentes às

reservas; Rooms.txt, armazena os dados das salas

disponíveis no sistema; Users.txt, armazena os dados dos utilizadores

que podem aceder ao sistema.

17

SERVIÇO DE CONSULTA DE SALAS EM JAVA RMI

18

IMPLEMENTAÇÃO DO SERVIDOR COM JAVA-RMI

Servidor

Thread Principal

Thread Multicast

Thread ClientConnecti

on

Thread TheadClien

t 1

… Thread TheadClie

nt N

Serviço JAVA-RMI

server_observer

19

FUNCIONAMENTO

Lookup ao JAVA-RMI

Cliente Regista-se para receber notificações

Serviço notifica o cliente sempre que ocorre uma alteração de salas no período requerido

List de Strings com os períodos em que as salas estão reservadas

Cliente Pede Lista de salas Disponíveis

Retorno com o resultado da pesquisa

Cliente remove-se de recepção de notificações

20

CLIENTE

O cliente dispõe de duas opções de pesquisa: A primeira “Consultar salas disponíveis”

devolve um ArrayList com as salas disponíveis num determinado período de um dia.

A segunda “Registar para receber notificação”, regista-se no serviço para ser notificado sempre que há uma alteração na reserva de salas num determinado período. Este apresenta uma lista com uma entrada para cada tempo em que uma sala se encontra indisponível.

21

SERVIÇO

O serviço é lançado pelo servidor, e recebe uma referencia para a classe data para poder invocar as funções nela contida, bem como ter acesso aos dados das salas. Por outro lado a classe data recebe também um referencia para o serviço JAVA-RMI para o poder notificar sempre que há uma alteração nas reservas de salas.

MANUAL DO UTILIZADORServidor

Cliente

INICIAR APLICAÇÃO

Para inicial servidor ou um cliente basta executar o batch files RunServer.bat e RunClient.bat respectivamente que se encontram na pasta do projecto.

SERVIDOR

A aplicação servidora trabalha em modo consola e assim teremos que ter uma noção acerca dos comandos das seguintes acções:

Adicionar utilizadores e salasListar utilizadores, salas e reservasRemover utilizadores, salas e reservas

Em caso de alguma dúvida persistir basta inserir um comando inválido e será aprensentado um help.

ADICIONAR

Utilizadores

Salas

LISTAR

Utilizadores

Salas

Reservas

REMOVER

Utilizadores

Salas

Reservas

CLIENTE

A aplicação cliente trabalha em modo gráfico e assim teremos que ter uma noção acerca de alguns passos de modo a conseguir executar as acções mais importantes.

CONECÇÃO AO SERVIDOR

Como podemos observar na figura verificamos que existem 3 campos a preencher, assim:a – ip do servidor;

b – porto do servidor;

c – ip multicast onde automáticamente poderemos preencher os campos a e b.

a

b

c

LOGIN

Após uma conecção válida poderemos efectuar o login.d – nome do utilizador;

e – password correspondente ao utilizador.

d

e

RESERVAR SALA

Nesta aba é onde podemos efectuar a reserva de uma sala ao inserir os seguintes campos:f – identificador da sala;

g – dia a reservar;

h – horário da reserva.

f

g

h

CONSULTAR SALAS

Nesta aba é onde podemos consultar uma sala e assim teremos de inserir os seguintes campos:i – podemos optar por 2 métodos para consulta, por sala ou dia/hora;

j – preencher campos acerca da consulta que se pretende.

i

j

CONSULTAR RESERVAS

Nesta aba é onde podemos consultar as nossas reservas e cancelar e assim teremos de inserir os seguintes campos:

k – preencher campos acerca da reserva que se pretende.

k

Recommended