Hello -
I have been developing an app using the framework, and have ran into an issue I am not seeing how to get around. I am probably just missing something.
Our client has a list of conversations, and when the user gets invited into a MUC, it is automatically joined. This is all working fine.
When in the chat itself, you can swipe to the right to reveal the roster, which gives the ability to add people from the roster directly into the chat (via invitation).
The roster view - while rendering - compares the occupants in the current room to the current roster element that is rendering, and if that contact is already present in the room, then disables the ability to add them. This is also tied in with a custom delegate on the roster for other occupants joining the room so that it will update itself to make that contact add button disabled. This all works pretty well so far.
The problem I am seeing now though, is that say Client A is sitting there waiting, and Client B sends an invite to that client, then when comparing the jids in the roster, Client B (and any other people that are current in the room that Client B was in before the invite was sent) shows as not being an occupant in the current room because their 'realJID' is not being read in from the broadcast correctly it seems.
Since we are comparing to the main Roster (id<XMPPUser>) with an occupant (id<XMPPRoomOccupant>), we are taking the 'realJID' from the XMPPRoomOccupant to compare.
I know according to the spec (XEP-0045 - 7.2.3) that the service (we are using vysper with modifications) is to send the presence from the existing occupants to the new occupant - this is done correctly. And the self-presence response shows the '100' status to warn that it will be sending realJID, etc.
The server is set to be non-anonymous (<feature var="muc_nonanonymous">)
We are using an extension of the XMPPRoomHybridStorage classes (we needed to tell difference between certain messages, and store the messageStr to convert back on those, as well as the type).
Examples of some of the presences we are getting to show the status, etc.
Moderator:
<presence xmlns="jabber:client" from="
ff...@chat.weekspm.robweeks.com/Steve Tyler" to="
sty...@weekspm.robweeks.com/400010b1fcf446db9addd4c58e1a9508"><x xmlns="
http://jabber.org/protocol/muc#user"><item jid="
sty...@weekspm.robweeks.com/400010b1fcf446db9addd4c58e1a9508" affiliation="owner" role="moderator"></item><status xmlns="
http://jabber.org/protocol/muc" code="100"></status><status xmlns="
http://jabber.org/protocol/muc" code="110"></status></x></presence>
Invited/Joined (tanya):
<presence xmlns="jabber:client" from="
ff...@chat.weekspm.robweeks.com/tanya" to="
ta...@weekspm.robweeks.com/208484c37dc14643b7bc5e5971bf4e55"><show>away</show><status>Away</status><x xmlns="
http://jabber.org/protocol/muc#user"><item jid="
ta...@weekspm.robweeks.com/208484c37dc14643b7bc5e5971bf4e55" affiliation="none" role="participant"></item><status xmlns="
http://jabber.org/protocol/muc" code="100"></status><status xmlns="
http://jabber.org/protocol/muc" code="110"></status></x></presence>
Thanks for any insight on if I am missing a step to make sure that the room broadcast is working correctly.
--
Robert B. Weeks