Hi everyone.
Short question: Is there a way to resend the roster to a user ?
Reason: I wrote a plugin to rebuild our companystructure in jivemessenger aka wildfire aka openfire.
The plugin is triggerd by an rpc, it moves user between shared groups and eventually creates an new additional shared group.
The problem is that sometimes PSI doesn’'t get the right roster and it will only change after a complete logout/login :/.
Edit: Still using Wildfire 3.1.1
Ok, I read and played a little bit around with the iq-packets and found some older threads but no answer.
The current state is that I can create shared groups and add user but no roster updates are send to the client (checked it with the psi xml-console).
So is there a way to force a roster update without a client requesting jabber:iq:roster ?
Finn
btw, in some iq-handler classes there are references like “http://www.jivesoftware.org/protocol/sharedgroup”, maybe this should be updated
Yeah, found it.
When you dig deep enough in the (wild|open|camping)fire classes everything can be found.
So the question is answered and I will add a little code example when I’'m done here. Maybe it can be usefull for someone
Wow, Finn, I have exactly the same task. It is sad I didn’‘t read your messages earlier. I’'ve been trying to find answers in this thread http://www.igniterealtime.org/forum/thread.jspa?threadID=25035&tstart=0. Can you please share your findings on possible solution?
Thanks,
Eugene.
Hi Eugene,
you can do this within two steps.
First you have to resend the roster by using something like this
IQ returnPacket = null;
Roster cachedRoster = pUser.getRoster ();
returnPacket = cachedRoster.getReset();
returnPacket.setType (IQ.Type.set);
returnPacket.setTo (this.getJid (pUser.getUsername ()));
returnPacket.setID (String.valueOf (tmSharedGroups.random.nextInt (1000) + “-” + tmSharedGroups.sequence++ ));
this.deliverer.deliver(returnPacket);
In the second step it was usefull to broadcast the presences of the user within the roster.
This can be done with something like this
/**
*/
private void broadcastPresence (User pUser) {
this.debug (“Called broadcastPresence”);
this.debug ("Argument pUser -> " + pUser.toString ());
Roster roster = null;
this.debug (“Retrieving roster”);
roster = pUser.getRoster ();
this.debug (“Broadcasting user presence”);
roster.broadcastPresence(this.presenceManager.getPresence (pUser));
} // END -> private void broadcastPresence (String pUserName)
I hope this is what you need
Hi Finn,
Thanks, I got your approach. I will try it.
Eugene.