0
IRC 봇을 만들기 위해 IRCLib for Java를 사용하고 있습니다. 라이브러리에 제공되는 클라이언트로 Moepii를 사용합니다. Moepii의 문제는 홍수 예방에 내장되지 않았기 때문에이 자체를 구현해야 할 것입니다. 현재 내 봇은 많은 명령에 응답 할 때 Quakesnet 초과 홍수를 유발하고 부팅을 시작합니다.IRCLib 자바 생성 IRC 봇 문제
홍수 방지를 구현하는 방법에 대한 제안이있는 사람이 있습니까? 내가 얻은 한 가지 아이디어는 1024 바이트 버퍼를 가정하고 서버에 Ping을 보내고 계속하기 전에 응답을 기다리는 것입니다. IRC와 함께 일한 적이 없기 때문에 일부 조언을 기다리고 있습니다.
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);
}
});
}
}
현재 구현은 나에게 단단한 계획을 것 같은데. 그것을 밖으로 시도하고 그게 당신을 위해 작동하는지보십시오. –
질문 (additiveSize + 새 메시지 크기> 1024) ping을 보내고 응답을 기다린 다음 보류중인 메시지를 보낼 때까지 대기열에있는 각 메시지의 바이트 크기는 어떻게 되나요? – meriley
물론, 서버가 당신에 의해 "넘치게"되지 않는다면, 즉시 PONG을 얻고 버퍼를 재설정하고 회신을 계속할 수 있습니다. 홍수 공격을 방지하기 위해 추가 명령 (ping을 기다리는 동안)을 허용하지 마십시오. –