X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ff6cb26262ba25fefdf1265628265a75d790ebd6..200986a368bbbbb5df459d43cbc7f5ef3d7678db:/contrib/psg/src/psgsim/PSGProcessController.java diff --git a/contrib/psg/src/psgsim/PSGProcessController.java b/contrib/psg/src/psgsim/PSGProcessController.java new file mode 100644 index 0000000000..d587691c80 --- /dev/null +++ b/contrib/psg/src/psgsim/PSGProcessController.java @@ -0,0 +1,68 @@ +package psgsim; + +import java.util.LinkedHashMap; +import java.util.Map; +import org.simgrid.msg.Host; +import org.simgrid.msg.MsgException; + +import peersim.core.Control; + +/** + * This class executes all controls object scheduled in the + * {@link PSGPlatform#controlStepMap} collection. + * + * @author Khaled Baati 10/12/2014 + * @version version 1.1 + */ +public class PSGProcessController extends org.simgrid.msg.Process { + + private Map controlStepMapTmp = new LinkedHashMap(); + + public PSGProcessController(Host host, String name, String[] args) { + super(host, name, null); + } + + @Override + public void main(String[] args) throws MsgException { + Double nextControlEvent; + for (Map.Entry entry : PSGPlatform.controlStepMap + .entrySet()) { + controlStepMapTmp.put(entry.getKey(), entry.getValue()); + } + while (PSGPlatform.getTime() <= PSGPlatform.getDuration()) { + for (Map.Entry entrytmp : controlStepMapTmp + .entrySet()) { + Control cle = entrytmp.getKey(); + Double valeur = entrytmp.getValue(); + if (PSGPlatform.getTime() % valeur == 0) { + cle.execute(); + if (PSGPlatform.getTime() != 0) + for (Map.Entry entry : PSGPlatform.controlStepMap + .entrySet()) { + if (cle == entry.getKey()) + controlStepMapTmp.replace(cle, valeur, valeur + + entry.getValue()); + + } + } + } + nextControlEvent = next(); + if (nextControlEvent + PSGPlatform.getTime() >= PSGPlatform.getDuration()) { + break; + } else { + waitFor(nextControlEvent); + } + } + } + + private Double next() { + Double min = controlStepMapTmp.values().iterator().next(); + for (Map.Entry entry : controlStepMapTmp.entrySet()) { + Double valeur = (entry.getValue() - PSGPlatform.getClock()); + if (min > valeur) + min = valeur; + } + + return min; + } +} \ No newline at end of file