Architecture de Tribu
Comment tout connaître du Coeur de Tribu ? J'ai détaillé dans cette page les points importants de l'architecture de Tribu.
Vous pouvez tout reprendre pour l'améliorer !!!
Les packages de Tribu
Le logiciel tribu repose sur une architecture en trois couches standards. Le schéma suivant détaille la répartition des packages sur ces trois couches :

Les flux dans Tribu
Le schémas suivant détaille les flux de données dans un membre d'une Tribu.

Les ronds rouge avec une croix localisent les Threads. Ces Threads sont expliqués dans la partie suivante.
Les grands points de cette architecture sont les suivants :
- Un objet Context qui est la base de tout le context d'un individu. Il est parsisté par serialisation avec la classe EnregistePanier".
- La couche Data est séparée en deux parties : La partie cliente qui envoie et reçoit les réponses d'un autre membre, et la partie serveur qui répond à une requête d'un aute memebre.
- Le mécanisame de question-réponse est basé sur une grammaire détaillée dans la partie suivante.
- La couche service est également découpée en deux parties : La partie "ServiceMonIndividu" qui se charge de traiter toutes les demandes ce votre individu, la seconde "ServiceMonStock" qui se charge de fournir toutes les demandes des clients connctés.
- La classe "ServiceConnexion" se charge de maintenir toutes les connexions opérationnelles.
- La classe "ServiceStratégie" gère les priorité de download
- La classe "ServiceAdministration" permet d'isoler l'IHM du Thread Server. Ceci est util pour passer le Thread ServerTribu en service Windows et permettre le multi-context sur un même serveur.
- La classe "ServiceConsole" est la réciproque de la classe ServiceAdministration".
Les Threads dans Tribu
Le logiciel Tribu est basé sur un mécanisme asynchrone permettant de gérer des accès concurrents et des mises en attente. Le schéma suivant illustre la dépendance des threads Java utilisés pour gérer les travaux d'une Tribu :

Détail des threads :
- Thread d'affichage SWT : C'est le Thread gérant les widjets SWT
- Thread du ServerTribu : C'est le Thread principal de l'application Tribu.
- Thread de gestion des connexions : Ce thread gère les connexion ( reconnexion et reprise des erreurs des connexions).
- Thread des requêtes du client xxx : yy : ces threads gèrent vos demandes vers chaque membre d(une Tribu.
- Gestionnaire des Threads serveurs : Ce thread démarre les sous-threads pour traiter chaque requête d'un membre de votre Tribu.
- Thread de traitement serveur xxxx : yy : Ce dernier thread contruit la réponse à une requête cliente.
Le moteur d'actions
L'ensemble des actions côté client ou côté serveur sont tratées par un moteur d'action. Le fonctionnment de ce moteur est décrit sur le schéma suivant :

Chaque action est composée des classes suivantes :
- Trois classes côté client : le Get (la soumission), le Set (traitement du résultat) et le Reset (traitement des erreurs).
- Deux classes côté serveur : le Get
et le Reset.
- Une classe de Requête spécifique à l'action pour stocker les arguments à envoyer au serveur et les références utilisées coté client.
Explications :
- La classe Get côté client s'appuyent sur la classe spécifique de requête
pour envoyer les informations vers le serveur.
- Seules les informations pertinantes de la requête sont envoyées via
une socket vers le serveur.
- Le serveur reconstruit la requete et la soumet à la classe Get
côté serveur.
- La réponse est contruite à partir des informations du serveur.
- La réponse est reconstruire côté client et envoyée au Set côté
client.
- Le Réset côté client et serveur se déclanchent en cas d'erreur.
Pour clarifier le fonctionnement de ce moteur d'action, voici un diagramme séquence de son fonctionnement :

En cas d'erreur, les traitements "Reset" sont enclenchés.
Le protocole réseau de Tribu
Le protocole suivi par tribu est un protocole basé sur un mécanisme d'envoie d'une REQUETE pour obtenir une REPONSE. La grammaire de ce protocole est décrite dans le tableau suivant :
REQUETE : |
|COMMANDE: |
COMANDE_VALUE |
|
|
|
[ |
|ARGUMENT: |
ARGUMENT_VALUE |
|
|
:ARGUMENT| |
|
|
]* |
|
|
:COMMANDE| |
|
|
|
|
COMMANDE_VALUE : |
ActionBattementDeCoeur | ActionInfoUpdate | ActionInfoUpdateFile |
ActionActualiseServeur |
ActionActualiseServeurImage | ActionGetRayon |
ActionGetArticle | ActionGetSousArticle |
ActionGetSegmentDownload |
ActionGetSegmentUpdate | ActionGetRechercheTransfert |
ActionGetRechercheUpdateFile | ActionPubMessage |
ActionPubSupprimerIndividu | ActionRechercheArticle |
ARGUMENT_VALUE : |
String |
REPONSE : |
[ <OBJET: |
OBJET_VALUE |
|
|
|
[ |
|NAME: |
NAME_VALUE |
:NAME | |
|
|
|
|
|
|ATTRIBUT: |
ATTRIBUT_VALUE |
:ATTRIBUT |
|
|
|
|
]* |
|
|
:OBJET>]* |
|
|
|
|
OBJET_VALUE : |
Individu | Article | Rayon |
NAME_VALUE : |
String |
ATTRIBUT_VALUE : |
String |