Sample Code
Windows Server 2008
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.HomeServer.SDK.Interop.v1;
namespace Health_Notification_Sample
{
class Program
{
static void Main(string[] args)
{
IWHSInfo info = new WHSInfoClass();
//Register application name
info.Init("Sample App");
NotificationCallbackClass notificationClass = new NotificationCallbackClass();
//Register notification callback class
info.RegisterForNotifications(notificationClass);
//Check current state
Console.WriteLine("Current State: " + notificationClass.GetHealthState().ToString());
Console.WriteLine("Done");
Console.ReadLine();
}
}
public enum HealthState
{
Healthy, //Green
Warning, //Yellow
Error //Red
}
//Storage container for individual notifications
class NotificationItem
{
public string UniqueID { get; set; }
public WHS_Notification_Severity Severity { get; set; }
public bool IsSuppressed { get; set; }
public string textHeader { get; set; }
public string textDescription { get; set; }
public string helpFilename { get; set; }
public string helpSection { get; set; }
public string helpLinkText { get; set; }
public NotificationItem(string UniqueID, WHS_Notification_Severity Severity, int IsSuppressed, string textHeader, string textDescription, string helpFilename, string helpSection, string helpLinkText)
{
this.UniqueID = UniqueID;
this.Severity = Severity;
this.IsSuppressed = IsSuppressed == 1;
this.textHeader = textHeader;
this.textDescription = textDescription;
this.helpFilename = helpFilename;
this.helpSection = helpSection;
this.helpLinkText = helpLinkText;
}
}
public class NotificationCallbackClass : INotificationCallback
{
Dictionary<string, NotificationItem> notificationItems = new Dictionary<string, NotificationItem>();
//Custom method to count through outstanding notifications and determine
//how many of which kinds are oustanding and not suppressed
public HealthState GetHealthState()
{
int warnings = 0;
int errors = 0;
foreach (NotificationItem item in notificationItems.Values)
{
//Go through each notification and count non-suppressed ones of each type
if (item.Severity == WHS_Notification_Severity.WHS_WARNING && !item.IsSuppressed)
{
warnings++;
}
else if (item.Severity == WHS_Notification_Severity.WHS_ERROR && !item.IsSuppressed)
{
errors++;
}
}
if (errors > 0)
return HealthState.Error;
else if (warnings > 0)
return HealthState.Warning;
else
return HealthState.Healthy;
}
public void NotificationChanged(string UniqueID, WHS_Notification_Type Type, WHS_Notification_Severity Severity, int IsSuppressed, string textHeader, string textDescription, string helpFilename, string helpSection, string helpLinkText)
{
NotificationItem item = new NotificationItem(UniqueID, Severity, IsSuppressed, textHeader, textDescription, helpFilename, helpSection, helpLinkText);
//if an add, add/overwrite item to existing list
if (Type == WHS_Notification_Type.WHS_NOTIFICATION_ADD)
{
notificationItems[item.UniqueID] = item;
}
else if (Type == WHS_Notification_Type.WHS_NOTIFICATION_REMOVE)
{
//If remove, if item exists remove it
if (notificationItems.ContainsKey(item.UniqueID))
{
notificationItems.Remove(item.UniqueID);
}
}
}
//Methods that are unused in this example but required as part of implementing INotificationCallback
public void BackupStateChanged(WHSBackupState State)
{
}
public void Disconnected()
{
}
public void PhysicalDiskChanged(IDiskInfo pDiskInfo)
{
}
public void ReConnected()
{
}
public void UserInfoChanged()
{
}
}
}
Show: