diff --git a/agent.py b/agent.py index 6164ff5d15f87a16b4b3249dfdad67cc467dd0d8..75c5a11568529e794fd3ad56af328deb6b4cca1e 100644 --- a/agent.py +++ b/agent.py @@ -70,9 +70,6 @@ class Agent(Schedulable): self.on_perceive() - self.publish("cycle_done", "") - self.wait() - self.on_decide() self.on_act() diff --git a/ihm.py b/ihm.py index 24473463f1a2e7d6443d6790260ec7d68dd7b56a..1331b0d01be4087059507507d8e9e36ea7220c78 100644 --- a/ihm.py +++ b/ihm.py @@ -118,6 +118,9 @@ class Ihm(MqttClient, SSHClient): if cmd.lower() == "pause": self.client.publish("ihm/pause") + if cmd.lower() == "unpause": + self.client.publish("ihm/unpause") + if cmd.lower() in ["s", "step"]: self.client.publish("ihm/step") @@ -132,6 +135,10 @@ class Ihm(MqttClient, SSHClient): print("Hostname :", client.hostname, " Responded : ", result) + if cmd.lower() == "mode": + self.client.publish("ihm/mode") + + self.client.publish("ihm/step") sleep(2) diff --git a/scheduler.py b/scheduler.py index 93215956962afb0f7279b899ee77d54b15bf9952..2e00a585797fa9979d5c0b1a460e376c700c508a 100644 --- a/scheduler.py +++ b/scheduler.py @@ -28,18 +28,33 @@ class Scheduler(Schedulable): self.subscribe("env/action_done", self.update_schedulable) self.subscribe("ihm/step", self.step) self.subscribe("ihm/pause", self.pause) + self.subscribe("ihm/unpause", self.unpause) + self.subscribe("ihm/mode", self.mode) self.agent_waiting = 0 self.schedulable_waiting = 0 print("Init done") + def mode(self, client, userdata, message) -> None: + """ + Function called when the IHM change scheduler mode + """ + self.execution_policy = (1 - self.execution_policy) % 2 + def pause(self, client, userdata, message) -> None: """ - Function called when the IHM pause/unpause the scheduler + Function called when the IHM pause the scheduler """ - self.paused = not self.paused - self.ihm_token += 1 + self.paused = True + self.ihm_token = 0 + + def unpause(self, client, userdata, message) -> None: + """ + Function called when the IHM unpause the scheduler + """ + self.paused = False + self.ihm_token = 1 def step(self, client, userdata, message) -> None: """ @@ -108,10 +123,7 @@ class Scheduler(Schedulable): main part of a cycle : Agent cycle """ self.client.publish("scheduler/agent/wakeup", "") - # Agent doing phase 1 - self.wait_agent() - self.client.publish("scheduler/agent/wakeup", "") - # agent doing phase 2 + # Agent doing cycle self.wait_agent() def last_part(self) -> None: