我是编码新手,我正在编辑一个用 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:调用回调之间的时间间隔,以毫秒为单位。指定"超时.无限"以禁用定期信号。
简单地将计时器间隔更改为较低的值将意味着更频繁地处理队列,这将增加吞吐量。