From 9cd7e7712c6b4df8744ec4615712336b75788f60 Mon Sep 17 00:00:00 2001
From: shinedday <shinedday@gmail.com>
Date: Thu, 19 May 2022 10:33:05 +0200
Subject: [PATCH] Greatly improved wait

---
 README.md                           |  71 ++++++++++++++++++++++++++++
 dist/iotAmak-0.0.3-py3-none-any.whl | Bin 0 -> 11157 bytes
 iotAmak/tool/schedulable.py         |  11 ++---
 setup.py                            |   2 +-
 4 files changed, 77 insertions(+), 7 deletions(-)
 create mode 100644 dist/iotAmak-0.0.3-py3-none-any.whl

diff --git a/README.md b/README.md
index f1ca783..4847251 100644
--- a/README.md
+++ b/README.md
@@ -175,3 +175,74 @@ Pour ajouter des attributs a l'initialisation aux agents il suffit de rajouter d
 **A AJOUTER**
 un .config dans les experience avec la version du coeur
 
+# diagrame de classe
+
+```mermaid
+classDiagram
+
+    class Amas{
+        int next_id
+        List~Cmd~ agent_cmd
+        List~Dict~ agents_metrics
+        on_initialization()
+        on_initial_agents_creation()
+        add_agent()
+        push_agent()
+        agent_log()
+        agent_metric()
+        on_cycle_begin()
+        on_cycle_end()
+        run()
+    }
+
+    class Agent{
+        List~Dict~ neighbors
+        List~Dict~ next_neighbors
+        on_initialization()
+        on_cycle_begin()
+        on_cycle_end()
+        add_neighbor()
+        log(message)
+        publish()
+        on_perceive()
+        on_decide()
+        on_act()
+        send_metric() Dict
+        run()
+    }
+
+    class Env{
+        on_initialization()
+        on_cycle_begin()
+        on_cycle_end()
+        run()
+    }
+
+    class Scheduler
+
+    class MqttClient{
+        ~Paho mqtt client~ client
+        subscribe(topic, fun)
+        publish(topic, message)
+    }
+
+    class Schedulable{
+        int exit_bool
+        int nbr_cycle
+        int wait_delay
+        int wake_up_token
+        wake_up()
+        wait()
+        exit_procedure()
+    }
+
+    class SSHClient
+
+
+    MqttClient <|-- Schedulable
+    Schedulable <|-- Scheduler
+    Schedulable <|-- Agent
+    Schedulable <|-- Env
+    Schedulable <|-- Amas
+    SSHClient <|-- Amas
+```
\ No newline at end of file
diff --git a/dist/iotAmak-0.0.3-py3-none-any.whl b/dist/iotAmak-0.0.3-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..d507a96c580dba28375964768a3027df3086f88c
GIT binary patch
literal 11157
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

literal 0
HcmV?d00001

diff --git a/iotAmak/tool/schedulable.py b/iotAmak/tool/schedulable.py
index 0abff6e..b827eac 100644
--- a/iotAmak/tool/schedulable.py
+++ b/iotAmak/tool/schedulable.py
@@ -5,6 +5,7 @@ from time import sleep
 
 import sys
 import pathlib
+import threading
 
 sys.path.insert(0, str(pathlib.Path(__file__).parent.parent))
 
@@ -23,14 +24,14 @@ class Schedulable(MqttClient):
         self.subscribe("ihm/exit", self.exit_procedure)
 
         self.nbr_cycle: int = 0
-        self.wait_delay: float = 0.01
-        self.wake_up_token: int = 0
+
+        self.semaphore = threading.Semaphore(0)
 
     def wake_up(self, client, userdata, message) -> None:
         """
         Called by the scheduler to wake up the schedulable
         """
-        self.wake_up_token += 1
+        self.semaphore.release()
         # print("Waked up")
 
     def wait(self) -> None:
@@ -38,9 +39,7 @@ class Schedulable(MqttClient):
         Basic wait method
         """
         # print("Waiting")
-        while self.wake_up_token == 0:
-            sleep(self.wait_delay)
-        self.wake_up_token -= 1
+        self.semaphore.release()
         # print("End wait")
 
     def exit_procedure(self, client, userdata, message) -> None:
diff --git a/setup.py b/setup.py
index 0388a00..a2f08fd 100644
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
 setup(
     name='iotAmak',
     packages=find_packages(),
-    version='0.0.2',
+    version='0.0.3',
     description='AmakFramework in python',
     author='SMAC - GOYON Sebastien',
     install_requires=[],
-- 
GitLab