需要帮助编辑Message Queue系统

时间:2015-01-16 02:57:12

标签: c#

我是编码的新手,我正在编辑一个用C#编写的开源IRC bot。服务器每30秒限制20条消息。我相信机器人已经使用了C#messageQueue,但我不明白它是如何工作的。我想知道是否有人可以帮我编辑它以适应服务器限制。机器人使用sendMessage发送具有int优先级的字符串消息。感谢您提前的时间。

 private Timer messageQueue;

 messageQueue = new Timer(handleMessageQueue, null, 0, 4000);    

 private void handleMessageQueue(Object state)
    {
        String message;
        //Console.WriteLine("Entering Message Queue.  Time: " + DateTime.Now);
        if (highPriority.TryDequeue(out message))
        {
            print(nick + ": " + message);
            sendRaw("PRIVMSG " + channel + " :" + message);
            messageQueue.Change(4000, Timeout.Infinite);
        }
        else if (normalPriority.TryDequeue(out message))
        {
            print(nick + ": " + message);
            sendRaw("PRIVMSG " + channel + " :" + message);
            messageQueue.Change(4000, Timeout.Infinite);
        }
        else if (lowPriority.TryDequeue(out message))
        {
            print(nick + ": " + message);
            sendRaw("PRIVMSG " + channel + " :" + message);
            messageQueue.Change(4000, Timeout.Infinite);
        }
        else messageQueue.Change(4000, Timeout.Infinite);
    }

    private void sendMessage(String message, int priority)
    {
        if (priority == 1)
        {
            highPriority.Enqueue(message);
        }
        else if (priority == 2)
        {
            normalPriority.Enqueue(message);
        }
        else lowPriority.Enqueue(message);
    }

编辑:我被告知代码中没有messageQueue系统。以下是来源:http://sourceforge.net/p/twitchmodbot/source/ci/master/tree/ModBot/上面的代码可以在Irc.cs中找到。

1 个答案:

答案 0 :(得分:0)

在您的代码段中,队列的处理是使用计时器完成的。

private Timer messageQueue;
messageQueue = new Timer(handleMessageQueue, null, 0, 4000);    

这意味着每4000毫秒(4秒)将调用一次handleMessageQueue方法来处理消息队列。

这是使用的Timer构造函数的documentation

我会在这里引用它:

public Timer(
    TimerCallback callback,
    Object state,
    long dueTime,
    long period
)

参数解释如下:

  

回调:表示要执行的方法的TimerCallback委托。

     

state :包含要由回调方法使用的信息的对象,或者为null。

     

dueTime :调用回调之前的延迟时间(以毫秒为单位)。指定Timeout.Infinite以防止计时器启动。指定零(0)立即启动计时器。

     

期间:回调调用之间的时间间隔,以毫秒为单位。指定Timeout.Infinite以禁用定期信令。

简单地将定时器间隔更改为较低值的值将意味着更频繁地处理队列,这将增加吞吐量。