Browse Source

Various Fixes and Improvements

-Reset of EventQueue on simulation reset
-Distinction between different event with the same time stamp:
->Currently based on hash
Andreas T. Meyer-Berg 4 years ago
parent
commit
3f508b8e96

+ 4 - 0
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/control/NetworkController.java

@@ -552,6 +552,10 @@ public class NetworkController {
 			captureController.removePacketCollector(p);
 		}
 		
+		/**
+		 * Clear event queue
+		 */
+		
 		/**
 		 * Update the GUI
 		 */

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

@@ -238,6 +238,12 @@ public class SimulationManager extends Observable {
 			for (Port p : d.getPorts())
 				if (p.getLastTrigger() > timestep)
 					p.setLastTrigger(timestep);
+		scheduler.reset(timestep);
+		/**
+		for(Connection c: model.getConnections())
+			for(Port p: c.getParticipants())
+				if (p.getLastTrigger() > timestep)
+					System.out.println("P without owner: "+p.toString());*/
 	}
 
 	/**

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

@@ -15,7 +15,8 @@ public class ScheduleComparator implements Comparator<Schedulable> {
 		int res = Long.compare(o1.getEventTime(), o2.getEventTime());
 		if(res==0)
 			//Advanced handling ? TODO: Maybe microtime ? Some random alternation or event priority
-			return 0;
+			return Integer.compare(o1.hashCode(), o2.hashCode());
+
 		return res;
 	}
 

+ 8 - 2
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/scheduler/Scheduler.java

@@ -37,8 +37,14 @@ public class Scheduler {
 	 * @return true if it was scheduled, false if otherwise
 	 */
 	public boolean scheduleEvent(Schedulable event){
-		if(event.getEventTime()<minimumTimeStep)
-			return false;
+		if(event.getEventTime()<minimumTimeStep){
+			
+			System.out.println("Min: "+minimumTimeStep+"  Event: "+event.getEventTime());
+			System.out.println("Could not schedule: "+event.toString());
+			throw new Error("Fail");
+			
+			//return false;
+		}
 		return eventQueue.add(event);
 	}