using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Data; using System.Threading; using TechBot.IRCLibrary; namespace TechBot.Library { public abstract class TechBotService { protected IServiceOutput m_ServiceOutput; public TechBotService(IServiceOutput serviceOutput) { m_ServiceOutput = serviceOutput; } public virtual void Run() { CommandFactory.LoadPlugins(); } public IServiceOutput ServiceOutput { get { return m_ServiceOutput; } } public CommandBuilderCollection Commands { get { return CommandFactory.Commands; } } public void InjectMessage(MessageContext context, string message) { ParseCommandMessage(context, message); } private bool IsCommandMessage(string message) { return message.StartsWith(Settings.Default.CommandPrefix); } public void InjectMessage(string message) { ParseCommandMessage(null, message); } public void ParseCommandMessage(MessageContext context, string message) { if (!IsCommandMessage(message)) return; message = message.Substring(1).Trim(); int index = message.IndexOf(' '); string commandName; string commandParams = ""; if (index != -1) { commandName = message.Substring(0, index).Trim(); commandParams = message.Substring(index).Trim(); } else commandName = message.Trim(); foreach (CommandBuilder command in Commands) { if (command.Name == commandName) { //Create a new instance of the required command type Command cmd = command.CreateCommand(); cmd.TechBot = this; cmd.Context = context; cmd.Parameters = commandParams; try { cmd.Initialize(); cmd.Run(); cmd.DeInitialize(); } catch (Exception e) { ServiceOutput.WriteLine(context, string.Format("Uops! Just crashed with exception '{0}' at {1}", e.Message, e.Source)); ServiceOutput.WriteLine(context, e.StackTrace); } return; } } } } }