PROGRAMAÇÃO DISTRIBUÍDA Primeira Fase da Aplicação Distribuída: Gestão de Salas 1 João Gomes Nº 21150324 Marco Andrade Nº 21190335 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. 2 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 3 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 4 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 5 CÓDIGOS DE COMUNICAÇÃO CONT. Códigos enviados quando há alterações 70 ->Alterações nas reservas 71 -> Alterações nas salas 6 Servidor LIGAÇÃO Cliente Cliente Estabelece Ligação via TCP Servidor aceita ligação e lança thread User: Username, password Cliente envia pedido de autenticação Code 1, message: User Login ok=50 Login fail=51 Code: 50/51 Login ok, cliente lança thread ligação Login Fail, 7 mostra mensagem ao utilizador 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. 8 Thread Multicast Pedido IP/Porto via Multicast Resposta via UDP Pedidos Servidor Invoca método Actualiza, passando o código que recebeu do servidor ThreadCl ient Thread ClientConn ection . . . ThreadCl ient Cliente Gráfico Respostas Thread Ligação SERVIDOR O servidor está implementado da seguinte forma: Servidor Thread Principal Thread Multicast Thread ClientConnection Thread TheadClient 1 … Thread TheadClient N 10 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” 11 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. 12 CLIENTE O cliente está implementado da seguinte forma: Cliente Janela Login Thread Cliente Cliente Gráfico 13 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. 14 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. 15 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. 16 MANUAL DO UTILIZADOR Servidor 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 salas Listar utilizadores, salas e reservas Remover 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 a b c 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. LOGIN Após uma conecção válida poderemos efectuar o login. d e d – nome do utilizador; e – password correspondente utilizador. ao RESERVAR SALA f g h 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. CONSULTAR SALAS i j 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. CONSULTAR RESERVAS k 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.