Create list of joined rooms?

Post here your questions about SFS2X. Here we discuss all server-side matters. For client API questions see the dedicated forums.

Moderators: Lapo, Bax

Rashomon
Posts: 72
Joined: 11 Aug 2010, 19:48

Create list of joined rooms?

Postby Rashomon » 26 Jun 2012, 02:31

What's the proper syntax for getting a list of joined rooms and then get the room data (name, userList, etc)?

I'm trying to pull room info in my USER_DISCONNECT handler of my extension. One of the event parameters is JOINED_ROOMS.

I can see the list of joined rooms via this code:

Code: Select all

trace("    JOINED_ROOMS: " + event.getParameter(SFSEventParam.JOINED_ROOMS));

Output:
JOINED_ROOMS: [[ Room: Backstage, Id: 4, Group: default, isGame: false ]]


I'm not very good at Java, though, so I'm having trouble creating a list of the rooms.

Here's what I'm trying:

Code: Select all

List<Room> rooms = (List<Room>)event.getParameter( SFSEventParam.JOINED_ROOMS );

The precompiler (Eclipse) keeps telling me to remove the type arguments, which leaves me with this:

Code: Select all

List rooms = (List)event.getParameter( SFSEventParam.JOINED_ROOMS );

When I run, I get the following server error messages:

Exception: java.lang.ClassCastException
Message: java.util.ArrayList cannot be cast to java.awt.List
Description: Error during event handling: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.awt.List, Listener: { Ext: MyApp, Type: JAVA, Lev: ZONE, { Zone: MyApp }, {} }


What am I doing wrong?
User avatar
rjgtav
Posts: 2813
Joined: 19 Apr 2009, 11:31
Location: Lisbon, Portugal

Re: Create list of joined rooms?

Postby rjgtav » 26 Jun 2012, 08:41

If you use ArrayList and import java.util.ArrayList, doesn''t it work, despite of eclipse errors?
Skills: SFS Pro, SFS2X, AS2.0/AS3.0, Java, HTML5/CSS3/JS, C#
Portfolio: https://rjgtav.wordpress.com/
SFS Tutorials: http://sfs-tutor.blogspot.com/ - Discontinued. Some examples may be bugged.
Rashomon
Posts: 72
Joined: 11 Aug 2010, 19:48

Re: Create list of joined rooms?

Postby Rashomon » 26 Jun 2012, 18:40

Yes. I've imported ArrayList. When I try to use it, though, Eclipse gives the error:
The type List is not generic; it cannot be parameterized with arguments <ArrayList>


Here's the code for my DisconnectEventHandler:

Code: Select all

package com.mydomain.MyGame;

import java.awt.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

import com.smartfoxserver.v2.core.ISFSEvent;
import com.smartfoxserver.v2.core.SFSEventParam;
import com.smartfoxserver.v2.entities.Room;
import com.smartfoxserver.v2.entities.User;
import com.smartfoxserver.v2.exceptions.SFSException;
import com.smartfoxserver.v2.extensions.BaseServerEventHandler;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;


public class DisconnectEventHandler extends BaseServerEventHandler
{
    @Override
    public void handleServerEvent(ISFSEvent event) throws SFSException
    {
      List rooms = (List)event.getParameter( SFSEventParam.JOINED_ROOMS );
    }
}


...and the output:
Exception: java.lang.ClassCastException
Message: java.util.ArrayList cannot be cast to java.awt.List
Description: Error during event handling: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.awt.List, Listener: { Ext: MyGame, Type: JAVA, Lev: ZONE, { Zone: MyGame }, {} }


I'm using Eclipse Helios with "Eclipse IDE for Java EE Developers" installed (version 1.3.0).
User avatar
rjgtav
Posts: 2813
Joined: 19 Apr 2009, 11:31
Location: Lisbon, Portugal

Re: Create list of joined rooms?

Postby rjgtav » 26 Jun 2012, 18:53

Try:
ArrayList<Room> rooms = (ArrayList<Room>) event.getParameter( SFSEventParam.JOINED_ROOMS );
Skills: SFS Pro, SFS2X, AS2.0/AS3.0, Java, HTML5/CSS3/JS, C#
Portfolio: https://rjgtav.wordpress.com/
SFS Tutorials: http://sfs-tutor.blogspot.com/ - Discontinued. Some examples may be bugged.
Rashomon
Posts: 72
Joined: 11 Aug 2010, 19:48

Re: Create list of joined rooms?

Postby Rashomon » 26 Jun 2012, 20:25

Yes! That worked! Thanks!

Here's the final code, plus some ArrayList processing. Maybe it will help someone else.

Code: Select all

public class DisconnectEventHandler extends BaseServerEventHandler
{
    @Override
    public void handleServerEvent(ISFSEvent event) throws SFSException
    {
       trace(">>> DisconnectEventHandler firing! <<<");
       ArrayList<Room> roomList = (ArrayList<Room>)event.getParameter( SFSEventParam.JOINED_ROOMS );
       trace("     rooms: " + roomList);
       trace("     room.size: " + roomList.size());
       for(int i= 0; i < roomList.size(); i++) {
          Room room = roomList.get(i);
          trace("     room("+i+").name: " + room.getName());
          trace("     room("+i+").userList: " + room.getUserList());
       }
    }
}

Return to “SFS2X Questions”

Who is online

Users browsing this forum: No registered users and 59 guests