IRCLib Java创建的IRC Bot问题
我正在使用IRCLib for Java创建一个IRC机器人。它使用Moepii作为图书馆提供的客户端。Moepii的问题是它没有内置防洪设施,所以我需要自己来实现。目前,我的机器人在响应大量命令时触发了Quakesnet过量洪水并获得启动 有人对我如何实施防洪有什么建议吗?我得到的一个想法是假设一个1024字节的缓冲区,一旦到达,就向服务器发送一个Ping并等待响应,然后继续。我以前从未与IRC合作过,所以我希望能得到一些建议 当前实施IRCLib Java创建的IRC Bot问题,java,buffer,chat,bots,irc,Java,Buffer,Chat,Bots,Irc,我正在使用IRCLib for Java创建一个IRC机器人。它使用Moepii作为图书馆提供的客户端。Moepii的问题是它没有内置防洪设施,所以我需要自己来实现。目前,我的机器人在响应大量命令时触发了Quakesnet过量洪水并获得启动 有人对我如何实施防洪有什么建议吗?我得到的一个想法是假设一个1024字节的缓冲区,一旦到达,就向服务器发送一个Ping并等待响应,然后继续。我以前从未与IRC合作过,所以我希望能得到一些建议 当前实施 private class FloodMonitor i
private class FloodMonitor implements Runnable {
private final int MAXBYTES = 512;
private int messageBuffer = 0;
private boolean suspend = false;
private boolean stop = false;
@Override
public void run() {
while (!stop) {
while (!suspend) {
MessageStructure message = out.peek();
if (message != null) {
messageBuffer += message.msg.getBytes().length;
if (messageBuffer < MAXBYTES) {
out.poll().sendMessage();
} else {
suspend();
message.bot.send("ping irc.quakenet.org");
}
}
}
}
}
public void resetBuffer() {
messageBuffer = 0;
suspend = false;
}
public void stop() {
stop = true;
}
public void suspend() {
suspend = true;
}
}
private class MessageStructure {
public String target;
public String msg;
public BotConnection bot;
MessageStructure(String target, String msg, BotConnection bot) {
this.target = target;
this.msg = msg;
this.bot = bot;
}
private void sendMessage() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
bot.doPrivmsgApproved(target, msg);
}
});
}
}
私有类FloodMonitor实现可运行{
私有最终整数最大字节数=512;
私有int messageBuffer=0;
私有布尔挂起=false;
私有布尔停止=false;
@凌驾
公开募捐{
当(!停止){
而(!挂起){
MessageStructure message=out.peek();
如果(消息!=null){
messageBuffer+=message.msg.getBytes().length;
if(messageBuffer
私有类FloodMonitor实现可运行{
专用最终整数最大字节=768;
私有int messageBuffer=0;
私有布尔挂起=false;
私有布尔停止=false;
@凌驾
公开募捐{
当(!停止){
而(!挂起){
final MessageStructure message=out.peek();
如果(消息!=null){
messageBuffer+=message.msg.getBytes().length;
if(messageBuffer
对我来说,这是一个可靠的计划。尝试一下,看看这是否对您有效。我的问题是,在(additiveSize+new message size>1024)发送ping之前,我是否会获取队列中每条消息的字节大小,等待响应,然后发送保留的消息?当然,如果服务器没有被您“淹没”,您会立即收到一个PONG,然后您可以重置缓冲区,然后继续回答。确保不要接受任何进一步的命令(在等待ping时),以防止洪水攻击。我只会将所有命令添加到队列的末尾,只是不会处理它们。听起来是个可靠的计划。谢谢我会在测试后用结果更新它。不过看起来已经足够坚固了。感谢您创建了缓冲区,但仍然存在被踢的问题。发布我的实现
private class FloodMonitor implements Runnable {
private final int MAXBYTES = 768;
private int messageBuffer = 0;
private boolean suspend = false;
private boolean stop = false;
@Override
public void run() {
while (!stop) {
while (!suspend) {
final MessageStructure message = out.peek();
if (message != null) {
messageBuffer += message.msg.getBytes().length;
if (messageBuffer < MAXBYTES) {
out.poll().sendMessage();
} else {
suspend();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
message.bot.send("ping irc.quakenet.org");
}
});
}
}
}
}
}
public void resetBuffer() {
messageBuffer = 0;
suspend = false;
}
public void stop() {
stop = true;
}
public void suspend() {
suspend = true;
}
}