Index: src/org/igniterealtime/xiff/events/RoomEvent.as
===================================================================
--- src/org/igniterealtime/xiff/events/RoomEvent.as (revision 11267)
+++ src/org/igniterealtime/xiff/events/RoomEvent.as (working copy)
@@ -66,6 +66,8 @@
public static const USER_JOIN:String = "userJoin";
public static const USER_KICKED:String = "userKicked";
+
+ public static const USER_PRESENCE_CHANGE:String = "userPresenceChange";
private var _data:*;
Index: src/org/igniterealtime/xiff/conference/Room.as
===================================================================
--- src/org/igniterealtime/xiff/conference/Room.as (revision 11267)
+++ src/org/igniterealtime/xiff/conference/Room.as (working copy)
@@ -151,6 +151,12 @@
*/
[Event( name="userBanned",type="org.igniterealtime.xiff.events.RoomEvent" )]
/**
+ * Dispatched when a user's presence changes.
+ *
+ * @eventType org.igniterealtime.xiff.events.RoomEvent.USER_PRESENCE_CHANGE
+ */
+ [Event( name="userPresenceChange",type="org.igniterealtime.xiff.events.RoomEvent" )]
+ /**
* Dispatched when the user's preferred nickname already exists in the room. The
* RoomEvent
will contain an attribute nickname
with the nickname
* already existing in the room.
@@ -982,6 +988,12 @@
occupant.affiliation = item.affiliation;
occupant.role = item.role;
occupant.show = aPresence.show;
+
+ // Notify listeners that a user's presence has been updated
+ roomEvent = new RoomEvent( RoomEvent.USER_PRESENCE_CHANGE );
+ roomEvent.nickname = userNickname;
+ roomEvent.data = aPresence;
+ dispatchEvent( roomEvent );
}
}
else if ( aPresence.type != Presence.UNAVAILABLE_TYPE )