using System; using System.Xml; namespace TechBot.Library { public class WmCommand : BaseCommand, ICommand { private IServiceOutput serviceOutput; private string wmXml; private XmlDocument wmXmlDocument; public WmCommand(IServiceOutput serviceOutput, string wmXml) { this.serviceOutput = serviceOutput; this.wmXml = wmXml; wmXmlDocument = new XmlDocument(); wmXmlDocument.Load(wmXml); } public bool CanHandle(string commandName) { return CanHandle(commandName, new string[] { "wm" }); } public void Handle(MessageContext context, string commandName, string parameters) { string wmText = parameters; if (wmText.Equals(String.Empty)) { serviceOutput.WriteLine(context, "Please provide a valid window message value or name."); return; } NumberParser np = new NumberParser(); long wm = np.Parse(wmText); string output; if (np.Error) { // Assume "!wm " form. output = GetWmNumber(wmText); } else { output = GetWmDescription(wm); } if (output != null) { serviceOutput.WriteLine(context, String.Format("{0} is {1}.", wmText, output)); } else { serviceOutput.WriteLine(context, String.Format("I don't know about window message {0}.", wmText)); } } public string Help() { return "!wm or !wm "; } private string GetWmDescription(long wm) { XmlElement root = wmXmlDocument.DocumentElement; XmlNode node = root.SelectSingleNode(String.Format("WindowMessage[@value='{0}']", wm)); if (node != null) { XmlAttribute text = node.Attributes["text"]; if (text == null) throw new Exception("Node has no text attribute."); return text.Value; } else return null; } private string GetWmNumber(string wmName) { XmlElement root = wmXmlDocument.DocumentElement; XmlNode node = root.SelectSingleNode(String.Format("WindowMessage[@text='{0}']", wmName)); if (node != null) { XmlAttribute value = node.Attributes["value"]; if (value == null) throw new Exception("Node has no value attribute."); return value.Value; } else return null; } } }