Exemplo n.º 1
0
        // --- 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);
            }
        }
Exemplo n.º 2
0
 public void RegisterHelp(MeidoPlugin plugin)
 {
     foreach (TopicHelp help in plugin.AllTopicHelp)
     {
         if (!helpOnTopics.ContainsKey(help.Topic))
         {
             helpOnTopics[help.Topic] = help;
         }
     }
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }