0
|
1 package suikwasha.distributedalgorithm.simulator;
|
|
2
|
|
3 import suikwasha.distributedalgorithm.framework.Algorithm;
|
|
4 import suikwasha.distributedalgorithm.framework.LinkBuilder;
|
|
5 import suikwasha.distributedalgorithm.framework.Machine;
|
|
6 import suikwasha.distributedalgorithm.framework.MachineBuilder;
|
|
7 import suikwasha.distributedalgorithm.framework.Topology;
|
|
8 import suikwasha.distributedalgorithm.framework.TopologyBuilder;
|
|
9
|
|
10 public class Simulator
|
|
11 {
|
|
12 private final Iterable<Algorithm> algos;
|
|
13 private final LinkBuilder linkBuilder;
|
|
14 private final MachineBuilder machineBuilder;
|
|
15 private final TopologyBuilder topologyBuilder;
|
|
16
|
|
17 public Simulator(Iterable<Algorithm> _algos,LinkBuilder _linkBuilder
|
|
18 ,MachineBuilder _machineBuilder,TopologyBuilder _topologyBuilder)
|
|
19 {
|
|
20 algos = _algos;
|
|
21 linkBuilder = _linkBuilder;
|
|
22 machineBuilder = _machineBuilder;
|
|
23 topologyBuilder = _topologyBuilder;
|
|
24 }
|
|
25
|
|
26 public Summary startSimulation() throws InterruptedException
|
|
27 {
|
|
28 Summary summary = new Summary();
|
|
29 LoggingMessageLinkBuilder logLinkBuilder = new LoggingMessageLinkBuilder(summary,linkBuilder);
|
|
30 SyncMachineBuilder syncMachineBuilder = new SyncMachineBuilder(machineBuilder);
|
|
31
|
|
32 Topology topologies = topologyBuilder.build(algos,syncMachineBuilder,logLinkBuilder);
|
|
33
|
|
34 for(Machine machine : topologies.getMachines()){
|
|
35 machine.start();
|
|
36 }
|
|
37
|
|
38 Synchronizer sync = syncMachineBuilder.getSynchronizer();
|
|
39 sync.await();
|
|
40
|
|
41 return summary;
|
|
42 }
|
|
43 }
|