Browse Source

Improves TestInitialization and implements SimpleProtocos

Fixes double creation of packets
Moves test code from Model.java to Main.java
Andreas T. Meyer-Berg 6 years ago
parent
commit
2bd783c59c

+ 39 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/Main.java

@@ -1,8 +1,13 @@
 package de.tu_darmstadt.tk.SmartHomeNetworkSim;
 
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.Controller;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Model;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SimpleConnection;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SimpleLink;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SimpleProtocol;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SimulationManager;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.view.MainFrame;
 
 /**
@@ -37,7 +42,40 @@ public class Main {
 		c = new Controller(m);
 	    v = new MainFrame(m, c);
 	    sim = new SimulationManager(m);
-	    sim.simulateTimeIntervall(0, 10);
+	    initializeTest();
+	    sim.simulateTimeIntervall(0, 10000);
+	}
+	
+	public 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()*m.getWidth()-2*m.getDevice_visualization_radius())+m.getDevice_visualization_radius());
+			A.setY((int)(Math.random()*m.getWidth()-2*m.getDevice_visualization_radius())+m.getDevice_visualization_radius());
+			B = new SmartDevice("SmartDoor"+i);
+			B.setX((int)(Math.random()*m.getWidth()-2*m.getDevice_visualization_radius())+m.getDevice_visualization_radius());
+			B.setY((int)(Math.random()*m.getWidth()-2*m.getDevice_visualization_radius())+m.getDevice_visualization_radius());
+			C = new SmartDevice("SmartLight"+i);
+			C.setX((int)(Math.random()*m.getWidth()-2*m.getDevice_visualization_radius())+m.getDevice_visualization_radius());
+			C.setY((int)(Math.random()*m.getWidth()-2*m.getDevice_visualization_radius())+m.getDevice_visualization_radius());
+		
+			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);
+		
+		SimpleConnection s = new SimpleConnection(A, B, link, new SimpleProtocol(A, B));
+		A.addConnection(s);
+		B.addConnection(s);
+		m.addConnectionNetwork(link);
 	}
 
 }

+ 12 - 0
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/control/Controller.java

@@ -127,4 +127,16 @@ public class Controller {
 		
 		return newPosition;
 	}
+	
+	/**
+	 * Adds SmartDevice to the Model
+	 * @param sd
+	 */
+	public void addSmartDevice(SmartDevice sd){
+		model.addDevices(sd);
+		//validate Position
+		sd.setX(scalePos(sd.getX(), 1.0, model.getWidth()));
+		sd.setY(scalePos(sd.getY(), 1.0, model.getHeight()));
+		sd.setZ(scalePos(sd.getZ(), 1.0, model.getDepth()));
+	}
 }

+ 7 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/Connection.java

@@ -10,11 +10,17 @@ import java.util.Collection;
 public interface Connection {
 	
 	/**
-	 * return the Link, which the connection uses
+	 * Returns the Link, which the connection uses
 	 * @return
 	 */
 	public Link getLink();
 	
+	/**
+	 * Returns the SmartDevice which started this connection
+	 * @return source SmartDevice
+	 */
+	public SmartDevice getSource();
+	
 	/**
 	 * Simulate Time Step
 	 * @param startTime

+ 2 - 34
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/Model.java

@@ -39,44 +39,12 @@ public class Model {
 	 */
 	public Model() {
 		
-		setWidth(1200);
-		setHeight(700);
-		setDepth(480);
-		
-		devices = new ArrayList<SmartDevice>();
-		connectionNetworks = new ArrayList<Link>();
-		SmartDevice A = null, B = null, C = null;
-		for(int i = 0; i<5; i++){
-		A = new SmartDevice("SmartTV"+i);		
-		A.setX((int)(Math.random()*width-2*device_visualization_radius)+device_visualization_radius);
-		A.setY((int)(Math.random()*width-2*device_visualization_radius)+device_visualization_radius);
-		B = new SmartDevice("SmartDoor"+i);
-		B.setX((int)(Math.random()*width-2*device_visualization_radius)+device_visualization_radius);
-		B.setY((int)(Math.random()*width-2*device_visualization_radius)+device_visualization_radius);
-		C = new SmartDevice("SmartLight"+i);
-		C.setX((int)(Math.random()*width-2*device_visualization_radius)+device_visualization_radius);
-		C.setY((int)(Math.random()*width-2*device_visualization_radius)+device_visualization_radius);
-		
-		addDevices(A);
-		addDevices(B);
-		addDevices(C);
-		}
 		setWidth(640);
 		setHeight(480);
 		setDepth(480);
 		
-		Link link = new SimpleLink("SimpleWifi");
-		link.addDevice(A);
-		link.addDevice(B);
-		link.addDevice(C);
-		A.addLink(link);
-		B.addLink(link);
-		C.addLink(link);
-		
-		SimpleConnection s = new SimpleConnection(A, B, link);
-		A.addConnection(s);
-		B.addConnection(s);
-		this.addConnectionNetwork(link);
+		devices = new ArrayList<SmartDevice>();
+		connectionNetworks = new ArrayList<Link>();
 	}
 
 	/**

+ 1 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/Protocol.java

@@ -11,5 +11,5 @@ public interface Protocol {
 	 * Generates the next Packet
 	 * @return next Packet
 	 */
-	public Packet generatePaket();
+	public Packet generateNextPaket(long timestep);
 }

+ 10 - 2
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/SimpleConnection.java

@@ -8,10 +8,13 @@ public class SimpleConnection implements Connection {
 	SmartDevice source;
 	SmartDevice destination;
 	Link link;
-	public SimpleConnection(SmartDevice src, SmartDevice dest, Link link) {
+	Protocol p;
+	
+	public SimpleConnection(SmartDevice src, SmartDevice dest, Link link, Protocol p) {
 		source = src;
 		destination = dest;
 		this.link = link;
+		this.p = p;
 	}
 	@Override
 	public Link getLink() {
@@ -21,8 +24,13 @@ public class SimpleConnection implements Connection {
 	@Override
 	public Collection<Packet> simulateTimeIntervall(long startTime, long duration) {
 		LinkedList<Packet> list = new LinkedList<Packet>();
-		list.add(new SimplePacket(startTime, source, destination));
+		for(long i = 0; i<duration; i+=100)
+			list.add(p.generateNextPaket(startTime+i));
 		return list;
 	}
+	@Override
+	public SmartDevice getSource() {
+		return source;
+	}
 
 }

+ 5 - 2
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/SimpleLink.java

@@ -73,8 +73,11 @@ public class SimpleLink implements Link {
 	public void simulateTimeIntervall(long startTime, long duration) {
 		packets.clear();
 		for(SmartDevice sd: devices)
-			for(Connection c:sd.getConnections())
-				packets.addAll(c.simulateTimeIntervall(startTime, duration));
+			for(Connection c:sd.getConnections()){
+				//Simulate just if source and link match
+				if(c.getLink()==this && c.getSource() == sd)
+					packets.addAll(c.simulateTimeIntervall(startTime, duration));
+			}
 	}
 
 

+ 34 - 0
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/SimpleProtocol.java

@@ -0,0 +1,34 @@
+package de.tu_darmstadt.tk.SmartHomeNetworkSim.core;
+
+/**
+ * Simple Implementation of a protocol, which sends 
+ *
+ * @author Andreas T. Meyer-Berg
+ */
+public class SimpleProtocol implements Protocol {
+
+	/**
+	 * Source of the protocol, and destination which responds
+	 */
+	SmartDevice source, destination;
+	
+	/**
+	 * True if the next Package is send by source, false if the next one will be send by destination
+	 */
+	boolean srcSends;
+	
+	public SimpleProtocol(SmartDevice src, SmartDevice dest){
+		source = src;
+		destination = dest;
+		srcSends = true;
+	}
+	@Override
+	public Packet generateNextPaket(long timestep) {
+		srcSends = !srcSends;
+		if(srcSends)
+			return new SimplePacket(timestep, destination, source);
+		else
+			return new SimplePacket(timestep, source, destination);
+	}
+
+}