我是编码的新手,我正在编辑一个用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中找到。
答案 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以禁用定期信令。
简单地将定时器间隔更改为较低值的值将意味着更频繁地处理队列,这将增加吞吐量。