Il est dit que l'on est pas un bon informaticien si l'on est pas fainéant. Eh bien, fort de cet adage, je me suis "amusé" à réaliser un petit plug-in pour Vista Media Center pour me permettre de suivre, à distance et devant ma télé, l'état de mes serveurs.
Avant que de ne commencer, précisons quand même qu'il s'agissait juste, avec deux ou trois rustines et un peu de colle, d'utiliser des composants qui sont déjà installés sur les-dits serveurs (et qui sont utilisés dans des outils plus sérieux de type MOM) pour faire du monitoring.

Le but du jeu est, comme vous pouvez le voir sur le screenshot ci-dessus, d'avoir une notification lors de problèmes graves sur l'un de mes serveurs puis de pouvoir visualiser le détail du(des) problème(s).
Ce petit projet, va nous permettre de regarder un peu l'architecture d'extensibilité de Vista Media Center. Pour ne pas trop le complexifier (et parce que je ne suis pas encore un pro en MCML), la visualisation du détail prendra la forme d'une application XBAP (et donc .net 3.0).La notification, elle, sera réalisé au travers d'un projet d'extensibilité Media Center tout simple.
L'affichage du détail
Je reviendrai certainenement en détail sur cette application mais pour l'instant disons qu'elle existe et contentons nous d'une simple visu de celle-ci et de savoir qu'elle est réalisée en WPF. (Oui, je sais c'est pas super-joli, j'essaierai de l'améliorer avant de la décortiquer).

Un certain nombre de considérations sont tout de même à prendre en compte lorsque l'on réalise ce type d'application :
- ne surtout pas oublier que l'on sera à un strict minimum de 2m lors de l'utilisation : donc pas de texte écrit en tout petit.
- travailler avec une résolution définitive d'utilisation inconnue, y compris le format (une bonne partie des installations MCE sont en 16x9eme, mais cela ne veut pas dire toutes...)
- rendre la navigation aisée à la télécommande et oublier l'idée d'une saisie au clavier
- laisser les emplacement nécéssaires aux commandes MCE
L'add-in de notification
Le second projet correspond à l'add-in affichant la barre de notification. Le template de projet Windows Media Center Presentation Layer Application (quand je vous disais que Microsoft avait un dont certain pour les noms...), fourni avec le SDK permet d'obtenir tout ce qui est nécessaire (et même beaucoup de superflu) pour cettte mini-appli :
- une classe d'add-in
- un fichier d'enregistrement
- tout le reste qui ne servira à rien pour le cas présent.
Le projet se compose en fait d'un add-in tournant en tâche de fond. Les fichiers d'interface graphique ne nous servent pas à grand chose et tout se résume à la classe suivante :
et même plus précisément à la méthode Launch, dans lequel tout le traitement sera effectué.
En plus de vérifier si l'application n'est pas déjà en cours d'exécution - si vous faîtes quelque chose de similaire (et comme moi utilisez un mutex) n'oubliez pas d'utiliser un mutex local, sinon cela pourrait poser des problèmes avec un extender qui agit comme une seconde session -, l'add-in entre dans une boucle infinie de notification et d'attente. On pourrait imaginer, à tort, que les add-ins "tournent" pendant toute la durée de la session Media Center. Ce n'est pas du tout le cas, et, mis à part les appels à Initialize et Uninitialize, le processus ne vit que pendant la durée de la méthode Launch. (Je n'ai pas encore pleinement regardé ce que je pouvais faire pour rendre un peu plus propre ce code : un while(true) sans aucun break me chiffonne un peu)
La méthode NotifierSiErreur n'est pas très compliquée elle-non plus :
Je vous passe le détail de GetUnhandledEventCount, qui contacte le serveur de maintenance pour obtenir le nombre d'évenements non traités. Si il y a plus d'événements qu'à l'appel précédent ou qu'il y a plus d'une heure depuis le dernier afficahge, l'add-in lanceune notification. Pour cela, une image doit absolument lui être passé d'où, ici, la génération une image vide).
Le second paramètre de la méthode DialogNotification permet de définir les boutons qui seront affichés et le dernier, de spécifier une méthode callback à appeler si l'utilisateur clique sur l'un de ceux-ci.
Voila, avant d'expliquer comment lancer le xbap, il est nécessaire de préparer le fichier d'enregistrement de l'application.
Ce fichier contient une déclaration d'application et deux points d'entrée :
- l'un pour l'add-in ci-dessus enregistré dans la catégorie Background
- l'autre pour le xbap, placé dans la partie "tâches" de la librairie de programmes
Ce petit tour par le fichier de config était nécessaire pour connaitre les deux paramètres nécessaires à la navigation vers le xbap : le guid de l'application et celui du point d'entrée.
Mettre en place
Voila, le mini-projet est terminé (même si vous n'en avez pas vu le détail exact), il ne reste plus qu'à déployer. En ce qui concerne le XBAP, et à cause de limitations de sécurité de ce type de projets - à savoir l'impossibilité de se connecter à un autre serveur que celui d'origine -, l'emplacement d'installation est tout trouvé : sur le serveur de maintenance. L'add-in, lui, peut être déployé dans deux endroits : soit dans le GAC, soit directement dans \windows\ehome. J'ai une préférence pour le second cas, mais si vous utilisez un projet MSI pour déployer vos add-ins, le GAC est peut-être plus simple d'accès.