using System; using System.Collections; using System.IO; using System.Data; using System.Threading; using TechBot.IRCLibrary; namespace TechBot.Library { public class TechBotService { private IServiceOutput serviceOutput; private string chmPath; private string mainChm; private string ntstatusXml; private string winerrorXml; private string hresultXml; private string wmXml; private string svnCommand; private string bugUrl, WineBugUrl, SambaBugUrl; private ArrayList commands = new ArrayList(); public TechBotService(IServiceOutput serviceOutput, string chmPath, string mainChm, string ntstatusXml, string winerrorXml, string hresultXml, string wmXml, string svnCommand, string bugUrl, string WineBugUrl, string SambaBugUrl) { this.serviceOutput = serviceOutput; this.chmPath = chmPath; this.mainChm = mainChm; this.ntstatusXml = ntstatusXml; this.winerrorXml = winerrorXml; this.hresultXml = hresultXml; this.wmXml = wmXml; this.svnCommand = svnCommand; this.bugUrl = bugUrl; this.WineBugUrl = WineBugUrl; this.SambaBugUrl = SambaBugUrl; } public void Run() { commands.Add(new HelpCommand(serviceOutput, commands)); commands.Add(new ApiCommand(serviceOutput, chmPath, mainChm)); commands.Add(new NtStatusCommand(serviceOutput, ntstatusXml)); commands.Add(new WinerrorCommand(serviceOutput, winerrorXml)); commands.Add(new HresultCommand(serviceOutput, hresultXml)); commands.Add(new ErrorCommand(serviceOutput, ntstatusXml, winerrorXml, hresultXml)); commands.Add(new WmCommand(serviceOutput, wmXml)); commands.Add(new SvnCommand(serviceOutput, svnCommand)); commands.Add(new BugCommand(serviceOutput, bugUrl, WineBugUrl, SambaBugUrl)); } public void InjectMessage(MessageContext context, string message) { if (message.StartsWith("!")) ParseCommandMessage(context, message); } private bool IsCommandMessage(string message) { return message.StartsWith("!"); } public void ParseCommandMessage(MessageContext context, string message) { if (!IsCommandMessage(message)) return; message = message.Substring(1).Trim(); int index = message.IndexOf(' '); string commandName; string parameters = ""; if (index != -1) { commandName = message.Substring(0, index).Trim(); parameters = message.Substring(index).Trim(); } else commandName = message.Trim(); foreach (ICommand command in commands) { if (command.CanHandle(commandName)) { command.Handle(context, commandName, parameters); return; } } } } }