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;
+	}
+}