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

Download

Programa Chat