diff --git a/src/impl/Afficheur.java b/src/impl/Afficheur.java index 654db9b..67a7bda 100644 --- a/src/impl/Afficheur.java +++ b/src/impl/Afficheur.java @@ -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(); } } diff --git a/src/impl/Canal.java b/src/impl/Canal.java index 4e532c1..83001d9 100644 --- a/src/impl/Canal.java +++ b/src/impl/Canal.java @@ -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 getValue() { - return null; + return scheduler.enquete(new GetValueReq(capteur),delay); } } diff --git a/src/impl/CapteurImpl.java b/src/impl/CapteurImpl.java index 36abb12..894a45e 100644 --- a/src/impl/CapteurImpl.java +++ b/src/impl/CapteurImpl.java @@ -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 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); } } diff --git a/src/impl/GetValue.java b/src/impl/GetValue.java deleted file mode 100644 index 7a6327c..0000000 --- a/src/impl/GetValue.java +++ /dev/null @@ -1,9 +0,0 @@ -package impl; - - -public class GetValue { - //AO2 - concrete MI - public void call() { - - } -} diff --git a/src/impl/GetValueReq.java b/src/impl/GetValueReq.java new file mode 100644 index 0000000..6ed1721 --- /dev/null +++ b/src/impl/GetValueReq.java @@ -0,0 +1,17 @@ +package impl; + +import interfaces.Capteur; +import java.util.concurrent.Callable; + +public class GetValueReq implements Callable { + private Capteur capteur; + + public GetValueReq(Capteur capteur) { + this.capteur = capteur; + } + + //AO2 - concrete MI + public Integer call() { + return capteur.getValue(); + } +} \ No newline at end of file diff --git a/src/impl/Scheduler.java b/src/impl/Scheduler.java new file mode 100644 index 0000000..e0f70d5 --- /dev/null +++ b/src/impl/Scheduler.java @@ -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 Future enquete(Callable task, long delay) { + return scheduler.schedule(task, delay, TimeUnit.MICROSECONDS); + } +} diff --git a/src/impl/Update.java b/src/impl/Update.java deleted file mode 100644 index fbeb3af..0000000 --- a/src/impl/Update.java +++ /dev/null @@ -1,8 +0,0 @@ -package impl; - -public class Update { - //AO1 - concrete MI - public void call() { - - } -} diff --git a/src/impl/UpdateReq.java b/src/impl/UpdateReq.java new file mode 100644 index 0000000..d065174 --- /dev/null +++ b/src/impl/UpdateReq.java @@ -0,0 +1,23 @@ +package impl; + +import interfaces.Capteur; +import interfaces.ObserverdeCapteur; + +import java.util.concurrent.Callable; + +public class UpdateReq implements Callable { + 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; + } +} \ No newline at end of file diff --git a/src/interfaces/Capteur.java b/src/interfaces/Capteur.java index fa73b88..8711a70 100644 --- a/src/interfaces/Capteur.java +++ b/src/interfaces/Capteur.java @@ -5,5 +5,5 @@ public interface Capteur { public void tick(); //AO2 - servant - int getValue(); + public int getValue(); }