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: 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 Main.java ClientInterface.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 Implementação ClientInterfaceImplem.java ChatFrame.java MainFrame.java ServerInterface.java Definição User.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 indicados no interface, com o IP local e porto disponível a 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 o botão esquerdo do rato. Indicador do estado dos utilizadores (ligados ou desligados do servidor). É alterado pelo servidor usando 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