labpyproject.core.app.app_components¶
Ebauche de framework applicatif multi-thread.
Composants de base d’une application multi-thread :
APPComp : routage des Queues entre les trois composants (ou satellites) suivants :
NETComp : composant réseau (TCP actuellement)
GUIComp, GUICompNoThread : composant d’interface
BUSINESSComp : composant « métier » de l’application
Application et composants ont également la possibilité d’interagir directement via :
les méthodes suivantes de APPComp :
handle_SAT_info et ask_APP_info dans le sens SAT -> APP
get_SAT_info et set_APP_info dans le sens APP -> SAT
les méthodes suivantes de l’interface de AbstractSatelliteComp implémentées dans les superclasses des composants : get_SAT_info et handle_APP_info
Ces fonctionnalités ont été implémentées pour usage futur. Dans le cadre du projet LabPyrinthe, la communication inter-composants suffit, APPComp n’ayant qu’un rôle de routeur de tâches.
GUICompNoThread (et sa superclasse SatelliteCompNoThread) sont dédiés à des composants d’interfaces nécessitant d’être lancés dans le thread principal (cas des GUIs telles que Tkinter, Pygame…). Le suffix « NoThread » ne signifie donc pas qu’ils ne sont pas associés à des threads, mais que l’application dérivant d’AppComp ne pourra pas les lancer dans un thread secondaire. En pratique le script main d’une telle application sera du type :
my_gui = subclasse_GUICompNoThread()
my_app = subclasse_AppComp() # génère et lance des threads secondaires
my_gui.method_start_thread() # lance la boucle d'exécution du thread principal (nom de méthode imaginaire)
À faire
A décliner pour des applications multi process (en dérivant labpyproject.core.queue.queue_tools pour supporter ProcessQueue)
Application concrète
Dans le jeu labpyrinthe :
- AppManager (voir labpyproject.apps.labpyrinthe.app.application)
hérite de APPComp.
- GameManager (voir labpyproject.apps.labpyrinthe.bus.game_manager)
hérite de BUSINESSComp.
- Les interfaces graphiques (voir labpyproject.apps.labpyrinthe.gui)
héritent de AbstractGUIComp puis de GUIComp ou GUICompNoThread.
- Les composants réseaux génériques (voir labpyproject.core.net.custom_TCP)
héritent de NETComp.
Classes¶
|
Superclasse des composants dédiés à un usage en thread. |
|
Composant d’application servant de routeur pour la gestion des piles de tâches. |
|
Objet d’échange entre composant satellite (NET, GUI, BUSINESS…) et application principale. |
« Pseudo interface » des composants satellites. |
|
|
Objet de gestion d’une action différée utilisant threading.Timer par composition. |
|
Superclasse des composants d’application satellites. |
|
Superclasse des composants d’application satellites qui ne peuvent être lancés en dehors du thread principal (cas des GUI : Tkinter, Pygame…). |
|
Objet d’échange entre composant d’interface et application. |
« Pseudo interface » des composants d’interface. |
|
|
Composant d’interface. |
|
Composant d’interface ne pouvant être lancés en dehors du thread principal (GUI : Tkinter, Pygame…). |
|
Objet d’échange entre composant réseau et application |
|
Composant réseau. |
|
Composant métier. |
Class Inheritance Diagram¶
