123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- package de.tu_darmstadt.tk.SmartHomeNetworkSim;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.LinkedList;
- import java.util.Map.Entry;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SettingsController;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.Controller;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.NetworkController;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SimulationController;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Connection;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPerformance;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPrecision;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Model;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketCollector;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Port;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Protocol;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.protocols.MQTT_protocol;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleLink;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.CountingMetric;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.Manipulation_RandomMove;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleProtocol;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.view.MainFrame;
- /**
- * Main class which initializes and connects the different parts and starts the program
- *
- * @author Andreas T. Meyer-Berg
- */
- public class Main {
- /**
- * Model of the smart home
- */
- static Model m;
-
- /**
- * Visualization of the smart home network
- */
- static MainFrame v;
-
- /**
- * Controller of the program
- */
- static Controller controller;
-
- /**
- * Controller for editing the network
- */
- static NetworkController c;
-
- /**
- * Controller for configuration of the program
- */
- static SettingsController conf;
- /**
- * SimulationController for running the simulation
- */
- static SimulationController sim;
-
- /**
- * Starts the program
- * @param args will be ignored
- */
- public static void main(String[] args) {
- m = new Model();
- controller = new Controller(m);
- c = controller.getNetworkController();
- conf = controller.getSettingsController();
- sim = controller.getSimulationController();
- //initializeTest();
- //initializeMQTTTest();
- initializeUserStudy();
- //Test packetCapture
- //sim.getPacketCaptureController().addPacketCollector(new PacketCollector(new SimplePacketSniffer()));
- v = new MainFrame(controller);
- /*
- for(int i=0; i<10; i++)
- m.getSim().simulateTimeIntervall(0+50*i, 50);
- */
- //testPackageCollection();
-
- }
- /**
- * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
- */
- //@SuppressWarnings("unused")
- public static void initializeUserStudy(){
- /**
- * Preset one SmartDevice
- */
- SmartDevice A = new SmartDevice("Homestation");
- A.setX(200);
- A.setY(200);
- c.addSmartDevice(A);
- /**
- * Packagecollector, which is registered at the Device
- */
- PacketCollector collector = new PacketCollector(new CountingMetric());
- sim.getPacketCaptureController().addPacketCollector(collector);
- sim.getPacketCaptureController().addDeviceToCollector(collector, A);
- }
-
- /**
- * Test package collectors
- */
- @SuppressWarnings("unused")
- private static void testPackageCollection() {
- sim.addAlgorithm(new Manipulation_RandomMove(), controller);
- PacketCollector collector = new PacketCollector();
- sim.getSimulationManager().getPacketCollectionManager().addPacketCollector(collector);
-
- System.out.println("Collector 0-500 - nothing collected:");
- sim.getSimulationManager().simulateTimeIntervall(0, 500);
- HashMap<Link, LinkedList<Packet>> map = collector.getPackets();
- for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
- System.out.println("Link: "+e.getKey().getName());
- for(Packet p : e.getValue())
- System.out.println(p.getTextualRepresentation());
- }
-
- System.out.println("");
- System.out.println("");
- Iterator<SmartDevice> it = c.getSmartDevices().iterator();
- it.next();
-
- SmartDevice d = it.next();
- collector.addDevice(d);
- SmartDevice f = it.next();
- collector.addDevice(f);
- System.out.println("Collector 500-1000 - "+d.getName()+" & "+f.getName()+" collected:");
- sim.getSimulationManager().simulateTimeIntervall(500, 500);
- map = collector.getPackets();
- for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
- System.out.println("Link: "+e.getKey().getName());
- for(Packet p : e.getValue())
- System.out.println(p.getTextualRepresentation());
- }
- System.out.println("");
- System.out.println("");
-
- Link l = c.getLinks().iterator().next();
- collector.addLink(l);
- System.out.println("Collector 2000-3000 - "+l+" collected:");
- sim.getSimulationManager().simulateTimeIntervall(1000, 500);
- map = collector.getPackets();
- for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
- System.out.println("Link: "+e.getKey().getName());
- for(Packet p : e.getValue())
- System.out.println(p.getTextualRepresentation());
- }
- sim.resetSimulation();
- }
-
- /**
- * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
- */
- @SuppressWarnings("unused")
- private static void initializeTest(){
- SmartDevice A = null, B = null, C = null;
- for(int i = 0; i<5; i++){
- A = new SmartDevice("SmartTV"+i);
- A.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- A.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- B = new SmartDevice("SmartDoor"+i);
- B.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- B.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- C = new SmartDevice("SmartLight"+i);
- C.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- C.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
-
- c.addSmartDevice(A);
- c.addSmartDevice(B);
- c.addSmartDevice(C);
- }
-
- Link link = new SimpleLink("SimpleWifi");
- link.addDevice(A);
- link.addDevice(B);
- link.addDevice(C);
- A.addLink(link);
- B.addLink(link);
- C.addLink(link);
-
- Port a = new Port(A, (short) 1);
- a.setLastTrigger(0);
- a.setTriggerInterval(68);
- a.setStatus(Port.SENDING);
- A.addPort(a);
- Port b = new Port(B, (short) 2);
- b.setTriggerInterval(102);
- b.setStatus(Port.SENDING);
- B.addPort(b);
-
- Connection s = new ConnectionPerformance(link, new SimpleProtocol(a, b));
- s.setPacketLossProbability(0.01);//1% Packet loss probability
- a.setConnection(s);
- b.setConnection(s);
- s.addSmartDevice(a);
- s.addSmartDevice(b);
- m.addConnectionNetwork(link);
- link.addConnection(s);
- m.addConnection(s);
- }
-
- /**
- * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
- */
- @SuppressWarnings("unused")
- private static void initializeMQTTTest(){
- Link link = new SimpleLink("LossLess TCP-Network");
-
- SmartDevice broker = new SmartDevice("MQTT-Broker");
- broker.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- broker.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- c.addSmartDevice(broker);
-
- Port brokerPort = new Port(broker, (short) 0);
- brokerPort.setLastTrigger(0);
- brokerPort.setTriggerInterval(987);
- brokerPort.setStatus(Port.OPEN);
- broker.addPort(brokerPort);
-
- link.addDevice(broker);
- broker.addLink(link);
-
- Protocol protocol = new MQTT_protocol(brokerPort);
-
- Connection con = new ConnectionPrecision(link, protocol);
- con.setPacketLossProbability(0.01);//1% Packet loss probability
- con.addSmartDevice(brokerPort);
- brokerPort.setConnection(con);
- con.setStatus(Connection.ACTIVE);
- c.addLink(link);
- link.addConnection(con);
- c.addConnection(con);
-
- SmartDevice A = null, B = null, C = null;
- Port aP,bP,cP;
- for(int i = 0; i<3; i++){
- A = new SmartDevice("SmartTV"+i+"(Sub)");
- A.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- A.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- link.addDevice(A);
- A.addLink(link);
-
- aP = new Port(A,((short) (3*i+1)));
- aP.setLastTrigger(0);
- aP.setTriggerInterval(100+(int)(Math.random()*900));
- aP.setJitter((short) (Math.random()*50));
- aP.setStatus(Port.SENDING);
- aP.setConnection(con);
- protocol.addDeviceOfRole(aP, 3);
- con.addSmartDevice(aP);
- A.addPort(aP);
-
- c.addSmartDevice(A);
-
-
-
- B = new SmartDevice("SmartDoor"+i+"(Pub)");
- B.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- B.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- link.addDevice(B);
- B.addLink(link);
-
- bP = new Port(B,((short) (3*i+2)));
- bP.setLastTrigger(0);
- bP.setTriggerInterval(10+(int)(Math.random()*190));
- bP.setJitter((short) (Math.random()*50));
- bP.setStatus(Port.SENDING);
- bP.setConnection(con);
- protocol.addDeviceOfRole(bP, 2);
- con.addSmartDevice(bP);
- B.addPort(bP);
-
- c.addSmartDevice(B);
-
- C = new SmartDevice("SmartLight"+i+"(Pub,Sub)");
- C.setX((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- C.setY((int)(Math.random()*conf.getWidth()-2*conf.getDeviceVisualizationRadius())+conf.getDeviceVisualizationRadius());
- link.addDevice(C);
- C.addLink(link);
-
- cP = new Port(C,((short) (3*i+1)));
- cP.setLastTrigger(0);
- cP.setTriggerInterval(50+(int)(Math.random()*450));
- cP.setJitter((short) (Math.random()*50));
- cP.setStatus(Port.SENDING);
- cP.setConnection(con);
- protocol.addDeviceOfRole(cP, 1);
- con.addSmartDevice(cP);
- C.addPort(cP);
-
- c.addSmartDevice(C);
- }
- }
- }
|