Publier des StateObjects

Pour publier (Push) un StateObject dans Constellation vous devez invoquer la méthode “PackageHost.PushStateObject” en précisant obligatoirement le nom du StateObject et sa valeur.

Par exemple, vous pouvez publier un StateObject avec en valeur n’importe quel type de base :

Vous pouvez parcourir tous les StateObjects de votre Constellation grâce au “StateObject Explorer” de la Console Constellation :StateObject Explorer

Pouvez également publier des objets avec un type anonyme :

Ou encore avec des types complexes :

Depuis la Console, vous pouvez analyser en détail vos StateObjects et même les suivre en temps réel :

StateObject Explorer

Vous avez également la possibilité de définir des paramètres optionnels sur cette méthode pour ajouter les métadonnées de votre StateObject ou encore définir sa durée de vie.

Par exemple, ici le StateObject “ShortLife” a ici une durée de vie de 20 secondes. Au delà il sera donc considéré comme expiré si il n’est pas mis à jour après 20 secondes.

Ci-dessous, on publie un StateObject “Salon” en lui associant les metadatas “Id” et “Zone”.

Note : à chaque (re)démarrage de votre package, tous les StateObjects du package sont purgés de la Constellation.

Décrire les types de StateObjects

Il est recommandé de décrire les types complexes de vos StateObjects dans la Constellation pour activer l’auto-description (utilisé entre autre par les générateurs de code ou le MessageCallback Explorer de la Console).

Sur les objets personnalisés il suffit de décorer les classes de l’attribut [StateObject]. Par exemple pour reprendre l’exemple ci dessus, la classe du StateObject “MyObject” pourrait être défini ainsi :

Deux points à retenir :

  • Marquer la classe de l’attribut [StateObject] pour l’inclure dans la description du package
  • Ajouter des commentaires de documentation XML pour décrire le StateObject et ses propriétés.

Autrement si vous être amené à publier des StateObjects d’un type dont vous n’avez pas la possibilité de modifier le code pour ajouter l’attribut [StateObject] (par exemple un type d’une libraire tierce), vous pouvez sur votre classe IPackage, ajoutez l’attribut [StateObjectKnownTypes] en définissant la liste des types de StateObjects à décrire :

Vous avez également la possibilité d’ajouter à tout moment la description d’un type de StateObject via les méthodes :

  • PackageHost.DescribeStateObjectTypes : en passant une liste de Type
  • PackageHost.DescribeStateObjectTypesFromAssembly : en passant une assembly (qui sera scannée à la recherche des classes marquées par l’attribut [StateObject])

Si vous ajoutez vous-même des types de StateObjects dans la description du package via les deux méthodes ci-dessus, vous devez ensuite mettre à jour la description du package par la ligne :

Supprimer des StateObjects

Vous avez deux moyens de supprimer des StateObjects :

  • PackageHost.PurgeStateObjects : pour supprimer les StateObjects de votre package
  • PackageHost.ControlManager.PurgeStateObjects : pour supprimer n’importe quel StateObject de votre Constellation en utilisant le ControlManager (nécessite une clé d’accès autorisant l’accès au hub de contrôle). Plus di’nformation ici
Publier des StateObjects
Editer la page sur GitHub
Étiqueté avec :        

Démarrez la discussion sur le forum Constellation