I was trying to move from using static rooms to dynamically created ones. The server will create rooms when current ones fill up or none exist. That part seems to be working fine, but adding in avatars once you've joined the room doesn't work anymore.
On the client side, I receive the MAP_LOADED event and then proceed to call IOpenSpaceAPI.createMyAvatar(). After this, nothing happens. The server has no logs saying it received that avatar creation, and the client never gets back an AVATAR_CREATED message.
I assume it has something to do with how I'm creating the room in code vs how it was defined in the XML?
Here is the XML for the room that I was using previously:
Code: Select all
<room>
<name>LobbyRoom</name>
<groupId>default</groupId>
<password></password>
<maxUsers>20</maxUsers>
<maxSpectators>0</maxSpectators>
<isDynamic>false</isDynamic>
<isGame>false</isGame>
<isHidden>false</isHidden>
<autoRemoveMode>DEFAULT</autoRemoveMode>
<permissions>
<flags>PASSWORD_STATE_CHANGE,PUBLIC_MESSAGES</flags>
<maxRoomVariablesAllowed>10</maxRoomVariablesAllowed>
</permissions> <events>USER_ENTER_EVENT,USER_EXIT_EVENT,USER_COUNT_CHANGE_EVENT,USER_VARIABLES_UPDATE_EVENT</events>
<badWordsFilter isActive="false"/>
<roomVariables>
<variable>
<name>_os_mapId</name>
<value>overworld_v1#m2_Stump</value>
<type>STRING</type>
<isPrivate>false</isPrivate>
<isPersistent>false</isPersistent>
<isGlobal>false</isGlobal>
<isHidden>false</isHidden>
</variable>
</roomVariables>
<extension>
<name></name>
<type>JAVA</type>
<file></file>
<propertiesFile></propertiesFile>
<reloadMode>AUTO</reloadMode>
</extension>
</room>
Here is the code I'm using to create the room now:
Code: Select all
private static Room createLobbyRoom(OpenSpaceExtension extension, String roomName)
{
Room newRoom = null;
File mapFile = loadMapFile(extension.getCurrentFolder(), CGSServerConstants.LOBBY_ROOM_MAP);
if (mapFile != null)
{
CreateRoomSettings settings = new CreateRoomSettings();
List<RoomVariable> roomVariables = new LinkedList<RoomVariable>();
roomVariables.add(new SFSRoomVariable(
CGSServerConstants.MAP_VARIABLE_ID,
CGSServerConstants.LOBBY_ROOM_MAP,
false, false, false));
Set<SFSRoomSettings> roomSettings = new HashSet<SFSRoomSettings>();
roomSettings.add(SFSRoomSettings.PASSWORD_STATE_CHANGE);
roomSettings.add(SFSRoomSettings.PUBLIC_MESSAGES);
roomSettings.add(SFSRoomSettings.USER_ENTER_EVENT);
roomSettings.add(SFSRoomSettings.USER_EXIT_EVENT);
roomSettings.add(SFSRoomSettings.USER_COUNT_CHANGE_EVENT);
roomSettings.add(SFSRoomSettings.USER_VARIABLES_UPDATE_EVENT);
settings.setDynamic(true);
settings.setName(roomName);
settings.setRoomSettings(roomSettings);
settings.setRoomVariables(roomVariables);
settings.setGroupId(CGSServerConstants.MAP_GROUP_ID);
settings.setMaxUsers(CGSServerConstants.MAP_MAX_USERS);
settings.setMaxVariablesAllowed(CGSServerConstants.MAP_MAX_VARIABLES);
settings.setGame(false);
settings.setHidden(false);
settings.setMaxSpectators(0);
settings.setUseWordsFilter(false);
settings.setAutoRemoveMode(SFSRoomRemoveMode.WHEN_EMPTY);
newRoom = createRoom(extension, settings);
}
return newRoom;
}
private static File loadMapFile(String dir, String filename)
{
String fullPath = dir +
CGSServerConstants.MAP_DIRECTORY_PREFIX +
filename +
CGSServerConstants.MAP_EXTENSION_POSTFIX;
Logger.logInfo("Loading map file: " + fullPath);
File newMap = new File(fullPath);
try
{
if (!newMap.exists() || !newMap.canRead())
{
Logger.logError("Error loading map file:" +
newMap.getAbsolutePath() +
" exists?" + newMap.exists() +
" canRead?" + newMap.canRead());
newMap = null;
}
}
catch(SecurityException e)
{
Logger.logError("Exception while loading map");
Logger.logFullException(new ExceptionMessageComposer(e, true));
}
return newMap;
}
private static Room createRoom(OpenSpaceExtension extension, CreateRoomSettings settings)
{
Room newRoom = null;
try
{
newRoom = extension.getApi().createRoom(
extension.getParentZone(),
settings,
null
);
}
catch (SFSCreateRoomException e)
{
Logger.logError("Exception in creating room");
Logger.logFullException(new ExceptionMessageComposer(e, true));
}
return newRoom;
}
Client Logs (edited to take out unnecessary data)
Code: Select all
Main.mxml.onInitialize()
CGSIsoEngine.addOpenSpaceListeners()
Adding CGSAvatarManager listeners
Adding CGSMapEditingManager listeners
Adding CGSMapInteractionManager listeners
Adding CGSMapLoadingManager listeners
Main received connect success
Main.mxml.pushStateListener(Switching screens: cgs_mxml_state_main_menu )
CGSOverworldMain: Submitting login name!
CGSServerMessageHandler received SFSEvent.LOGIN for zone=DevOverworldTest
CGSServerMessageHandler.onLoginResponse(Overworld Zone)
CGSOverworldMain: login success
Main.mxml.pushStateListener(Switching screens: cgs_mxml_state_overworld )
CGSIsoEngine.onOpenSpaceInitialized(2.0.4 | 1.0.2)
CGSServerMessageHandler.onRoomJoin(LobbyRoom 1)
CGSMapLoadingManager.onOpenSpaceMapLoaded()
CGSMapLoadingManager.onOpenSpaceMapProgress(44)
CGSMapLoadingManager.onOpenSpaceMapProgress(72)
CGSMapLoadingManager.onOpenSpaceMapProgress(100)
CGSMapLoadingManager.onOpenSpaceMapRendered()
CGSIsoEngine.onMapLoaded()
CGSIsoEngine.loadAvatar()
m_openSpace.createMyAvatar()
Server Logs (edited to take out timestamp etc)
Code: Select all
[OpenSpace] Logging in with: foobar / c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2
Extensions: {devOverworldTest}: Comparing salted passwords for memId: 221 : ibs1la71pk11u741ova1fc8k9r1t40i9j1mhs = ibs1la71pk11u741ova1fc8k9r1t40i9j1mhs
v2.api.SFSApi Login in, { Zone: DevOverworldTest }, ( User Name: foobar, Id: 13, Priv: 0, Sess: 128.208.7.225:21468 )
[OpenSpace] Member foobar: 221
[OpenSpace] Trying get a room: LobbyRoom
[OpenSpace] RoomList: <empty>
[OpenSpace] Creating room of type=LobbyRoom name=LobbyRoom 1
[OpenSpace] Loading map file: extensions/devOverworldTest/data/overworld_v1#m2_Stump.map
v2.api.SFSApi Room created: [ Room: LobbyRoom 1, Id: 24, Group: default, isGame: false ]
[OpenSpace] 'Send avatar to map' command received on behalf of user foobar [13]
[OpenSpace] Map load request received from user foobar [13]
[OpenSpace] Joining user foobar [13] to Room 'LobbyRoom 1' [24]
[OpenSpace] Room 'LobbyRoom 1' [24] joined; now loading associated map 'overworld_v1#m2_Stump
[OpenSpace] Loading assets library for map 'overworld_v1#m2_Stump'
[OpenSpace] Library 'overworld_v1' already available in cache
[OpenSpace] 'extensions/devOverworldTest/data/overworld_v1#m2_Stump.map' map file loaded
[OpenSpace] Map 'overworld_v1#m2_Stump' sent to user foobar [13]