This Question is Not Answered

1 "correct" answer available (10 pts) 1 "helpful" answer available (5 pts)
4 Replies Last post: May 21, 2008 9:45 AM by Marcelo Zabalet  
Marcelo Zabalet Bronze 19 posts since
Apr 29, 2008
Currently Being Moderated

May 15, 2008 8:27 AM

Remove someone from my roster without removimg myself from his roster, is it possible?

 

This is the example, I have to pals, Scooby and Shaggy. Scooby is in Shaggy's roster and Shaggy is in Scooby's roster too. When Shaggy asks to remove Scooby from his roster, I try with this code:

    ....

    RosterEntry entry = roster.getEntry(userName);

    connection.removeEntry(entry)

    ....

 

 

But Scooby lost Shaggy's entry too, and Shaggy desapear from his roster.

Is it possible from smack to change the subscription type from "both" to "from"?

 

 

Sabine Dinis Blochberger Gold 285 posts since
Oct 21, 2005

You can do this on Scooby's side - when he receives the unsubscribed packet, you can ask the user if they want to unsubscribe too, or do an action by default (which usually is to unsubscribe aswell).

Sabine Dinis Blochberger Gold 285 posts since
Oct 21, 2005

If you set your Roster.SubscriptionMode to manual, that means your application has to react to subscription Packets in

 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)) {
             & nbsp;  Presence response = new Presence(Presence.Type.subscribed);
             & nbsp;  response.setTo(from);
             & nbsp;  con.sendPacket(response);
             & nbsp;  return;
            }
            
            // ask user to accept or deny subscription request 
            //snip

            if (n == JOptionPane.YES_OPTION) {
             & nbsp;  // send subscription accept packet
             & nbsp;  Presence response = new Presence(Presence.Type.subscribed);
             & nbsp;  response.setTo(from);
             & nbsp;  con.sendPacket(response);
            } else {
             & nbsp;  // send subscription deny packet
             & nbsp;  Presence response = new Presence(Presence.Type.unsubscribe);
             & nbsp;  response.setTo(from);
             & nbsp;  con.sendPacket(response);
            }
        } else 
            if (presence.getType() == Presence.Type.unsubscribe) {
             & nbsp;  SwingUtilities.invokeLater(new Runnable() {
             & nbsp;  @Override
             & nbsp;      public void run() {
             & nbsp;          final RosterEntry entry = roster.getEntry(from);
             & nbsp;          if (entry != null) {
             & nbsp;            &nb sp; try {
             & nbsp;            &nb sp;     roster.removeEntry(entry);
             & nbsp;            &nb sp; }
             & nbsp;            &nb sp; catch (XMPPException ex) {
             & nbsp;            &nb sp;     Presence unsub = new Presence(Presence.Type
             & nbsp;            &nb sp;             .unsubscribed);
             & nbsp;            &nb sp;     unsub.setTo(from);
             & nbsp;            &nb sp;     con.sendPacket(unsub);
             & nbsp;            &nb sp;     ex.printStackTrace();
             & nbsp;            &nb sp; }
             & nbsp;          }
             & nbsp;      }
             & nbsp;  });
            } else 
             & nbsp;  if (presence.getType() == Presence.Type.subscribed) {
             & nbsp;      // update roster GUI
             & nbsp;  } else 
             & nbsp;      if (presence.getType() == Presence.Type.unsubscribed) {
             & nbsp;          SwingUtilities.invokeLater(new Runnable() {
             & nbsp;            &nb sp; @Override
             & nbsp;            &nb sp; public void run() {
             & nbsp;            &nb sp;     final RosterEntry entry = roster.getEntry(from);
             & nbsp;            &nb sp;     if (entry != null) {
             & nbsp;            &nb sp;         try {
             & nbsp;            &nb sp;             roster.removeEntry(entry);
             & nbsp;            &nb sp;         }
             & nbsp;            &nb sp;         catch (XMPPException ex) {
             & nbsp;            &nb sp;             ex.printStackTrace();
             & nbsp;            &nb sp;         }
             & nbsp;            &nb sp;     }
             & nbsp;            &nb sp; }
             & nbsp;          });
             & nbsp;      }
    }

 

More Like This

  • Retrieving data ...