Table des matières
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
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) |