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 :

Classes

ThreadableComp([postfixname])

Superclasse des composants dédiés à un usage en thread.

APPComp([channellist])

Composant d’application servant de routeur pour la gestion des piles de tâches.

SatelliteExchangeObject(typeexchange[, …])

Objet d’échange entre composant satellite (NET, GUI, BUSINESS…) et application principale.

AbstractSatelliteComp

« Pseudo interface » des composants satellites.

DelayedAction(interval, function[, args, …])

Objet de gestion d’une action différée utilisant threading.Timer par composition.

SatelliteComp([channelname, queue_code_in, …])

Superclasse des composants d’application satellites.

SatelliteCompNoThread([channelname, …])

Superclasse des composants d’application satellites qui ne peuvent être lancés en dehors du thread principal (cas des GUI : Tkinter, Pygame…).

GUIExchangeObject(typeexchange[, dictargs])

Objet d’échange entre composant d’interface et application.

AbstractGUIComp

« Pseudo interface » des composants d’interface.

GUIComp([channelname, queue_code_in, …])

Composant d’interface.

GUICompNoThread([channelname, …])

Composant d’interface ne pouvant être lancés en dehors du thread principal (GUI : Tkinter, Pygame…).

NETExchangeObject(typeexchange[, dictargs])

Objet d’échange entre composant réseau et application

NETComp([channelname, queue_code_in, …])

Composant réseau.

BUSINESSComp([channelname, queue_code_in, …])

Composant métier.

Class Inheritance Diagram

Inheritance diagram of labpyproject.core.app.app_components.ThreadableComp, labpyproject.core.app.app_components.APPComp, labpyproject.core.app.app_components.SatelliteExchangeObject, labpyproject.core.app.app_components.AbstractSatelliteComp, labpyproject.core.app.app_components.DelayedAction, labpyproject.core.app.app_components.SatelliteComp, labpyproject.core.app.app_components.SatelliteCompNoThread, labpyproject.core.app.app_components.GUIExchangeObject, labpyproject.core.app.app_components.AbstractGUIComp, labpyproject.core.app.app_components.GUIComp, labpyproject.core.app.app_components.GUICompNoThread, labpyproject.core.app.app_components.NETExchangeObject, labpyproject.core.app.app_components.NETComp, labpyproject.core.app.app_components.BUSINESSComp