需要有关编辑消息队列系统的帮助



我是编码新手,我正在编辑一个用 C# 编写的开源 IRC 机器人。服务器将限制为每 30 秒发送 20 条消息。我相信机器人已经使用了 C# 消息队列,但我不明白它是如何工作的。我想知道是否有人可以帮助我编辑它以适应服务器限制。机器人使用 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);
    }

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

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

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

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

下面是所用计时器构造函数的文档。

我将在这里引用它:

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

参数解释如下:

callback:一个 TimerCallback 委托,表示要执行的方法。

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

dueTime:调用回调之前延迟的时间量,以毫秒为单位。指定"超时.无限"以防止计时器启动。指定零 (0) 可立即启动计时器。

period:调用回调之间的时间间隔,以毫秒为单位。指定"超时.无限"以禁用定期信号。

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

最新更新