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;} } //------------------------------------------------------------------------------------------------