Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

Custom Roster List

phaseblue
Level 3
Level 3

Hello all,

I'm trying to make a custom roster list that does not show the room owner

on the list.

I have a user queue with an "Accepted" list.  The room owner can select a

name from the list and click a "Remove" button to kick the user out.  If I

use the standard dataProvider="{cSession.userManager.userCollection}"

then the owner is able to kick himself out of the room.  Obviously, I don't

want to allow this as the owner might inadvertently kick himself out.

The only way I can think of how to resolve this is to bind the roster's

dataProvider to an "accepted" arrayCollection and update it every time

someone is allowed into the room or kicked out.  I would also need to

respond to sync events where a user closes his/her connection with the

room.  This seems like a bit of work just to keep track of users who are

actually in the room.  Does anyone know of an easier way to do this?

Thanks,

Matt

1 Reply
phaseblue
Level 3
Level 3

I might have found a solution to this!

I created 3 event listeners for users entering, leaving, and being kicked out of a room:

_userManager.addEventListener(UserEvent.USER_CREATE, onUserCreate);

_userManager.addEventListener(UserEvent.USER_REMOVE, onUserRemove);

_userManager.addEventListener(UserEvent.USER_BOOTED, onUserBooted);

I then added the 3 handlers for the events:

privatefunction onUserCreate(p_evt:UserEvent):void{
updateRosterList();
}

private function onUserRemove(p_evt:UserEvent):void

{

updateRosterList();

}

private function onUserBooted(p_evt:UserEvent):void

{

updateRosterList();
}

Then, I created the functio which updates the "acceptedList":

protected function updateRosterList():void

{

var rosterListArray:ArrayList = new ArrayList();
for(var i:int=0; i<cSession.userManager.userCollection.length; i++)
{
     
var
uDesc:UserDescriptor=_userManager.userCollection[i];
if (uDesc.userID != _userManager.myUserID)
{
rosterListArray.addItem({label:uDesc.displayName, descriptor:uDesc});
}

}
rosterList.dataProvider = rosterListArray;
}

I don't know if this is the most elegant solution, but it does work!

Any feedback would be greatly appreciated!

Matt