public void processPacket(Packet packet)
/** listens for Presence packets for manual subscriprion mode */
@Override
public void processPacket(Packet packet) {
// packetlistener
final Presence presence = (Presence) packet;
final String from = presence.getFrom();
if (presence.getType() == Presence.Type.subscribe) {
// check if the user is already subscribed
if (roster.isSubscribed(from)) {
Presence response = new Presence(Presence.Type.subscribed);
response.setTo(from);
con.sendPacket(response);
return;
}
// ask user to accept or deny subscription request
//snip
if (n == JOptionPane.YES_OPTION) {
// send subscription accept packet
Presence response = new Presence(Presence.Type.subscribed);
response.setTo(from);
con.sendPacket(response);
} else {
// send subscription deny packet
Presence response = new Presence(Presence.Type.unsubscribe);
response.setTo(from);
con.sendPacket(response);
}
} else
if (presence.getType() == Presence.Type.unsubscribe) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final RosterEntry entry = roster.getEntry(from);
if (entry != null) {
try {
roster.removeEntry(entry);
}
catch (XMPPException ex) {
Presence unsub = new Presence(Presence.Type
.unsubscribed);
unsub.setTo(from);
con.sendPacket(unsub);
ex.printStackTrace();
}
}
}
});
} else
if (presence.getType() == Presence.Type.subscribed) {
// update roster GUI
} else
if (presence.getType() == Presence.Type.unsubscribed) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final RosterEntry entry = roster.getEntry(from);
if (entry != null) {
try {
roster.removeEntry(entry);
}
catch (XMPPException ex) {
ex.printStackTrace();
}
}
}
});
}
}