// --- Dispatch threading and queue logic --- // • Unique queue: queue per trigger/handler // [one-to-one] // • Shared queue: queue per plugin // [many-to-one] // • Threadpool: Reentrant chaos // [many-to-many] // • Standard/Default: single shared queue for all // [many-to-one] // Only the last 3 are implemented for now. // Process triggers and IRC event handlers declared by the plugin. public void ProcessPluginDeclares(MeidoPlugin plugin) { // Shared queue for all triggers or IRC even handlers declared by the plugin, // that is if they have opted for ThreadingModel.Queue. Queue <Action> queue = null; foreach (var tr in plugin.Triggers) { if (triggers.AddTrigger(tr, plugin)) { RegisterThreading(tr.Threading, tr, triggerQueues, ref queue); } } foreach (var handler in plugin.Handlers) { if (ircEvents.AddHandler(handler, plugin)) { RegisterThreading(handler.Threading, handler, eventQueues, ref queue); } } if (queue != null) { StartConsumeThread(queue); } }
public void RegisterHelp(MeidoPlugin plugin) { foreach (TopicHelp help in plugin.AllTopicHelp) { if (!helpOnTopics.ContainsKey(help.Topic)) { helpOnTopics[help.Topic] = help; } } }
public bool AddHandler(IIrcHandler handler, MeidoPlugin plugin) { if (allowedTypes.Contains(handler.IrcEventType)) { log.Verbose("{0}: Adding IrcHandler for type '{1}'", plugin.Name, handler.IrcEventType); var handlerList = Get(handler.IrcEventType); handlerList.Add(handler); return(true); } log.Error("{0}: Declared an IrcHandler with unsupported type '{1}'. " + "The method for this type will never be called.", plugin.Name, handler.IrcEventType); return(false); }
public bool AddTrigger(Trigger trigger, MeidoPlugin plugin) { bool success = false; // Single trigger, but with possible multiple identifiers. foreach (var id in trigger.Identifiers) { // We consider it a success if even one identifier is successfully registered. if (RegisterTrigger(id, trigger, plugin.Name)) { // Regard the first successful registered id of a trigger as the prime id. if (!success) { primeIds.Add(id); } success = true; } } return(success); }