From 4daba25d6e2e25b60bdafcc8783a4b699faace6b Mon Sep 17 00:00:00 2001 From: trochas Date: Fri, 7 Nov 2025 12:52:07 +0100 Subject: [PATCH] algoDiffusion --- src/impl/CapteurImpl.java | 19 +++++++++++++------ src/impl/DiffusionAtomique.java | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/impl/CapteurImpl.java b/src/impl/CapteurImpl.java index 56273b5..6de5da5 100644 --- a/src/impl/CapteurImpl.java +++ b/src/impl/CapteurImpl.java @@ -8,9 +8,10 @@ import java.util.ArrayList; import java.util.List; public class CapteurImpl implements Capteur { - public int value; - public AlgoDiffusion diffusion; - public List observers=new ArrayList(); + private int value; + private AlgoDiffusion diffusion; + protected List observers=new ArrayList(); + private Boolean locker; @Override public void attach(ObserverDeCapteurAsync o) { @@ -24,12 +25,18 @@ public class CapteurImpl implements Capteur { @Override public void tick() { - value++; - for (ObserverDeCapteurAsync canal : observers) { - canal.update(this); + if(!locker){ + diffusion.execute(); } } + public void lock(){ + locker = false; + } + public void unlock(){ + locker = true; + } + //AO2 - Concrete Servant @Override public int getValue() { diff --git a/src/impl/DiffusionAtomique.java b/src/impl/DiffusionAtomique.java index e8e1b85..f61bb73 100644 --- a/src/impl/DiffusionAtomique.java +++ b/src/impl/DiffusionAtomique.java @@ -1,9 +1,16 @@ package impl; +import java.util.ArrayList; +import java.util.List; + import interfaces.AlgoDiffusion; +import interfaces.Capteur; +import interfaces.ObserverDeCapteurAsync; public class DiffusionAtomique implements AlgoDiffusion { + public CapteurImpl capteur; + @Override public void configure() { // TODO Auto-generated method stub @@ -12,7 +19,10 @@ public class DiffusionAtomique implements AlgoDiffusion { @Override public void execute() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'execture'"); + capteur.lock(); //TODO unlock + List canaux = capteur.observers; + for (ObserverDeCapteurAsync canal : canaux) { + canal.update(this.capteur); + } } }