MàJ par récupération sur Clé USB et dans /mnt/hd/Chargement du pc portable
This commit is contained in:
BIN
A61/Anneau/NOEUD.class
Normal file
BIN
A61/Anneau/NOEUD.class
Normal file
Binary file not shown.
33
A61/Anneau/NOEUD.java
Normal file
33
A61/Anneau/NOEUD.java
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Smea
|
||||
*/
|
||||
public interface NOEUD extends java.rmi.Remote {
|
||||
|
||||
public NOEUD ConnectSuivant() throws java.rmi.RemoteException;
|
||||
|
||||
public NOEUD GetTonSuivant() throws java.rmi.RemoteException;
|
||||
|
||||
public String GetInfo() throws java.rmi.RemoteException;
|
||||
|
||||
public void SetTonSuivant(NOEUD n) throws java.rmi.RemoteException;
|
||||
|
||||
public void CloseSite(NOEUD n) throws java.rmi.RemoteException;
|
||||
|
||||
public void Numerote(int n) throws java.rmi.RemoteException;
|
||||
|
||||
public void KillSite(int n) throws java.rmi.RemoteException;
|
||||
|
||||
public void Election(int capaciteInit,
|
||||
int capaciteGagnante,
|
||||
int siteGagnant,
|
||||
int siteInitiateur) throws java.rmi.RemoteException;
|
||||
|
||||
public void ProclamationElection(int siteGagnant, int siteInitiateur) throws java.rmi.RemoteException;
|
||||
|
||||
}
|
256
A61/Anneau/NOEUDImpl.java
Normal file
256
A61/Anneau/NOEUDImpl.java
Normal file
@ -0,0 +1,256 @@
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Serializable;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
import java.net.MalformedURLException;
|
||||
import java.rmi.*;
|
||||
import java.rmi.server.UnicastRemoteObject;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Smea
|
||||
*/
|
||||
|
||||
|
||||
public class NOEUDImpl extends UnicastRemoteObject implements NOEUD, Serializable{
|
||||
public NOEUD suivant = null;
|
||||
public String nom = "";
|
||||
public String rmi = "";
|
||||
public int numero = 0;
|
||||
public int survivance = 0;
|
||||
|
||||
public NOEUDImpl(String n, String r) throws RemoteException {
|
||||
this.nom = n;
|
||||
this.rmi = r;
|
||||
if(n.equals("INIT")) {
|
||||
this.numero = 1;
|
||||
this.survivance = (int)(Math.random()*1024)+1;
|
||||
}
|
||||
}
|
||||
|
||||
public NOEUD ConnectSuivant() throws RemoteException {
|
||||
NOEUD suiv = null;
|
||||
try {
|
||||
NOEUD init = (NOEUD) Naming.lookup(this.rmi + "/INIT" );
|
||||
if(init.GetTonSuivant() == null) {
|
||||
suiv = init;
|
||||
}
|
||||
else {
|
||||
suiv = init.GetTonSuivant();
|
||||
init.SetTonSuivant(this);
|
||||
}
|
||||
} catch (NotBoundException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (MalformedURLException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
finally {
|
||||
return suiv;
|
||||
}
|
||||
}
|
||||
|
||||
public NOEUD GetTonSuivant() throws RemoteException {
|
||||
return this.suivant;
|
||||
}
|
||||
|
||||
public String GetInfo() throws RemoteException {
|
||||
return this.nom +"(" + this.numero + ")" +"-"+this.survivance ;
|
||||
}
|
||||
|
||||
public void SetTonSuivant(NOEUD n) throws RemoteException {
|
||||
this.suivant = n;
|
||||
}
|
||||
|
||||
public void CloseSite(NOEUD n) throws RemoteException {
|
||||
if(this.GetTonSuivant().equals(n)) {
|
||||
this.SetTonSuivant(n.GetTonSuivant());
|
||||
}
|
||||
else {
|
||||
this.GetTonSuivant().CloseSite(n);
|
||||
}
|
||||
}
|
||||
|
||||
public void Numerote(int n) throws RemoteException {
|
||||
if(this.numero != 1) {
|
||||
this.numero = n+1;
|
||||
this.survivance = (int)(Math.random()*1024)+1;
|
||||
this.GetTonSuivant().Numerote(n+1);
|
||||
}
|
||||
}
|
||||
|
||||
public void KillSite(int n) throws RemoteException {
|
||||
if(this.numero == n) {
|
||||
System.out.println("J'ai gagné, je m'en vais!");
|
||||
this.CloseSite(this);
|
||||
System.exit(1);
|
||||
}
|
||||
else {
|
||||
|
||||
this.GetTonSuivant().KillSite(n);
|
||||
}
|
||||
}
|
||||
|
||||
public void Election(int capaciteInit, int capaciteGagnante, int siteGagnant, int siteInitiateur) throws RemoteException {
|
||||
int dif = this.survivance-capaciteInit;
|
||||
if(this.numero == siteInitiateur) {
|
||||
new Thread() {
|
||||
private int gagnant;
|
||||
private int initiat;
|
||||
public void start(int g, int i) {
|
||||
this.gagnant = g;
|
||||
this.initiat = i;
|
||||
this.start();
|
||||
}
|
||||
public void run() {
|
||||
try {
|
||||
sleep(1000);
|
||||
ProclamationElection(gagnant, initiat);
|
||||
} catch (InterruptedException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (RemoteException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
}.start(siteGagnant,siteInitiateur);
|
||||
}
|
||||
else {
|
||||
if(dif <= capaciteGagnante) {
|
||||
this.GetTonSuivant().Election(capaciteInit, Math.abs(this.survivance-capaciteGagnante), this.numero, siteInitiateur);
|
||||
}
|
||||
else {
|
||||
this.GetTonSuivant().Election(capaciteInit, capaciteGagnante, siteGagnant, siteInitiateur);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void ProclamationElection(int siteGagnant, int siteInitiateur) throws RemoteException {
|
||||
System.out.println("Gagnant noeud numero " + siteGagnant);
|
||||
this.KillSite(siteGagnant);
|
||||
}
|
||||
|
||||
public static void afficheMenu() {
|
||||
System.out.println('\t' + "K: Tuer ce noeud");
|
||||
System.out.println('\t' + "I: Infos de ce noeud");
|
||||
System.out.println('\t' + "N: Numeroter ");
|
||||
System.out.println('\t' + "E: Election ");
|
||||
System.out.println('\t' + "END: Quitter ");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String rmi = "rmi://" + args[0];
|
||||
String nom = args[1];
|
||||
NOEUD n = null;
|
||||
boolean cont = true;
|
||||
String cmd = "";
|
||||
BufferedReader bfr = new BufferedReader( new InputStreamReader( System.in) );
|
||||
if(nom.equals("INIT")) {
|
||||
try {
|
||||
n = new NOEUDImpl(nom, rmi);
|
||||
Naming.bind(rmi + "/" + nom, n);
|
||||
|
||||
} catch (AlreadyBoundException ex) {
|
||||
try {
|
||||
Naming.rebind(rmi + "/" + nom, n);
|
||||
} catch (RemoteException ex1) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex1);
|
||||
} catch (MalformedURLException ex1) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex1);
|
||||
}
|
||||
} catch (MalformedURLException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (RemoteException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
n.SetTonSuivant(n.ConnectSuivant());
|
||||
} catch (RemoteException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
try {
|
||||
n = new NOEUDImpl(nom, rmi);
|
||||
n.SetTonSuivant(n.ConnectSuivant());
|
||||
} catch (RemoteException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
System.out.println("Menu de " + nom);
|
||||
System.out.println("Saisie commande: ");
|
||||
|
||||
while(cont) {
|
||||
afficheMenu();
|
||||
try {
|
||||
cmd = bfr.readLine();
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
if(cmd.equals("K")) {
|
||||
try {
|
||||
n.CloseSite(n);
|
||||
System.exit(0);
|
||||
} catch (RemoteException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
else if(cmd.equals("I")) {
|
||||
try {
|
||||
String tmp = "NOEUD " + n.GetInfo() + " suivant " + n.GetTonSuivant().GetInfo();
|
||||
System.out.println(tmp);
|
||||
} catch (RemoteException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
else if(cmd.equals("N")) {
|
||||
try {
|
||||
NOEUD init = (NOEUD) Naming.lookup(rmi +"/INIT");
|
||||
init.GetTonSuivant().Numerote(1);
|
||||
init = null;
|
||||
} catch (NotBoundException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (MalformedURLException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (RemoteException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
else if(cmd.equals("E")) {
|
||||
try {
|
||||
|
||||
NOEUD init = (NOEUD) Naming.lookup(rmi +"/INIT");
|
||||
StringTokenizer stSurvi = new StringTokenizer(init.GetInfo(),"-");
|
||||
stSurvi.nextToken();
|
||||
String survie = stSurvi.nextToken();
|
||||
init.GetTonSuivant().Election(new Integer(survie),1024,0,1);
|
||||
init = null;
|
||||
} catch (NotBoundException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (MalformedURLException ex) {
|
||||
Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (RemoteException ex) {
|
||||
//Logger.getLogger(NOEUDImpl.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
else if(cmd.equals("END")) {
|
||||
cont = false;
|
||||
}
|
||||
cmd = "";
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user