Browse Source

Fixes infinite recursion of event queue

Andreas T. Meyer-Berg 4 years ago
parent
commit
033a9b2dfd

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

@@ -93,5 +93,5 @@ public abstract class Packet {
 	 * 
 	 * @return Protocol name
 	 */
-	protected abstract String getProtocolName();
+	public abstract String getProtocolName();
 }

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

@@ -338,14 +338,14 @@ public class Port implements Schedulable {
 	}
 
 	@Override
-	public void simulateEvent() {
+	public void simulateEvent(long time) {
 		if(connection==null || connection.getProtocol()==null || connection.getLink()==null)
 			return;
 		
 		/**
 		 * Packets of the transfer initiated by this port
 		 */
-		Collection<Packet> packets = connection.getProtocol().generateNextPackets(this, getEventTime(), false);
+		Collection<Packet> packets = connection.getProtocol().generateNextPackets(this, time, false);
 		
 		//Packets encapsulated by Connection
 		packets = connection.encapsulatePackages(packets);

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

@@ -148,7 +148,7 @@ public class SimulationManager extends Observable {
 			while(scheduler.hasNext(maxTime)){
 				Schedulable currentEvent = scheduler.getAndRemoveFirst();
 				System.out.println("Event time: "+currentEvent.getEventTime());
-				currentEvent.simulateEvent();
+				currentEvent.simulateEvent(currentEvent.getEventTime());
 			}
 			// Simulate SmartDevices - if they need some logic -> TODO: Insert as schedulable
 			model.getDevices().forEach(d -> d.simulateTimeStep(startTime, duration));

+ 2 - 2
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/protocols/MQTT_protocol.java

@@ -333,7 +333,7 @@ public class MQTT_protocol implements Protocol {
 								 */
 								SimulationManager.scheduleEvent(new AbstractEvent(timestep + p.getResponseTime()) {	
 									@Override
-									public void simulateEvent() {
+									public void simulateEvent(long time) {
 										((FloatCollector) p.getOwner()).setFCval(oldValue);
 									}
 								});
@@ -349,7 +349,7 @@ public class MQTT_protocol implements Protocol {
 								 */
 								SimulationManager.scheduleEvent(new AbstractEvent(timestep + p.getResponseTime()) {	
 									@Override
-									public void simulateEvent() {
+									public void simulateEvent(long time) {
 										((BoolCollector) p.getOwner()).setBCval(oldValue);
 									}
 								});

+ 1 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/protocols/packets/MQTT_packet.java

@@ -204,7 +204,7 @@ public class MQTT_packet extends Packet {
 	}
 
 	@Override
-	protected String getProtocolName() {
+	public String getProtocolName() {
 		return "MQTT";
 	}
 }

+ 1 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/protocols/packets/Ping_packet.java

@@ -171,7 +171,7 @@ public class Ping_packet extends Packet {
 	}
 
 	@Override
-	protected String getProtocolName() {
+	public String getProtocolName() {
 		return "ICMPv6 Ping";
 	}
 }

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

@@ -26,6 +26,6 @@ public abstract class AbstractEvent implements Schedulable {
 	}
 
 	@Override
-	public abstract void simulateEvent();
+	public abstract void simulateEvent(long time);
 
 }

+ 2 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/scheduler/Schedulable.java

@@ -15,6 +15,7 @@ public interface Schedulable {
 	
 	/**
 	 * Simulates the given Event, might update states of model parts and schedule further events.
+	 * @param time minimum timestamp
 	 */
-	public void simulateEvent();
+	public void simulateEvent(long time);
 }

+ 5 - 4
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/scheduler/Scheduler.java

@@ -42,12 +42,13 @@ public class Scheduler {
 			System.out.println("Min: "+minimumTimeStep+"  Event: "+event.getEventTime());
 			System.out.println("Could not schedule: "+event.toString());
 			System.out.println("Simulate now ");
-			event.simulateEvent();//TODO: Maybe other solution
-			throw new Error("Fail");
+			event.simulateEvent(minimumTimeStep);//TODO: Maybe other solution
+			//throw new Error("Fail");
 			
-			//return false;
+			return false;
+		}else {
+			return eventQueue.add(event);
 		}
-		return eventQueue.add(event);
 	}
 	
 	/**

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

@@ -74,7 +74,7 @@ public class SimplePacket extends Packet {
 	}
 
 	@Override
-	protected String getProtocolName() {
+	public String getProtocolName() {
 		return "Simple";
 	}
 }