Trabalho 2 - DCA

Propaganda
Universidade Federal do Rio Grande do Norte
Centro de Tecnologia
Departamento de Engenharia de Computação e Automação
Disciplina: Tópicos Especiais em Programação Distribuída e Paralela
Prof. Luiz Affonso Guedes
Assunto: Segundo trabalho
Data de Entrega: 03/05/2006
Questão) Implemente um programa cliente-servidor que modele o seguinte problema
concorrente:
- Dada a seguinte malha ferroviária:
M1
M2
M3
M4
Sendo que há 04 trens, onde:
- Trem1 percorre a malha M1.
- Trem2 percorre a malha M2
- Trem3 percorre a malha M3.
- Trem4 percorre a malha M4
Os requisitos do programa são os seguintes:
- Possuir interface gráfica para ilustrar a dinâmica do sistema, com respectivas
posições nos trilhos.
- Permitir que o usuário faça alteração na velocidades dos trens em tempo de
execução.
- A implementação deve ser livre de colisões e dead-locks entre os trens.
- Cada seguimento de malha tem dimensão de 100 unidades, exceto os
seguimentos horizontais da malha M4 que têm dimensões de 200 unidades.
- Programa Servidor:
o Deve ter um serviço denominado de “topicos”;
o Deve ter as informações sobre as velocidades e posições atuais de cada
trem, com respectiva interface gráfica;
o Deve aceitar conexões de cliente via RMI e
o Deve ter uma conexão Multicast que propague as posições dos trens a
cada 500ms: #IP 224.2.2.2:6969.
-
-
Programa Cliente RMI:
o Solicita conexão ao Servidor;
o Escolhe um trem para controlar (1-4);
o Controle a velocidade do seu trem (0-100) e
o Libera o trem (1-4).
Programa Cliente Multicast: Viewer
o Recebe em #IP 224.2.2.2:6969 as posições dos trens.
o Atualiza as posições dos trens em sua interface gráfica.
Utilize a seguinte inteface RMI:
//------------------------------------------------------------------------------------import java.rmi.Remote;
import java.rmi.RemoteException;
//Interface usada no RMI
public interface Controle extends Remote {
public boolean pegaTrem(int trem) throws RemoteException;
public void largaTrem(int trem) throws RemoteException;
public void velocidade(int velocidade, int trem) throws
RemoteException;
}
//------------------------------------------------------------Utilize a seguinte classe para transmitir as informações em multicast:
//----------------------------------------------------import java.io.Serializable;
//Classe utilizada para a transmissão multicast
public class Trem implements Serializable {
private int x1, y1;
private int x2, y2;
private int x3, y3;
private int x4, y4;
public Trem() {
}
public Trem(int
y4) {
this.x1
this.y1
this.x2
this.y2
this.x3
this.y3
this.x4
this.y4
}
x1, int y1, int x2, int y2, int x3, int y3, int x4, int
=
=
=
=
=
=
=
=
x1;
y1;
x2;
y2;
x3;
y3;
x4;
y4;
public int getX1() { return x1;}
public void setX1(int x1) { this.x1 = x1;}
public int getX2() { return x2;}
public void setX2(int x2) {this.x2 = x2;}
public int getX3() {return x3;}
public void setX3(int x3) {this.x3 = x3;}
public int getX4() {return x4;}
public void setX4(int x4) {this.x4 = x4;}
public int getY1() {return y1;}
public void setY1(int y1) {this.y1 = y1;}
public int getY2() {return y2;}
public void setY2(int y2) {this.y2 = y2;}
public int getY3() {return y3;}
public void setY3(int y3) {this.y3 = y3;}
public int getY4() {return y4;}
public void setY4(int y4) {this.y4 = y4;}
}
//------------------------------------------------------------------------------------------------
Download