Skip to content

Shared — sources uniques partagées ​

Bibliothèque de classes contenant ce que plusieurs exécutables doivent lire de façon identique : adresses Modbus des centrales livrées, vocabulaire des états système, empreinte matérielle du poste, format de licence, configuration applicative et identité de marque.

TechnologieC# .NET 9, bibliothèque de classes
Namespace racineFireSupervisor.Shared
PaquetSystem.Management — requis par la lecture WMI de l'empreinte poste
Consommateursbackend, client, manager, simulator, simulator.core, license-generator, tests/tools

Structure ​

FichierContenu
AppConfig.csLecture de app.config.json : noms, version, éditeur, service, port, chemins, configuration de l'installateur
BrandProfile.csIdentité du distributeur appliquée au poste — noms, couleurs, images
Hardware/HardwareInfo.csEmpreinte matérielle du poste
Licensing/LicenseEnvelope, LicensePayload, LicenseRequest, LicenseStatus, LicenseStore, LicenseVerifier
Profiles/PanelRegisterMap.csForme d'une cartographie de registres
Profiles/StandardPanelProfiles.csCartographies INIS-E16 et AVISS
Profiles/SystemFlagKeys.cs17 clés d'état système

Mécanismes non évidents ​

Une adresse Modbus n'est déclarée qu'ici ​

StandardPanelProfiles est la source unique des adresses fil JBUS et des codes de commande des centrales livrées. Le backend en dérive ses profils (ModbusProfile.CreateInisE16() / CreateAviss()) et le simulateur en dérive les centrales qu'il sert. Corriger une adresse d'un seul côté est impossible : les deux lisent le même enregistrement.

Deux valeurs y sont documentées comme des écarts assumés au cahier des charges Desautel :

ValeurCe qu'elle porte
PointDisableAddress1001 sur AVISS, valeur décimale de la table d'échange ; 953 sur INIS-E16, relevé sur centrales réelles. La colonne hexadécimale du cahier (0x03B9 = 953) est erronée sur cette ligne
AddressOffset = 0Les adresses du cahier sont des adresses fil brutes, envoyées telles quelles

Un état système est identifié par sa clé, pas par son bit ​

SystemFlagKeys porte 17 clés. Chaque cartographie déclare quels bits elle sert et à quelle position — l'INIS-E16 en déclare 11, l'AVISS 15, et les deux ensembles ne se recouvrent pas complètement.

CasDétail
Un état porté à des positions différentesLa clé est la même, GlobalBits diffère
Un état non porté par une centraleSa clé est simplement absente de GlobalBits
Une clé traverse toute la chaîneCartographie → définitions du backend → persistance des acquittements → frontend

Les bits 8 à 21 ne sont pas déclarés sur l'INIS-E16 : le cahier les y marque « non utilisable ». Les bits 23 et 24 lui sont au contraire propres.

L'empreinte matérielle doit être calculée à l'identique par trois exécutables ​

HardwareInfo est la source unique consommée par le client de supervision, le gestionnaire de service et le générateur de licences. Une divergence invaliderait silencieusement toutes les licences.

CalculSHA-256 (256 bits, 64 caractères hexadécimaux) de l'UUID système, du numéro de série de la carte mère et de l'identifiant CPU
Hors WindowsLes appels WMI sont gardés en interne ; une valeur sentinelle est rendue, sans contrainte de plateforme imposée aux appelants

La licence est liée au matériel, pas à une session Windows ​

LicenseStore cherche le fichier dans cet ordre :

RangEmplacementRôle
1%ProgramData%\Superviseur\license.keyCouvre tous les comptes du poste
2%AppData%\Superviseur\license.keyRepli en écriture quand le processus n'a pas les droits sur le premier

Une licence refusée n'écrase jamais celle en place.

Une marque n'apporte que des données ​

BrandProfile lit un dossier de marque déposé par l'installateur. L'application ne l'écrit jamais et une marque ne porte aucun code. Le backend sert cette identité à l'interface ; le client de bureau et le gestionnaire y prennent leurs couleurs.

app.config.json est cherché à côté de l'exécutable ​

Chaque exécutable qui en dépend en reçoit une copie à la compilation. Sans elle, AppConfig.Load() retombe silencieusement sur ses valeurs par défaut — version 0.0.0, port 5000, URL https://localhost:5000.

Le chemin de données applicatif est résolu par PathsConfig : AppDataDev (%LOCALAPPDATA%\Superviseur_Dev) ou AppDataProd (%ProgramData%\Superviseur) selon l'environnement.

Contraintes actives ​

ContrainteConséquence si elle est ignorée
La clé publique de vérification des licences vit dans Licensing/LicenseVerifier.csLa changer sans régénérer les licences déployées rend tous les postes non activés
Aucune clé privée n'entre dans ce projetSeule la vérification est partagée ; l'émission vit dans license-generator
Le projet cible net9.0 sans dépendance graphiqueIl est référencé par des projets Windows comme par des projets multiplateformes

Documentation Technique