======= Architecture réseau Bridge-Command ======= Cette section définit l'architecture réseau qui régit le logiciel Bridge-Command (BC) ====== Protocole/Librairie ====== La librairie utilisée dans BC est Enet(http://enet.bespin.org/) sur UDP. ====== Flux ====== Chaque entité logiciel au sein de BC est un client qui communique vers un seul et unique server : //bridgecommand-es//. Chaque message possède une entête qui lui est propre, voir la table ci-dessous : ^ Emmeteur ^ Entête ^ Description ^Consommateur ^ | Map Controller (//bridgecommand-mc//) | "MC" | Message permettant d'influer sur certains paramêtre de la simulation (position du bateau, météo,...) | Bridge-Command principal (//bridgecommand-bc//) | | Bridge-Command principal (//bridgecommand-bc//) | "BC" | Message contenant les infos principales du bateau (position, vitesse, cap,...) |Bridge-Command secondaire (//bridgecommand-bc//) et Map Controller (//bridgecommand-mc//) | | Bridge-Command principal (//bridgecommand-bc//) | "SD" | Message permettant de mettre fin à la simulation |Bridge-Command secondaire (//bridgecommand-bc//) et Map Controller (//bridgecommand-mc//) | | Bridge-Command principal (//bridgecommand-bc//) | "SCN" | Message définissant le scenario initial qui sera chargé (map, autres bateaux, coordonées GPS,...) |Bridge-Command secondaire (//bridgecommand-bc//), Bridge-Command principal en mode MultiJoueur uniquement(//bridgecommand-bc//) et Map Controller (//bridgecommand-mc//) | | Bridge-Command principal en mode MultiJoueur uniquement (//bridgecommand-bc//) | "MPF" | Message contenant les infos minimalistes du bateau (position, vitesse, cap et RoT) |Bridge-Command MultiJoueur Hub (//bridgecommand-mh//) | | Bridge-Command MultiJoueur Hub (//bridgecommand-mh//) | "MH" | Message contenant les infos minimalistes du bateau (position, vitesse, cap et RoT) |Bridge-Command principal en mode MultiJoueur uniquement (//bridgecommand-bc//) | | Bridge-Command principal (//bridgecommand-bc//) | "OS" | Message contenant des infos minimalistes du bateau (position, vitesse, cap et météo) |//WindInject// (utilitaire permettant d'injecter une grille de vent) ou //PolarManagement// (permet de lire la puissance générée par un système vélique) | | //WindInject// (utilitaire permettant d'injecter une grille de vent) | "WI" | Message contenant uniquement une valeur de vent vrai |Bridge-Command secondaire (//bridgecommand-bc//) et Map Controller (//bridgecommand-mc//) | ====== Diagramme ====== On peut représenter schématiquement les communications comme sur l'exemple suivant : {{ :projets:diagenetserver.png?400 |}} ====== Interface ====== Cette section renseignera chaque champs des messages indiqué dans le tableau de la section [[#Flux]]. ===== Message MC ===== L'intégralité du message est formaté au format ASCII, chaque champ est séparé par une virgule "," et le caractère de fin de message est un dièse "#" ==== Modifier le "leg" d'un bateau ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "CL" | Change Leg | | ::: | ship | numéro du bateau | | ::: | leg | numéro du leg | | ::: | legCourse | cap du bateau | | ::: | legSpeed | vitesse du bateau | | ::: | legDistance | distance du leg | //Exemple : MCCL,1,2,90,12,10#// ==== Supprimer le "leg" d'un bateau ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "DL" | Delete Leg | | ::: | ship | numéro du bateau | | ::: | leg | numéro du leg | //Exemple : MCDL,1,2#// ==== Ajout d'un "leg" à un bateau ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "AL" | Add Leg | | ::: | ship | numéro du bateau | | ::: | leg | numéro du leg | | ::: | legCourse | cap du bateau | | ::: | legSpeed | vitesse du bateau | | ::: | legDistance | distance du leg | //Exemple : MCAL,1,2,90,12,10#// ==== Changer la position d'un bateau ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "RS" | Replace Ship | | ::: | ship | numéro du bateau | | ::: | posX | position en X du bateau | | ::: | posY | position en Y du bateau | //Exemple : MCRS,1,100,200#// ==== Modifier le MMSI d'un bateau ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "MM" | Modify Mmsi | | ::: | ship | numéro du bateau | | ::: | mmsi | Numéro MMSI | //Exemple : MCMM,1,123456789#// ==== Signaler un homme à la mer ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "MO" | Man Overboard | | ::: | mob | 1 : homme à la mer \\ -1 : homme récupéré | //Exemple : MCMO,-1#// ==== Mettre en défaut/Réparer la pompe du rudder ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "RW" | Rudder Working | | ::: | rudder | numéro de la pompe (1 ou 2) | | ::: | state | état de la pompe (0:défaillance/1:fonctionnel) | //Exemple : MCRW,2,0#// ==== Mettre en défaut/Réparer le retour de position rudder ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "RF" | Rudder Followup | | ::: | state | état du followup (0:défaillance/1:fonctionnel) | //Exemple : MCRF,0#// ==== Modifier la météo ==== ^ Entête ^ Champs ^ Description ^ | "MC" | "SW" | Set Weather | | ::: | weather | Niveau de vagues (entre 0 et 1) | | ::: | rain | Intensité de la pluie (entre 0 et 1) | | ::: | visibility | Visibilité (entre 0 et 1) | | ::: | windDirection | Direction du vent vrai (entre 0 et 360°) | | ::: | windSpeed | Vitesse du vent vrai (entre 0 et 50 knts) | | ::: | streamDirection | Direction des vagues | | ::: | streamSpeed | Vitesse des vagues | | ::: | streamOverride | ??? (0 ou 1) | //Exemple : MCSW,0,0,1,90,25,20,2,0#// ===== Message BC ===== L'intégralité du message est formaté au format ASCII, chaque champ est séparé par une virgule "," (sauf pour les legs ou ça sera ":") et chaque bloc de message par un dièse "#" ==== Informations de la simulation en cours ==== ^ Entête ^ Champs ^ Description ^ Bloc ^ | "BC" | timeStamp | Date courante (en sec POSIX) | Bloc "TimeStamp" | | ::: | timeOffset | Date du jour du scénario (en sec POSIX) | ::: | | ::: | timeDelta | Temps écoulé depuis le début du jour du scénario (en sec) | ::: | | ::: | accel | Coefficient d'accélération du temps | ::: | | ::: | "#" | Fin du bloc "Time" | ::: | | ::: | posX | position en X du bateau | Bloc "ShipInfos" | | ::: | posY | position en Y du bateau | ::: | | ::: | heading | Cap du bateau | ::: | | ::: | rot | Rate of Turn | ::: | | ::: | pitch | Tangage du bateau | ::: | | ::: | roll | Roulis du bateau | ::: | | ::: | sog | Vitesse sur terre | ::: | | ::: | cog | Cap sur terre | ::: | | ::: | rudder | Angle du rudder | ::: | | ::: | wheel | Consigne du rudder | ::: | | ::: | portRPM | Vitesse de rotation du moteur babord | ::: | | ::: | stbdRPM | Vitesse de rotation du moteur tribord | ::: | | ::: | "#" | Fin du bloc "ShipInfos" | ::: | | ::: | otherships | Nombre d'autres bateau | Bloc "Number" | | ::: | otherbuoys | Nombre de de bouées | ::: | | ::: | mobVisible| Aficher le mob ? (0 ou 1) | ::: | | ::: | nLines| Nombre de lignes | ::: | | ::: | "#" | Fin du bloc "Number" | ::: | | ::: | posX | position en X du bateau | Bloc "Other Ships"\\ Répété autant de fois qu'il y a de bateau | | ::: | posY | position en Y du bateau | ::: | | ::: | heading | Cap du bateau | ::: | | ::: | speed | Vitesse du bateau | ::: | | ::: | "0" | Vide | ::: | | ::: | "0" | Vide | ::: | | ::: | mmsi | Numéro MMSI | ::: | | ::: | legs | Nombre de legs du bateau | ::: | | ::: | legCourse | cap du bateau | Bloc "legs"\\ Répété autant de fois qu'il y a de leg | | ::: | legSpeed | vitesse du bateau | ::: | | ::: | legDistance | distance du leg | ::: | | ::: | "/" | Séparateur de fin de leg | ::: | | ::: | "!" | Séparateur de fin d'other ships | ::: | | ::: | "#" | Fin du bloc "Other Ships" | | | ::: | posX | position en X de la bouée | Bloc "Buoys"\\ Répété autant de fois qu'il y a de bouée | | ::: | posY | position en Y de la bouée | ::: | | ::: | "!" | Séparateur de fin de bouée | ::: | | ::: | "#" | Fin du bloc "Buoys" | | | ::: | mobX | position en X du mob | Bloc "MOB" | | ::: | mobY | position en Y du mob| ::: | | ::: | "#" | Fin du bloc "MOB" | ::: | | ::: | loop | Compteur de boucle du thread principal | Bloc "Loop" | | ::: | "#" | Fin du bloc "Loop" | ::: | | ::: | weather | Niveau de vagues (entre 0 et 1) | Bloc "Weather" | | ::: | visibility | Visibilité (entre 0 et 1) | ::: | | ::: | windDirection | Direction du vent vrai (entre 0 et 360°) | ::: | | ::: | rain | Intensité de la pluie (entre 0 et 1) | ::: | | ::: | windSpeed | Vitesse du vent vrai (entre 0 et 50 knts) | ::: | | ::: | streamDirection | Direction des vagues | ::: | | ::: | streamSpeed | Vitesse des vagues | ::: | | ::: | streamOverride | ??? (0 ou 1) | ::: | | ::: | "#" | Fin du bloc "Weather" | ::: | | ::: | "0" | Vide | Bloc vide | | ::: | "0" | Vide | ::: | | ::: | "0" | Vide | ::: | | ::: | "#" | Fin du bloc vide | ::: | | ::: | view | Numéro de la vue caméra | Bloc "Camera View" | | ::: | "#" | Fin du bloc "Camera View" | ::: | | ::: | "0" | Vide | Bloc vide | | ::: | "#" | Fin du bloc vide | ::: | | ::: | lineStartX | Position du début en X de la ligne | Bloc "Lines"\\ Répété autant de fois qu'il y a de ligne | | ::: | lineStartY | Position du début en Y de la ligne | ::: | | ::: | lineStartZ | Position du début en Z de la ligne | ::: | | ::: | lineEndX | Position de fin en X de la ligne | ::: | | ::: | lineEndY | Position de fin en Y de la ligne | ::: | | ::: | lineEndZ | Position de fin en Z de la ligne | ::: | | ::: | lineStartType | Type de la ligne (début) | ::: | | ::: | lineEndType | Type de la ligne (fin) | ::: | | ::: | lineStartID | ID de la ligne (début) | ::: | | ::: | lineEndID | ID de la ligne (fin) | ::: | | ::: | lineLength | Longueur de la ligne | ::: | | ::: | lineStrain | Tension de rupture de la ligne | ::: | | ::: | lineTension | Tension de rupture de la ligne | ::: | | ::: | shipMass | Masse du bateau | ::: | | ::: | keepSlack | ??? (0 ou 1) | ::: | | ::: | heaveIn | ??? (0 ou 1) | ::: | | ::: | "!" | Séparateur de fin de ligne | ::: | | ::: | "#" | Fin du bloc "Lines" | | | ::: | wheel | Consigne du rudder | Bloc "Controls" | | ::: | rudder| Position du rudder | ::: | | ::: | portEngine | puissance du moteur babord | ::: | | ::: | stbdEngine | puissance du moteur tribord | ::: | | ::: | portAngSchottel | angle du schottel babord | ::: | | ::: | stbdAngSchottel | angle du schottel tribord | ::: | | ::: | portThrustSchottel | puissance du schottel babord | ::: | | ::: | stbdThrustSchottel | puissance du schottel tribord | ::: | | ::: | bowThrust | puissance du thruster avant | ::: | | ::: | sternThrust| puissance du thruster arrière | ::: | ===== Message SD ===== L'intégralité du message est formaté au format ASCII ==== Fermer les bridgecommand-bc secondaires ==== ^ Entête ^ Champs ^ Description ^ | "SD" | "" | Envoi du signal ShutDown | //Exemple : SD// ===== Message SCN ===== L'intégralité du message est formaté au format ASCII, chaque champ est séparé par un dièse "#" ==== Envoyer les infos du scénario ==== ^ Entête ^ Champs ^ Description ^ | "SCN" | "3" | Scenario au format 3 | | ::: | scenarioName | Nom du scénario à jouer | | ::: | worldName | Nom de la map | | ::: | startTime | Heure de début du scénario | | ::: | startDay | Jour de début du scénario | | ::: | startMonth | Mois de début du scénario | | ::: | startYear | Année de début du scénario | | ::: | sunRise | Lever de soleil | | ::: | sunSet | Coucher de soleil | | ::: | weather | Niveau de vagues (entre 0 et 1) | | ::: | rain | Intensité de la pluie (entre 0 et 1) | | ::: | visibility | Visibilité (entre 0 et 1) | | ::: | windDirection | Direction du vent vrai (entre 0 et 360°) | | ::: | windSpeed | Vitesse du vent vrai (entre 0 et 50 knts) | | ::: | "0" | Vide | | ::: | "0" | Vide (Répété autant de fois qu'il y a de bateau dans le scénario) | ===== Message MPF ===== L'intégralité du message est formaté au format ASCII, chaque champ est séparé par un dièse "#" sauf pour le bloc "Lines" ou ça sera "," ==== Envoyer un feedback multijoueur ==== ^ Entête ^ Champs ^ Description ^ Bloc ^ | "MPF" | posX | position en X du bateau | Bloc "ShipInfos" | | ::: | posY | position en Y du bateau | ::: | | ::: | heading | Cap du bateau | ::: | | ::: | rot | Rate of Turn | ::: | | ::: | sog | Vitesse sur terre | ::: | | ::: | timeDelta | Temps écoulé depuis le début du jour du scénario (en sec) | ::: | | ::: | lineStartX | Position du début en X de la ligne | Bloc "Lines"\\ Répété autant de fois qu'il y a de ligne | | ::: | lineStartY | Position du début en Y de la ligne | ::: | | ::: | lineStartZ | Position du début en Z de la ligne | ::: | | ::: | lineEndX | Position de fin en X de la ligne | ::: | | ::: | lineEndY | Position de fin en Y de la ligne | ::: | | ::: | lineEndZ | Position de fin en Z de la ligne | ::: | | ::: | lineStartType | Type de la ligne (début) | ::: | | ::: | lineEndType | Type de la ligne (fin) | ::: | | ::: | lineStartID | ID de la ligne (début) | ::: | | ::: | lineEndID | ID de la ligne (fin) | ::: | | ::: | lineLength | Longueur de la ligne | ::: | | ::: | lineStrain | Tension de rupture de la ligne | ::: | | ::: | lineTension | Tension de rupture de la ligne | ::: | | ::: | shipMass | Masse du bateau | ::: | | ::: | keepSlack | ??? (0 ou 1) | ::: | | ::: | heaveIn | ??? (0 ou 1) | ::: | | ::: | "!" | Séparateur de fin de ligne | ::: | ===== Message MH ===== L'intégralité du message est formaté au format ASCII, chaque champ est séparé par une virgule "," et chaque bloc de message par un dièse "#" ==== Envoyer des infos minimalistes au hub multiplayer ==== ^ Entête ^ Champs ^ Description ^ Bloc ^ | "MH" | timeStamp | Date courante (en sec POSIX) | Bloc "TimeStamp" | | ::: | timeOffset | Date du jour du scénario (en sec POSIX) | ::: | | ::: | timeDelta | Temps écoulé depuis le début du jour du scénario (en sec) | ::: | | ::: | accel | Coefficient d'accélération du temps | ::: | | ::: | "#" | Fin du bloc "Time" | ::: | | ::: | "0" | vide | Bloc vide | | ::: | "#" | Fin du bloc vide | ::: | | ::: | otherships | Nombre d'autres bateau | Bloc "Number" | | ::: | "0" | vide | ::: | | ::: | "0" | vide | ::: | | ::: | nLines| Nombre de lignes | ::: | | ::: | "#" | Fin du bloc "Number" | ::: | | ::: | posX | position en X du bateau | Bloc "Other Ships"\\ Répété autant de fois qu'il y a de bateau | | ::: | posY | position en Y du bateau | ::: | | ::: | heading | Cap du bateau | ::: | | ::: | speed | Vitesse du bateau | ::: | | ::: | rot | Rate of Turn | ::: | | ::: | "0" | vide | ::: | | ::: | "0" | vide | ::: | | ::: | "0" | vide | ::: | | ::: | "0!" | vide | ::: | | ::: | "#" | Fin du bloc "Other Ships" | | | ::: | "4" | vide | Bloc 4 vide | | ::: | "#" | Fin du bloc 4 vide | ::: | | ::: | "5" | vide | Bloc 5 vide | | ::: | "#" | Fin du bloc 5 vide | ::: | | ::: | "6" | vide | Bloc 6 vide | | ::: | "#" | Fin du bloc 6 vide | ::: | | ::: | "7" | vide | Bloc 7 vide | | ::: | "#" | Fin du bloc 7 vide | ::: | | ::: | "8" | vide | Bloc 8 vide | | ::: | "#" | Fin du bloc 8 vide | ::: | | ::: | "9" | vide | Bloc 9 vide | | ::: | "#" | Fin du bloc 9 vide | ::: | | ::: | "10" | vide | Bloc 10 vide | | ::: | "#" | Fin du bloc 10 vide | ::: | | ::: | lineStartX | Position du début en X de la ligne | Bloc "Lines"\\ Répété autant de fois qu'il y a de ligne | | ::: | lineStartY | Position du début en Y de la ligne | ::: | | ::: | lineStartZ | Position du début en Z de la ligne | ::: | | ::: | lineEndX | Position de fin en X de la ligne | ::: | | ::: | lineEndY | Position de fin en Y de la ligne | ::: | | ::: | lineEndZ | Position de fin en Z de la ligne | ::: | | ::: | lineStartType | Type de la ligne (début) | ::: | | ::: | lineEndType | Type de la ligne (fin) | ::: | | ::: | lineStartID | ID de la ligne (début) | ::: | | ::: | lineEndID | ID de la ligne (fin) | ::: | | ::: | lineLength | Longueur de la ligne | ::: | | ::: | lineStrain | Tension de rupture de la ligne | ::: | | ::: | lineTension | Tension de rupture de la ligne | ::: | | ::: | shipMass | Masse du bateau | ::: | | ::: | keepSlack | ??? (0 ou 1) | ::: | | ::: | heaveIn | ??? (0 ou 1) | ::: | | ::: | "!" | Séparateur de fin de ligne | ::: | | ::: | "#" | Fin du bloc "Lines" | | | ::: | "12" | vide | Bloc 12 vide | ===== Message OS ===== L'intégralité du message est formaté au format ASCII, chaque champ est séparé par une virgule "," ==== Envoyer des infos minimalistes à des outils tiers (ex : PolarManagement) ==== ^ Entête ^ Champs ^ Description ^ | "OS" | lat | latitude du bateau | | ::: | long | longitude du bateau | | ::: | heading | Cap du bateau | | ::: | rot | Rate of Turn | | ::: | stw | Vitesse du bateau sur l'eau | | ::: | twa | Direction du vent vrai (entre 0 et 360°) | | ::: | tws | Vitesse du vent vrai (entre 0 et 50 knts) | | ::: | awa | Direction du vent apparent | | ::: | aws | Vitesse du vent apparent | ===== Message WI ===== L'intégralité du message est formaté au format ASCII, chaque champ est séparé par une virgule "," ==== Envoyer les infos de vent vrai ==== ^ Entête ^ Champs ^ Description ^ | "WI" | twa | Direction du vent vrai (entre 0 et 360°) | | ::: | tws | Vitesse du vent vrai (entre 0 et 50 knts) |