Я читаю исходный код API Smack, и метод XMPPConnection # disconnect выглядит следующим образом:
public void disconnect(Presence unavailablePresence) {
// If not connected, ignore this request.
if (packetReader == null || packetWriter == null) {
return;
}
shutdown(unavailablePresence);
if (roster != null) {
roster.cleanup();
roster = null;
}
wasAuthenticated = false;
packetWriter.cleanup();
packetWriter = null;
packetReader.cleanup();
packetReader = null;
}
В моем сценарии я храню живое XMPPConnection внутри класса с именем Session.
Отдельный поток выполнения попытается закрыть мой экземпляр XMPPConnection, вызвав Session # shutdown () . Насколько я понимаю, мне придется совместно сказать Session закрыть XMPPConnection, получив мьютекс или что-то в этом роде. Правильно?