Outils pour utilisateurs

Outils du site


projets:archnetbc

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 :

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)
projets/archnetbc.txt · Dernière modification : de 176.145.87.215