AnsweredAssumed Answered

MUC UserStatusListener no incoming ownershipGranted Event

Question asked by Dennis on Aug 17, 2015
Latest reply on Aug 17, 2015 by Flow

Hi,

 

Server: openfire 3.10.2

Client: Smack 4.1.3

 

The UserStatusListener is not working. I expect the call of the method ownershipGranted().

 

Here is an code example:

 

@Test
public void testGroupChat() {

  final String freddy = "freddy";
  final String dennisRoom = "dennisroom--007@" + GROUP_CHAT_SERVICE;
  final XMPPTCPConnection xmppConnection2 = connect();

  final AccountManager accountManager2 = createAccountManager(xmppConnection2);
  try {

  accountManager2.createAccount(freddy, freddy);

  xmppConnection2.login(freddy, freddy, RESOURCE);
  final MultiUserChatManager mucManager2 = MultiUserChatManager.getInstanceFor(xmppConnection2);
  final MultiUserChat multiUserChat2 = mucManager2.getMultiUserChat(dennisRoom);

  // user1 create chat
   final MultiUserChatManager mucManager =

  MultiUserChatManager.getInstanceFor(xmppConnection);
  final MultiUserChat multiUserChat = mucManager.getMultiUserChat(dennisRoom);
   // test user create a room.
   multiUserChat.create(USER_NAME);
  final Form answerForm = multiUserChat.getConfigurationForm().createAnswerForm();
   //answerForm.setAnswer("x-muc#roomconfig_reservednick", true);
  //answerForm.setAnswer("muc#roomconfig_persistentroom", true);
   multiUserChat.sendConfigurationForm(answerForm);

   multiUserChat.changeSubject("Cooler Raum mit guter Unterhaltung...");

  final String freddyJid = this.createJID(freddy);

  // join room.
   multiUserChat2.join(freddy);

 

// TODO not working
   multiUserChat2.addUserStatusListener(new DefaultUserStatusListener() {

 

   @Override
   public void ownershipGranted() {

   // TODO no incoming event...
   System.out.println("ownership granted");
   }

  });

   // change owner.
  // send event.

// TODO no incoming event to multiUserChat2
   multiUserChat.grantOwnership(freddyJid);

   Thread.sleep(120000);


   } catch (Exception e) {

   fail(e.getMessage());
   } finally {

   try {

  accountManager2.deleteAccount();
   } catch (Exception e) {

   fail(e.getMessage());
   }

  xmppConnection2.disconnect();
   }

}

 

 

 

I think the problem is in the MultiUserChat class. Because it take the same presence packets and compare the same affiliation status:

 

// Create a listener for all presence updates.
presenceListener = new StanzaListener() {

   public void processPacket(Stanza packet) {

  Presence presence = (Presence) packet;
   String from = presence.getFrom();
   String myRoomJID = MultiUserChat.this.room + "/" + nickname;
  boolean isUserStatusModification = presence.getFrom().equals(myRoomJID);
  switch (presence.getType()) {

   case available:

  Presence oldPresence = occupantsMap.put(from, presence);
  if (oldPresence != null) {

   // Get the previous occupant's affiliation & role
   MUCUser mucExtension = MUCUser.from(packet);
  MUCAffiliation oldAffiliation = mucExtension.getItem().getAffiliation();
   MUCRole oldRole = mucExtension.getItem().getRole();
   // Get the new occupant's affiliation & role
   mucExtension = MUCUser.from(packet);
  MUCAffiliation newAffiliation = mucExtension.getItem().getAffiliation();
   MUCRole newRole = mucExtension.getItem().getRole();
   // Fire role modification events
   checkRoleModifications(oldRole, newRole, isUserStatusModification, from);
   // Fire affiliation modification events
   checkAffiliationModifications(

  oldAffiliation,
   newAffiliation,
   isUserStatusModification,
   from);
   }

   else {

   // A new occupant has joined the room
   if (!isUserStatusModification) {

   for (ParticipantStatusListener listener : participantStatusListeners) {

  listener.joined(from);
   }

  }

  }

   break;

Outcomes