Mercurial > hg > Members > shoshi > distributedalgorithm
diff src/main/java/suikwasha/distributedalgorithm/simulator/Simulator.java @ 0:38a110b13db1
added SimpleDistributedAlgorithmFramework.
added NaiveAlgorithm
added ChangRobertsAlgorithm
added PertersonAlgorithm
author | suikwasha |
---|---|
date | Fri, 19 Oct 2012 00:05:41 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/suikwasha/distributedalgorithm/simulator/Simulator.java Fri Oct 19 00:05:41 2012 +0900 @@ -0,0 +1,43 @@ +package suikwasha.distributedalgorithm.simulator; + +import suikwasha.distributedalgorithm.framework.Algorithm; +import suikwasha.distributedalgorithm.framework.LinkBuilder; +import suikwasha.distributedalgorithm.framework.Machine; +import suikwasha.distributedalgorithm.framework.MachineBuilder; +import suikwasha.distributedalgorithm.framework.Topology; +import suikwasha.distributedalgorithm.framework.TopologyBuilder; + +public class Simulator +{ + private final Iterable<Algorithm> algos; + private final LinkBuilder linkBuilder; + private final MachineBuilder machineBuilder; + private final TopologyBuilder topologyBuilder; + + public Simulator(Iterable<Algorithm> _algos,LinkBuilder _linkBuilder + ,MachineBuilder _machineBuilder,TopologyBuilder _topologyBuilder) + { + algos = _algos; + linkBuilder = _linkBuilder; + machineBuilder = _machineBuilder; + topologyBuilder = _topologyBuilder; + } + + public Summary startSimulation() throws InterruptedException + { + Summary summary = new Summary(); + LoggingMessageLinkBuilder logLinkBuilder = new LoggingMessageLinkBuilder(summary,linkBuilder); + SyncMachineBuilder syncMachineBuilder = new SyncMachineBuilder(machineBuilder); + + Topology topologies = topologyBuilder.build(algos,syncMachineBuilder,logLinkBuilder); + + for(Machine machine : topologies.getMachines()){ + machine.start(); + } + + Synchronizer sync = syncMachineBuilder.getSynchronizer(); + sync.await(); + + return summary; + } +}