|
@@ -10,12 +10,14 @@ import java.util.Random;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Port;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Protocol;
|
|
|
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SimulationManager;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.BoolCollector;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.BoolSensor;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.FloatCollector;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.FloatSensor;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.protocols.packets.MQTT_packet;
|
|
|
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.scheduler.AbstractEvent;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.util.Pair;
|
|
|
|
|
|
|
|
@@ -321,10 +323,36 @@ public class MQTT_protocol implements Protocol {
|
|
|
|
|
|
if (device instanceof FloatSensor && p.getOwner() instanceof FloatCollector
|
|
|
&& newTopic.equals(((FloatSensor) device).getFSinfoName())) {
|
|
|
- ((FloatCollector) p.getOwner()).setFCval(((FloatSensor) device).getFSval());
|
|
|
+
|
|
|
+ * original Float Value -> if it might change during the two events
|
|
|
+ */
|
|
|
+ float oldValue = ((FloatSensor) device).getFSval();
|
|
|
+
|
|
|
+ * Schedule Event to update the sensor
|
|
|
+ * -> therefore multiple parallel interactions would be in the right order
|
|
|
+ */
|
|
|
+ SimulationManager.scheduleEvent(new AbstractEvent(timestep + p.getResponseTime()) {
|
|
|
+ @Override
|
|
|
+ public void simulateEvent() {
|
|
|
+ ((FloatCollector) p.getOwner()).setFCval(oldValue);
|
|
|
+ }
|
|
|
+ });
|
|
|
} else if (device instanceof BoolSensor && p.getOwner() instanceof BoolCollector
|
|
|
&& newTopic.equals(((BoolSensor) device).getBSinfoName())) {
|
|
|
- ((BoolCollector) p.getOwner()).setBCval(((BoolSensor) device).getBSval());
|
|
|
+
|
|
|
+ * Original sensor value
|
|
|
+ */
|
|
|
+ boolean oldValue = ((BoolSensor) device).getBSval();
|
|
|
+
|
|
|
+ * Schedule Event to update the sensor
|
|
|
+ * -> therefore multiple parallel interactions would be in the right order
|
|
|
+ */
|
|
|
+ SimulationManager.scheduleEvent(new AbstractEvent(timestep + p.getResponseTime()) {
|
|
|
+ @Override
|
|
|
+ public void simulateEvent() {
|
|
|
+ ((BoolCollector) p.getOwner()).setBCval(oldValue);
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
}
|