Update Capteur -> CanalAsync in Afficheur.java

This commit is contained in:
tuanvu
2025-11-10 10:14:08 +01:00
parent 2c2d79bc52
commit 3a1f73170f
8 changed files with 14 additions and 31 deletions

View File

@@ -7,26 +7,17 @@ import java.util.Random;
import java.util.concurrent.Future; import java.util.concurrent.Future;
public class Afficheur implements ObserverdeCapteur { public class Afficheur implements ObserverdeCapteur {
private Canal canalAsync;
private int id= new Random().nextInt(100); private int id= new Random().nextInt(100);
public Afficheur() {} public Afficheur() {}
public Afficheur(Canal canalAsync) {
this.canalAsync = canalAsync;
}
public void setCanal(Canal canal){
this.canalAsync = canal;
}
public void setId(int id){ public void setId(int id){
this.id = id; this.id = id;
} }
//AO1 - concrete servant //AO1 - concrete servant
@Override @Override
public void update(Capteur subject) { public void update(Canal canalAsync) {
try{ try{
Future<Integer> futureValue= canalAsync.getValue(); Future<Integer> futureValue= canalAsync.getValue();
Integer value=futureValue.get(); Integer value=futureValue.get();

View File

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

View File

@@ -43,7 +43,7 @@ public class CapteurImpl implements Capteur {
public void tick() { public void tick() {
value++; value++;
for (ObserverDeCapteurAsync canal : observers) { for (ObserverDeCapteurAsync canal : observers) {
canal.update(this); canal.update();
} }
} }

View File

@@ -15,6 +15,6 @@ public class Scheduler {
} }
public <T> Future<T> enquete(Callable<T> task, long delay) { public <T> Future<T> enquete(Callable<T> task, long delay) {
return scheduler.schedule(task, delay, TimeUnit.MICROSECONDS); return scheduler.schedule(task, delay, TimeUnit.MILLISECONDS);
} }
} }

View File

@@ -6,18 +6,18 @@ import interfaces.ObserverdeCapteur;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
public class UpdateReq implements Callable<Void> { public class UpdateReq implements Callable<Void> {
private Capteur capteur; private Canal canalAsync;
private ObserverdeCapteur afficheur; private ObserverdeCapteur afficheur;
public UpdateReq(Capteur capteur, ObserverdeCapteur afficheur) { public UpdateReq(Canal canalAsync, ObserverdeCapteur afficheur) {
this.capteur = capteur; this.canalAsync = canalAsync;
this.afficheur = afficheur; this.afficheur = afficheur;
} }
//AO1 - concrete MI //AO1 - concrete MI
@Override @Override
public Void call() { public Void call() {
afficheur.update(capteur); afficheur.update(canalAsync);
return null; return null;
} }
} }

View File

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

View File

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

View File

@@ -12,26 +12,16 @@ import interfaces.ObserverdeCapteur;
public class main { public class main {
static int NB_CANAUX = 10; static int NB_CANAUX = 2;
public static void main(String[] argv){ public static void main(String[] argv){
Scheduler scheduler = new Scheduler(NB_CANAUX); Scheduler scheduler = new Scheduler(NB_CANAUX);
Capteur c = new CapteurImpl(); Capteur c = new CapteurImpl();
/*
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++){ for(int i = 0; i<NB_CANAUX; i++){
Afficheur afficheur = new Afficheur(); Afficheur afficheur = new Afficheur();
afficheur.setId(i); afficheur.setId(i);
Canal canal = new Canal(c, scheduler, afficheur); Canal canal = new Canal(c, scheduler, afficheur);
afficheur.setCanal(canal);
c.attach(canal); c.attach(canal);
} }