130 likes | 231 Views
Programa Chat Programação com RMI. Programa Chat. Este programa pretende permitir a conversa entre vários clientes, em computadores diferentes Suporta múltiplas janelas de chat É constituído por dois programas separados:
E N D
Programa Chat • Este programa pretende permitir a conversa entre vários clientes, em computadores diferentes • Suporta múltiplas janelas de chat • É constituído por dois programas separados: • O servidor, contem os métodos para fazer a gestão da lista de utilizadores ligados. • O cliente, que contem os métodos para receber mensagens de outros utilizadores e do servidor.
Servidor User.java ClientInterface.java Main.java Definição Implementação Definição ServerInterface.java
Servidor – Main.java • É o executável do lado do servidor. • Tem a tabela users de utilizadores online. • Implementa as funções definidas em ServerInterface.Java: • boolean addUser(User user) – Adiciona o utilizador á lista de utilizadores online (Hastable users), chama os métodos remotos sendSysMessage e listBoxUpdate de ClientInterface.java para informar que o utilizador ligou-se e enviar a lista actualizada de utilizadores ligados. • boolean removeUser(User user) – Remove o utilizador da lista, chama os métodos anteriores para informar que o utilizador desligou-se e enviar a lista actualizada de utilizadores ligados. • Hashtable getUserList() – Retorna a lista de utilizadores online • User getUser(String user) – Retorna o utilizador sabendo o seu nome • void setUser(User user) – Utilizado pelo addUser() para adicionar o utilizador • boolean hasUser(User user) - Utilizado pelo removeUser() • Contem o método Main() que cria um objecto do tipo Main, cria um registo no porto 10000 e faz o rebind desse objecto com o nome “ServerInterface”
Servidor – ServerInterface.java • Faz a definição dos métodos descritos anteriormente: • boolean addUser(User user) • boolean removeUser(User user) • Hashtable getUserList() • User getUser(String user) • void setUser(User user) • boolean hasUser(User user) • Os dois primeiros métodos são chamados remotamente pelo cliente para este se adicionar ou remover da lista de utilizadores ligados e informar os outros utilizadores do seu estado (online ou offline). Os restantes métodos são chamados pelos primeiros.
Servidor – User.java • Permite criar utilizadores, contendo não só o seu nome mas também outros atributos, dois deles bastante importantes: • IP – endereço ip do utilizador • Port – porto de escuta • Os restantes dados são: • Email e avatar. • Contem procedimentos para retornar e definir os dados anteriores.
Servidor – ClientInterface.java • Contem a definição dos métodos para o envio de texto para uma janela de chat, envio de mensagens para a janela Log e actualização da ListBox do programa. • void sendMessage(User user, String msg) – Executado remotamente pelo cliente “user” para enviar a mensagem “msg” ao cliente local • void sendSysMessage(User user, String msg) – Utilizado remotamente pelo servidor para enviar uma mensagem para a janela principal do cliente local. • void listBoxUpdate(Hashtable si) – Utilizado remotamente pelo servidor para actualizar a lista de utilizadores contida na janela chat principal do cliente local. • void blockUser(User user) – Executado remotamente pelo cliente para bloquear o utilizador local “user”
Cliente ClientInterface.java Definição ServerInterface.java Implementação ClientInterfaceImplem.java Definição ChatFrame.java User.java MainFrame.java
Cliente – ClientInterfaceImplem.java • Implementação dos procedimentos declarados em ClientInterface.java. • Contem a tabela UsersInChat com a lista de utilizadores que estão a falar com o utilizador local e em que janela chat. • Contem a tabela BlockedUsers que contem a lista de utilizadores bloqueados. • void sendMessage(User user, String msg) –Envia a mensagem “msg” do utilizador “user” ao utilizador local. Se o utilizador não existe em UsersInChat, adiciona-o e abre uma nova janela chat. Caso contrário envia o texto para a janela correspondente. • void sendSysMessage(User user, String msg) • void listBoxUpdate(Hashtable si) • void blockUser(User user)
Cliente – MainFrame.java • É o executável do lado do cliente. Abre a janela principal do programa. • Usa a tabela UsersInChat que contem a lista de utilizadores que estão a falar com o utilizador local e em que janela chat e a tabela BlockedUsers • Cria um utilizador com o nome e avatar indicadosno interface, com o IP local e porto disponívela partir do porto 10001 • Executa remotamente o método addUser() • Se o utilizador seleccionado na lista “Users Online” existir em UsersInChat, foca a janela chat correspondente, caso contrário adiciona o utilizador á tabela e abre uma nova janela chat
Cliente - MainFrame.java Avatar. Pode ser alterado fazendo um click com obotão esquerdo do rato. Indicador do estado dos utilizadores (ligados oudesligados do servidor). É alterado pelo servidorusando o SendSysMessage() Lista de utilizadores ligados. É alterada pelo servidor através do método ListBoxUpdate() Adiciona o utilizador seleccionado á lista BlockedUsers com o método blockUser() e envia uma mensagem para a caixa “System Log”
Cliente - ChatFrame • Janela que mostra as mensagens recebidas e envia mensagens a outros utilizadores Texto adicionado pelo SendMessage() Avatar dos dois utilizadores Envia o texto utilizando o método SendMessage() do outro cliente
Feito por: • Hugo Lobo, nº 7137 • Pedro Mateus, nº 8770