view src/main/java/suikwasha/distributedalgorithm/simulator/Simulator.java @ 2:8e1f63faa2fd default tip

added Franklin's Algorithm
author suikwasha
date Tue, 23 Oct 2012 16:49:26 +0900
parents 38a110b13db1
children
line wrap: on
line source

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