This commit is contained in:
trochas
2025-11-07 10:42:02 +01:00
9 changed files with 79 additions and 26 deletions

View File

@@ -4,8 +4,11 @@ import interfaces.Capteur;
import interfaces.ObserverdeCapteur;
public class Afficheur implements ObserverdeCapteur {
//AO1 - concrete servant
//TODO changer capteur à canal
@Override
public void update(Capteur subject) {
subject.getValue();
}
}

View File

@@ -3,19 +3,31 @@ package impl;
import interfaces.Capteur;
import interfaces.CapteurAsync;
import interfaces.ObserverDeCapteurAsync;
import interfaces.ObserverdeCapteur;
import java.util.concurrent.Future;
public class Canal implements ObserverDeCapteurAsync, CapteurAsync {
private int delay=1000;
private Scheduler scheduler;
private ObserverdeCapteur afficher;
private Capteur capteur ;
public Canal(Capteur capteur, Scheduler scheduler, ObserverdeCapteur afficher) {
this.capteur = capteur;
this.scheduler = scheduler;
this.afficher = afficher;
}
//AO1 - proxy
@Override
public Future<?> update(Capteur c) {
return null;
return scheduler.enquete(new UpdateReq(capteur,afficher),delay);
}
//AO2 - proxy
@Override
public Future<Integer> getValue() {
return null;
return scheduler.enquete(new GetValueReq(capteur),delay);
}
}

View File

@@ -3,22 +3,20 @@ package impl;
import interfaces.AlgoDiffusion;
import interfaces.Capteur;
import interfaces.ObserverDeCapteurAsync;
import java.time.Clock;
import java.util.ArrayList;
import java.util.List;
public class CapteurImpl implements Capteur {
public Clock clock = Clock.systemUTC();
public int value;
public AlgoDiffusion diffusion;
public List<ObserverDeCapteurAsync> observers;
/*
public CapteurImpl(AlgoDiffusion diffusion) {
value = 0;
observers = new ArrayList<>();
this.diffusion = diffusion;
}
*/
@Override
public void attach(ObserverDeCapteurAsync o) {
try {
@@ -41,8 +39,9 @@ public class CapteurImpl implements Capteur {
@Override
public void tick() {
for (ObserverDeCapteurAsync canal : observers) {
canal.update(this);
value++;
for (ObserverDeCapteurAsync obs : observers) {
obs.update(this);
}
}

View File

@@ -1,9 +0,0 @@
package impl;
public class GetValue {
//AO2 - concrete MI
public void call() {
}
}

17
src/impl/GetValueReq.java Normal file
View File

@@ -0,0 +1,17 @@
package impl;
import interfaces.Capteur;
import java.util.concurrent.Callable;
public class GetValueReq implements Callable<Integer> {
private Capteur capteur;
public GetValueReq(Capteur capteur) {
this.capteur = capteur;
}
//AO2 - concrete MI
public Integer call() {
return capteur.getValue();
}
}

16
src/impl/Scheduler.java Normal file
View File

@@ -0,0 +1,16 @@
package impl;
import java.util.concurrent.*;
public class Scheduler {
private final ScheduledExecutorService scheduler;
public Scheduler(int nbCanaux) {
int nThread = 2+2*nbCanaux;
scheduler = Executors.newScheduledThreadPool(nThread);
}
public <T> Future<T> enquete(Callable<T> task, long delay) {
return scheduler.schedule(task, delay, TimeUnit.MICROSECONDS);
}
}

View File

@@ -1,8 +0,0 @@
package impl;
public class Update {
//AO1 - concrete MI
public void call() {
}
}

23
src/impl/UpdateReq.java Normal file
View File

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