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