From b4db11d176cd4a57734eab6cd82fe5179b1846c9 Mon Sep 17 00:00:00 2001
From: shinedday <shinedday@gmail.com>
Date: Mon, 9 May 2022 15:50:26 +0200
Subject: [PATCH] Fix : Agent now 1 only 1 execution policy (full cycle)

---
 agent.py     |  3 ---
 ihm.py       |  7 +++++++
 scheduler.py | 26 +++++++++++++++++++-------
 3 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/agent.py b/agent.py
index 6164ff5..75c5a11 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 2447346..1331b0d 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 9321595..2e00a58 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:
-- 
GitLab