Я работаю над ботом GTalk.Я не закончил с этим, но пока мой бот работает нормально.Есть одна вещь, которая раздражает меня с тех пор, как я впервые запустил бот.Когда я отправляю IM-сообщение своему боту gtalk, он всегда отвечает сообщением «Ошибка конфигурации бота».Я не могу понять, почему это так.Даже после того, как я получу сообщение об ошибке конфигурации, оно все равно будет работать как обычно и работает нормально.Если я отправлю другое сообщение через несколько секунд после получения сообщения об ошибке, я не получу ответ об ошибке конфигурации бота.Если я подожду несколько минут, чтобы позволить ему "сбросить".После «сброса» бота, если я снова отправлю ему еще одно мгновенное сообщение.Я получу ответ об ошибке конфигурации.Я понятия не имею, почему я продолжаю получать эти сообщения об ошибках.У меня даже нет строки "Ошибка конфигурации бота" в моем коде.Это должно быть из Smack API или с сервера GTalk или еще чего-нибудь.
Вот фрагмент моего кода:
import java.io.IOException;
import org.jivesoftware.smack.*;
import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.filter.*;
import org.apache.log4j.*;
public class GtalkBot {
private static final String username = "test@test.com"; // fake login info
private static final String password = "testpassword"; // fake password
private static final String domain = "gmail.com";
private static final int MAX_SLEEP_COUNT = 8;
private int sleepCount = 0;
private int sleepSec = 1000;
private XMPPConnection conn;
private GChatBufferProcessor chatProcessor;
private Presence presence;
private static final Logger logger = LoggerFactory.make();
public GtalkBot(){
presence = null;
ConnectionConfiguration connConfig = new ConnectionConfiguration("talk.google.com", 5222, domain);
//ConnectionConfiguration connConfig = new ConnectionConfiguration("talk.google.com", 5222);
connConfig.setReconnectionAllowed(true);
conn = new XMPPConnection(connConfig);
chatProcessor = new GChatBufferProcessor(conn);
logger.info(this.getClass().getSimpleName()+" created");
} /* Gtalkbot */
public void run() {
while(true){
try {
login();
} catch (XMPPException xe){
logger.error("failed to connect to "+conn.getHost(), xe);
this.incrementalNap();
continue; // skip the rest of the loop and retry from the top
}
// start the chat message processor thread
chatProcessor.start();
// create gtalk chat listener
this.createChatListener();
while(conn.isConnected()){
/* stuck in this loop while connected, not sure if
this is the right way to do it. */
try {
Thread.sleep(500);
} catch (InterruptedException e){
//e.printStackTrace();
}
}
logger.warn("Lost connection, retrying the login process...");
}
} /* run */
public void login() throws XMPPException {
// connect to gtalk server
conn.connect();
logger.info("connected to "+conn.getHost());
// login to gtalk server
conn.login(username, password);
logger.info("logged in as: "+conn.getUser());
// set the presence status
presence = new Presence(Presence.Type.available);
logger.info("Set presence as: "+Presence.Type.available);
conn.sendPacket(presence);
} /* login */
public void createChatListener(){
GtalkMessageListener msgListener = new GtalkMessageListener();
//PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
PacketFilter filter = new PacketTypeFilter(Message.class);
conn.addPacketListener(msgListener, filter);
} /* createChatListener */
public void incrementalNap(){
if(sleepCount < MAX_SLEEP_COUNT){
sleepSec = sleepSec << 1; // multiply by 2
sleepCount++;
}
logger.debug("Sleeping for "+(sleepSec/1000)+" seconds ...");
try {
Thread.sleep(sleepSec);
} catch (InterruptedException e){
e.printStackTrace();
}
} /* incrementalNap */
}
Заранее спасибо, ребята.