correction scheduler et random delay dans canal)

This commit is contained in:
trochas
2025-11-07 12:15:24 +01:00
parent 52d32ef5d6
commit 2c2d79bc52
4 changed files with 14 additions and 5 deletions

View File

@@ -20,6 +20,10 @@ public class Afficheur implements ObserverdeCapteur {
this.canalAsync = canal;
}
public void setId(int id){
this.id = id;
}
//AO1 - concrete servant
@Override
public void update(Capteur subject) {

View File

@@ -5,10 +5,10 @@ import interfaces.CapteurAsync;
import interfaces.ObserverDeCapteurAsync;
import interfaces.ObserverdeCapteur;
import java.util.Random;
import java.util.concurrent.Future;
public class Canal implements ObserverDeCapteurAsync, CapteurAsync {
private int delay=1000;
private Scheduler scheduler;
private ObserverdeCapteur afficher;
private Capteur capteur;
@@ -22,12 +22,12 @@ public class Canal implements ObserverDeCapteurAsync, CapteurAsync {
//AO1 - proxy
@Override
public Future<?> update(Capteur c) {
return scheduler.enquete(new UpdateReq(capteur,afficher),delay);
return scheduler.enquete(new UpdateReq(capteur,afficher),new Random().nextInt(1000)+500);
}
//AO2 - proxy
@Override
public Future<Integer> getValue() {
return scheduler.enquete(new GetValueReq(capteur),delay);
return scheduler.enquete(new GetValueReq(capteur),new Random().nextInt(1000)+500);
}
}

View File

@@ -10,6 +10,10 @@ public class Scheduler {
scheduler = Executors.newScheduledThreadPool(nThread);
}
public ScheduledExecutorService getScheculer(){
return this.scheduler;
}
public <T> Future<T> enquete(Callable<T> task, long delay) {
return scheduler.schedule(task, delay, TimeUnit.MICROSECONDS);
}

View File

@@ -12,7 +12,7 @@ import interfaces.ObserverdeCapteur;
public class main {
static int NB_CANAUX = 20;
static int NB_CANAUX = 10;
public static void main(String[] argv){
Scheduler scheduler = new Scheduler(NB_CANAUX);
@@ -29,12 +29,13 @@ public class main {
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);
}
ScheduledExecutorService clock = Executors.newScheduledThreadPool(1);
ScheduledExecutorService clock = scheduler.getScheculer();
clock.scheduleAtFixedRate(() -> c.tick(), 0, 500, TimeUnit.MILLISECONDS);
}
}