Main.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. package de.tu_darmstadt.tk.SmartHomeNetworkSim;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5. import java.util.Map.Entry;
  6. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SettingsController;
  7. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.Controller;
  8. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.NetworkController;
  9. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SimulationController;
  10. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Connection;
  11. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPerformance;
  12. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPrecision;
  13. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
  14. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Model;
  15. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
  16. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketCollector;
  17. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Port;
  18. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Protocol;
  19. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
  20. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.protocols.MQTT_protocol;
  21. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleLink;
  22. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.CountingMetric;
  23. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.Manipulation_RandomMove;
  24. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleProtocol;
  25. import de.tu_darmstadt.tk.SmartHomeNetworkSim.view.MainFrame;
  26. /**
  27. * Main class which initializes and connects the different parts and starts the program
  28. *
  29. * @author Andreas T. Meyer-Berg
  30. */
  31. public class Main {
  32. /**
  33. * Model of the smart home
  34. */
  35. static Model m;
  36. /**
  37. * Visualization of the smart home network
  38. */
  39. static MainFrame v;
  40. /**
  41. * Controller of the program
  42. */
  43. static Controller controller;
  44. /**
  45. * Controller for editing the network
  46. */
  47. static NetworkController c;
  48. /**
  49. * Controller for configuration of the program
  50. */
  51. static SettingsController conf;
  52. /**
  53. * SimulationController for running the simulation
  54. */
  55. static SimulationController sim;
  56. /**
  57. * Starts the program
  58. * @param args will be ignored
  59. */
  60. public static void main(String[] args) {
  61. m = new Model();
  62. controller = new Controller(m);
  63. c = controller.getNetworkController();
  64. conf = controller.getSettingsController();
  65. sim = controller.getSimulationController();
  66. //initializeTest();
  67. //initializeMQTTTest();
  68. initializeUserStudy();
  69. //Test packetCapture
  70. //sim.getPacketCaptureController().addPacketCollector(new PacketCollector(new SimplePacketSniffer()));
  71. v = new MainFrame(controller);
  72. /*
  73. for(int i=0; i<10; i++)
  74. m.getSim().simulateTimeIntervall(0+50*i, 50);
  75. */
  76. //testPackageCollection();
  77. }
  78. /**
  79. * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
  80. */
  81. //@SuppressWarnings("unused")
  82. public static void initializeUserStudy(){
  83. /**
  84. * Preset one SmartDevice
  85. */
  86. SmartDevice A = new SmartDevice("Homestation");
  87. A.setX(200);
  88. A.setY(200);
  89. c.addSmartDevice(A);
  90. /**
  91. * Packagecollector, which is registered at the Device
  92. */
  93. PacketCollector collector = new PacketCollector(new CountingMetric());
  94. sim.getPacketCaptureController().addPacketCollector(collector);
  95. sim.getPacketCaptureController().addDeviceToCollector(collector, A);
  96. }
  97. /**
  98. * Test package collectors
  99. */
  100. @SuppressWarnings("unused")
  101. private static void testPackageCollection() {
  102. sim.addAlgorithm(new Manipulation_RandomMove(), controller);
  103. PacketCollector collector = new PacketCollector();
  104. sim.getSimulationManager().getPacketCollectionManager().addPacketCollector(collector);
  105. System.out.println("Collector 0-500 - nothing collected:");
  106. sim.getSimulationManager().simulateTimeIntervall(0, 500);
  107. HashMap<Link, LinkedList<Packet>> map = collector.getPackets();
  108. for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
  109. System.out.println("Link: "+e.getKey().getName());
  110. for(Packet p : e.getValue())
  111. System.out.println(p.getTextualRepresentation());
  112. }
  113. System.out.println("");
  114. System.out.println("");
  115. Iterator<SmartDevice> it = c.getSmartDevices().iterator();
  116. it.next();
  117. SmartDevice d = it.next();
  118. collector.addDevice(d);
  119. SmartDevice f = it.next();
  120. collector.addDevice(f);
  121. System.out.println("Collector 500-1000 - "+d.getName()+" & "+f.getName()+" collected:");
  122. sim.getSimulationManager().simulateTimeIntervall(500, 500);
  123. map = collector.getPackets();
  124. for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
  125. System.out.println("Link: "+e.getKey().getName());
  126. for(Packet p : e.getValue())
  127. System.out.println(p.getTextualRepresentation());
  128. }
  129. System.out.println("");
  130. System.out.println("");
  131. Link l = c.getLinks().iterator().next();
  132. collector.addLink(l);
  133. System.out.println("Collector 2000-3000 - "+l+" collected:");
  134. sim.getSimulationManager().simulateTimeIntervall(1000, 500);
  135. map = collector.getPackets();
  136. for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
  137. System.out.println("Link: "+e.getKey().getName());
  138. for(Packet p : e.getValue())
  139. System.out.println(p.getTextualRepresentation());
  140. }
  141. sim.resetSimulation();
  142. }
  143. /**
  144. * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
  145. */
  146. @SuppressWarnings("unused")
  147. private static void initializeTest(){
  148. SmartDevice A = null, B = null, C = null;
  149. for(int i = 0; i<5; i++){
  150. A = new SmartDevice("SmartTV"+i);
  151. A.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  152. A.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  153. B = new SmartDevice("SmartDoor"+i);
  154. B.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  155. B.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  156. C = new SmartDevice("SmartLight"+i);
  157. C.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  158. C.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  159. c.addSmartDevice(A);
  160. c.addSmartDevice(B);
  161. c.addSmartDevice(C);
  162. }
  163. Link link = new SimpleLink("SimpleWifi");
  164. link.addDevice(A);
  165. link.addDevice(B);
  166. link.addDevice(C);
  167. A.addLink(link);
  168. B.addLink(link);
  169. C.addLink(link);
  170. Port a = new Port(A, (short) 1);
  171. a.setLastTrigger(0);
  172. a.setTriggerInterval(68);
  173. a.setStatus(Port.SENDING);
  174. A.addPort(a);
  175. Port b = new Port(B, (short) 2);
  176. b.setTriggerInterval(102);
  177. b.setStatus(Port.SENDING);
  178. B.addPort(b);
  179. Connection s = new ConnectionPerformance(link, new SimpleProtocol(a, b));
  180. s.setPacketLossProbability(0.01);//1% Packet loss probability
  181. a.setConnection(s);
  182. b.setConnection(s);
  183. s.addSmartDevice(a);
  184. s.addSmartDevice(b);
  185. m.addConnectionNetwork(link);
  186. link.addConnection(s);
  187. m.addConnection(s);
  188. }
  189. /**
  190. * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
  191. */
  192. @SuppressWarnings("unused")
  193. private static void initializeMQTTTest(){
  194. Link link = new SimpleLink("LossLess TCP-Network");
  195. SmartDevice broker = new SmartDevice("MQTT-Broker");
  196. broker.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  197. broker.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  198. c.addSmartDevice(broker);
  199. Port brokerPort = new Port(broker, (short) 0);
  200. brokerPort.setLastTrigger(0);
  201. brokerPort.setTriggerInterval(987);
  202. brokerPort.setStatus(Port.OPEN);
  203. broker.addPort(brokerPort);
  204. link.addDevice(broker);
  205. broker.addLink(link);
  206. Protocol protocol = new MQTT_protocol(brokerPort);
  207. Connection con = new ConnectionPrecision(link, protocol);
  208. con.setPacketLossProbability(0.01);//1% Packet loss probability
  209. con.addSmartDevice(brokerPort);
  210. brokerPort.setConnection(con);
  211. con.setStatus(Connection.ACTIVE);
  212. c.addLink(link);
  213. link.addConnection(con);
  214. c.addConnection(con);
  215. SmartDevice A = null, B = null, C = null;
  216. Port aP,bP,cP;
  217. for(int i = 0; i<3; i++){
  218. A = new SmartDevice("SmartTV"+i+"(Sub)");
  219. A.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  220. A.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  221. link.addDevice(A);
  222. A.addLink(link);
  223. aP = new Port(A,((short) (3*i+1)));
  224. aP.setLastTrigger(0);
  225. aP.setTriggerInterval(100+(int)(Math.random()*900));
  226. aP.setJitter((short) (Math.random()*50));
  227. aP.setStatus(Port.SENDING);
  228. aP.setConnection(con);
  229. protocol.addDeviceOfRole(aP, 3);
  230. con.addSmartDevice(aP);
  231. A.addPort(aP);
  232. c.addSmartDevice(A);
  233. B = new SmartDevice("SmartDoor"+i+"(Pub)");
  234. B.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  235. B.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  236. link.addDevice(B);
  237. B.addLink(link);
  238. bP = new Port(B,((short) (3*i+2)));
  239. bP.setLastTrigger(0);
  240. bP.setTriggerInterval(10+(int)(Math.random()*190));
  241. bP.setJitter((short) (Math.random()*50));
  242. bP.setStatus(Port.SENDING);
  243. bP.setConnection(con);
  244. protocol.addDeviceOfRole(bP, 2);
  245. con.addSmartDevice(bP);
  246. B.addPort(bP);
  247. c.addSmartDevice(B);
  248. C = new SmartDevice("SmartLight"+i+"(Pub,Sub)");
  249. C.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  250. C.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
  251. link.addDevice(C);
  252. C.addLink(link);
  253. cP = new Port(C,((short) (3*i+1)));
  254. cP.setLastTrigger(0);
  255. cP.setTriggerInterval(50+(int)(Math.random()*450));
  256. cP.setJitter((short) (Math.random()*50));
  257. cP.setStatus(Port.SENDING);
  258. cP.setConnection(con);
  259. protocol.addDeviceOfRole(cP, 1);
  260. con.addSmartDevice(cP);
  261. C.addPort(cP);
  262. c.addSmartDevice(C);
  263. }
  264. }
  265. }