Escolar Documentos
Profissional Documentos
Cultura Documentos
PROJETO 2022/2023:
FUNDAMENTOS DE SISTEMAS DISTRIBUÍDOS
PL1 – Grupo 4
1ª ENTREGA
Relatório de Código
Guilherme José de Sousa Inês Capa de Barros Maria Beatriz Garcez Morais
Barbosa
PresencesServer
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.*;
} catch (IOException e) {
System.out.println("Erro na execucao do servidor: " + e);
System.exit(1);
}
}
}
private static void iniciarLoop() {
Timer timer =new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
sessionTimeOut();
} catch (IOException e) {
e.printStackTrace();
}
}
}, 1*1000, 1* 1000); //repete a cada 120 segundos
}
try {
while (ligacao.isConnected()) {
pedido = in.readLine(); //lê o pedido
if(pedido != null) {
verificarTipomensagem(pedido); //filtra o pedido por tipo
}
}
} catch (IOException e) {
//throw new RuntimeException(e);
}
}
presencesServer.getPresences().getPresences(String.valueOf(ligacao.getRemoteSocketAddres
s()), nickname);//cada vez que ele faz um AgentPost atualizamos o tempo.
enviarSessionUpdateParaTodosUtilizadores();
}
presencesServer.getPresences().getPresences(String.valueOf(ligacao.getRemoteSocketAddres
s()), nickname); //cada vez que ele faz um sessionUpdateRequest atualizamos o tempo.
enviarSessionUpdateParaTodosUtilizadores(); //passo 9
}
} else {
out.println(Integer.toString(10));
int inicio = presencesServer.getDezMensagensMaisRecentes().size() - 10;
//vemos a primeira mensagem a enviar
int fim = presencesServer.getDezMensagensMaisRecentes().size(); //
vemos o fim
}
IPInfo
class IPInfo {
private String nickname; //guardar o nickname também
private String ip;
private long lastSeen;
}
return result;
}
}
ConfiguracoesCliente
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
public ConfiguracoesCliente() {
setTitle("Configurações do Cliente");
setSize(700, 300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setContentPane(panel1);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
}
});
}
}
}
InterfaceCliente
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
table2.setModel(model2);
model2.addColumn("Utilizadores Online:"); //cabeçalho da tabela de utilizadores
online
} else {
nickname = usernameTf.getText();
inicarLoop(nickname, timer);
receberMensagem();
}
}
});
public void iniciar() throws IOException { //botao para iniciar as componentes todas
InetAddress serverAdress = InetAddress.getByName(DEFAULT_HOST);
ligacao = new Socket(serverAdress, DEFAULT_PORT);
in = new BufferedReader(new InputStreamReader(ligacao.getInputStream()));
out = new PrintWriter(ligacao.getOutputStream(), true);
while (ligacao.isConnected()) {
try {
mensagemRecebida = in.readLine();
if (mensagemRecebida.equals("SESSION_UPDATE")) {
model.getDataVector().removeAllElements();
model2.getDataVector().removeAllElements();
receberSessionUpdate();
} else if (mensagemRecebida.equals("SESSION_TIME_OUT")) {
in.close();
out.close();
ligacao.close();
timer.cancel();
model.getDataVector().removeAllElements();
model2.getDataVector().removeAllElements();
model.fireTableDataChanged();
model2.fireTableDataChanged();
} else {
dispose();
}
break;
} else {
}
} catch (IOException e) {
System.out.println("Erro ao comunicar com o servidor ");
}
}
}
}).start();
int tamanhoPresencas = 0;
try {
tamanhoPresencas = Integer.parseInt(in.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
//percorre o array de presenças e imprime o nickname dos utilizadores online / o
metodo conectar(...) retorna um array c os nicknames todos
for (int i = 0; i < tamanhoPresencas; i++) {
try {
model2.addRow(new String[]{in.readLine()}); //listar na tabela cada
nickname
} catch (IOException e) {
throw new RuntimeException(e);
}
}
int tamanhoMensagens = 0;
try {
tamanhoMensagens = Integer.parseInt(in.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
for (int i = 0; i < tamanhoMensagens; i++) {
try {
model.addRow(new String[]{in.readLine()}); //listar na tabela cada
mensagem
} catch (IOException e) {
throw new RuntimeException(e);
}
}
connectBtn.setEnabled(false);
}