diff --git a/agent.py b/agent.py index 16959979fb60966fb18c2291d48105a7bd88b347..3d79a4a59b943b7e1918654cbf09063d7873e926 100644 --- a/agent.py +++ b/agent.py @@ -12,7 +12,7 @@ class Agent(Schedulable): Schedulable.__init__(self, client_id="Agent"+str(self.id)) - self.subscribe("scheduler/agent/wakeup", self.scheduler_wake_up) + self.subscribe("scheduler/agent/wakeup", self.wake_up) self.neighbors = [] self.next_neighbors = [] @@ -41,10 +41,6 @@ class Agent(Schedulable): def publish(self, topic: str, message) -> None: self.client.publish("agent/" + str(self.id) + "/" + topic, message) - def scheduler_wake_up(self, client, userdata, message): - self.wake_up_token = True - print("waked up") - def on_cycle_begin(self): self.log("on_cycle_begin") diff --git a/amas.py b/amas.py index 1f2d533ee6c8cb99b4cab8df85c9894b01ffd14b..d11c697974fb062758bbd8d6fabfbaab61fcaf16 100644 --- a/amas.py +++ b/amas.py @@ -15,7 +15,7 @@ class Amas(Schedulable): def __init__(self): Schedulable.__init__(self, client_id="Amas") - self.subscribe("scheduler/schedulable/wakeup", self.scheduler_wake_up) + self.subscribe("scheduler/schedulable/wakeup", self.wake_up) self.next_id = 0 @@ -29,10 +29,6 @@ class Amas(Schedulable): def on_initial_agents_creation(self): pass - def scheduler_wake_up(self, client, userdata, message): - self.wake_up_token = True - print("waked up") - def add_agent(self): try: s = pxssh.pxssh() diff --git a/environment.py b/environment.py index 407fef81869ce28a7f20a97f4398a59ebfa72cba..562a268947d54242af3ee38c8248a4122d13975a 100644 --- a/environment.py +++ b/environment.py @@ -13,16 +13,12 @@ class Environment(Schedulable): def __init__(self): Schedulable.__init__(self, client_id="Env") - self.subscribe("scheduler/schedulable/wakeup", self.scheduler_wake_up) + self.subscribe("scheduler/schedulable/wakeup", self.wake_up) self.on_initialization() self.client.publish("env/action_done", "") - def scheduler_wake_up(self, client, userdata, message): - self.wake_up_token = True - print("waked up") - def on_initialization(self) -> None: """ This method will be executed at the end of __init__() diff --git a/schedulable.py b/schedulable.py index 43e33c5aeece22cb809acd82776bc115c98f27a2..7b1fe6fa26c070b3ec3b6c1477ed6a1c609da5ad 100644 --- a/schedulable.py +++ b/schedulable.py @@ -21,9 +21,13 @@ class Schedulable(MqttClient): self.wait_delay: float = 0.01 self.wake_up_token: int = 0 + def wake_up(self, client, userdata, message): + self.wake_up_token += 1 + print("Waked up") + def wait(self): # print("Waiting") - while not self.wake_up_token > 1: + while self.wake_up_token == 0: sleep(self.wait_delay) self.wake_up_token -= 1 # print("End wait") diff --git a/scheduler.py b/scheduler.py index d5290db3e99f63686f50d27898d1aa8a23bf8597..888c10e67712bab28c167b78c10753f232c7b35b 100644 --- a/scheduler.py +++ b/scheduler.py @@ -22,8 +22,6 @@ class Scheduler(Schedulable): def update_schedulable(self, client, userdata, message): self.schedulable_waiting += 1 - if self.schedulable_waiting == 2: - self.wake_up_token += 1 print("__Schedulable is waiting") def update_nbr_agent(self, client, userdata, message): @@ -33,10 +31,18 @@ class Scheduler(Schedulable): def agent_done(self, client, userdata, message): self.agent_waiting += 1 - if self.agent_waiting >= self.nbr_agent: - self.wake_up_token += 1 print("__Agent done") + def wait_agent(self): + while self.agent_waiting < self.nbr_agent: + sleep(self.wait_delay) + self.agent_waiting = 0 + + def wait_schedulable(self): + while self.schedulable_waiting < 2: + sleep(self.wait_delay) + self.schedulable_waiting = 0 + def first_part(self) -> None: """ first part of a cycle @@ -44,7 +50,7 @@ class Scheduler(Schedulable): self.client.publish("scheduler/schedulable/wakeup", "") # Amas on cycle begin # Environment on cycle begin - self.wait() + self.wait_schedulable() def main_part(self) -> None: """ @@ -52,10 +58,10 @@ class Scheduler(Schedulable): """ self.client.publish("scheduler/agent/wakeup", "") # Agent doing phase 1 - self.wait() + self.wait_agent() self.client.publish("scheduler/agent/wakeup", "") # agent doing phase 2 - self.wait() + self.wait_agent() def last_part(self) -> None: """ @@ -64,7 +70,7 @@ class Scheduler(Schedulable): self.client.publish("scheduler/schedulable/wakeup", "") # Amas on cycle end # Environment on cycle end - self.wait() + self.wait_schedulable() def run(self) -> None: """ @@ -73,10 +79,10 @@ class Scheduler(Schedulable): # wait that all schedulable have init print("Waiting schedulable") - self.wait() + self.wait_schedulable() # Wait that all agent have init print("Waiting agents :", self.nbr_agent) - self.wait() + self.wait_agent() while not self.exit_bool: print("Cycle : ", self.nbr_cycle)