This commit is contained in:
trochas
2025-11-10 10:41:55 +01:00
7 changed files with 15 additions and 32 deletions

View File

@@ -1,34 +1,25 @@
package impl;
import interfaces.Capteur;
import interfaces.CapteurAsync;
import interfaces.ObserverdeCapteur;
import java.util.Random;
import java.util.concurrent.Future;
public class Afficheur implements ObserverdeCapteur {
private Canal canalAsync;
private int id= new Random().nextInt(100);
public Afficheur() {}
public Afficheur(Canal canalAsync) {
this.canalAsync = canalAsync;
}
public void setCanal(Canal canal){
this.canalAsync = canal;
}
public void setId(int id){
this.id = id;
}
//AO1 - concrete servant
@Override
public void update(Capteur subject) {
public void update(CapteurAsync capteurAsync) {
try{
Future<Integer> futureValue= canalAsync.getValue();
Future<Integer> futureValue= capteurAsync.getValue();
Integer value=futureValue.get();
System.out.println("Afficheur " + id+", value: "+ value);
}catch(Exception e){

View File

@@ -21,8 +21,8 @@ public class Canal implements ObserverDeCapteurAsync, CapteurAsync {
//AO1 - proxy
@Override
public Future<?> update(Capteur c) {
return scheduler.enquete(new UpdateReq(capteur,afficher),new Random().nextInt(1000)+500);
public Future<?> update() {
return scheduler.enquete(new UpdateReq(this,afficher),new Random().nextInt(1000)+500);
}
//AO2 - proxy

View File

@@ -21,7 +21,7 @@ public class DiffusionAtomique implements AlgoDiffusion {
public void execute() {
capteur.lock();
for (ObserverDeCapteurAsync canal : capteur.observers) {
canal.update(this.capteur);
canal.update();
}
capteur.unlock(); //TODO
}

View File

@@ -1,23 +1,23 @@
package impl;
import interfaces.Capteur;
import interfaces.CapteurAsync;
import interfaces.ObserverdeCapteur;
import java.util.concurrent.Callable;
public class UpdateReq implements Callable<Void> {
private Capteur capteur;
private CapteurAsync canalProxy;
private ObserverdeCapteur afficheur;
public UpdateReq(Capteur capteur, ObserverdeCapteur afficheur) {
this.capteur = capteur;
public UpdateReq(CapteurAsync canalProxy, ObserverdeCapteur afficheur) {
this.canalProxy = canalProxy;
this.afficheur = afficheur;
}
//AO1 - concrete MI
@Override
public Void call() {
afficheur.update(capteur);
afficheur.update(canalProxy);
return null;
}
}

View File

@@ -4,5 +4,5 @@ import java.util.concurrent.Future;
public interface ObserverDeCapteurAsync {
//AO1 - service
Future<?> update(Capteur c);
Future<?> update();
}

View File

@@ -1,5 +1,7 @@
package interfaces;
import impl.Canal;
public interface ObserverdeCapteur{
//AO1 - servant
public void update(Capteur subject);
public void update(CapteurAsync capteurAsync);
}

View File

@@ -26,20 +26,10 @@ public class main {
algo.capteur = c;
c.setAlgoDiffusion(algo);
/*
Afficheur a=new Afficheur();
Canal canal=new Canal(c,scheduler,a);
a.setCanal(canal);
c.attach(canal);
*/
for(int i = 0; i<NB_CANAUX; i++){
Afficheur afficheur = new Afficheur();
afficheur.setId(i);
Canal canal = new Canal(c, scheduler, afficheur);
afficheur.setCanal(canal);
c.attach(canal);
}