Cette section définit l'architecture réseau qui régit le logiciel Bridge-Command (BC)
La librairie utilisée dans BC est Enet(http://enet.bespin.org/) sur UDP.
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) |
Cette section renseignera chaque champs des messages indiqué dans le tableau de la section Flux.
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 “#”
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#
Entête | Champs | Description |
---|---|---|
“MC” | “DL” | Delete Leg |
ship | numéro du bateau | |
leg | numéro du leg |
Exemple : MCDL,1,2#
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#
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#
Entête | Champs | Description |
---|---|---|
“MC” | “MM” | Modify Mmsi |
ship | numéro du bateau | |
mmsi | Numéro MMSI |
Exemple : MCMM,1,123456789#
Entête | Champs | Description |
---|---|---|
“MC” | “MO” | Man Overboard |
mob | 1 : homme à la mer -1 : homme récupéré |
Exemple : MCMO,-1#
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#
Entête | Champs | Description |
---|---|---|
“MC” | “RF” | Rudder Followup |
state | état du followup (0:défaillance/1:fonctionnel) |
Exemple : MCRF,0#
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#
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 “#”
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 |
L'intégralité du message est formaté au format ASCII
Entête | Champs | Description |
---|---|---|
“SD” | “” | Envoi du signal ShutDown |
Exemple : SD
L'intégralité du message est formaté au format ASCII, chaque champ est séparé par un dièse “#”
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) |
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 “,”
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 |
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 “#”
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 |
L'intégralité du message est formaté au format ASCII, chaque champ est séparé par une virgule “,”
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 |
L'intégralité du message est formaté au format ASCII, chaque champ est séparé par une virgule “,”
Entête | Champs | Description |
---|---|---|
“WI” | twa | Direction du vent vrai (entre 0 et 360°) |
tws | Vitesse du vent vrai (entre 0 et 50 knts) |