Re: Room Creation Threads Overlapping
Posted: 25 Sep 2013, 21:03
Still getting two rooms. This is what my code looks like now:
Code: Select all
@Instantiation(Instantiation.InstantiationMode.SINGLE_INSTANCE)
public class EnterSessionRoomRequestHandler extends BaseClientRequestHandler {
public ZoneExtension parentEx;
@Override
public void handleClientRequest(User user, ISFSObject params) {
synchronized (this) {
parentEx = (ZoneExtension) getParentExtension();
Integer sessionId = params.getInt("sessionId");
trace("EnterSessionRoomRequestHandler()");
// validate user/session pair (again, just in case of clientside bug)
try {
parentEx.isSessionIdValid(user.getName(), sessionId);
} catch (SFSExtensionException e) {
e.printStackTrace();
}
UserVariable userVariable = new SFSRoomVariable("sessionId", sessionId);
userVariable.setHidden(true);
try {
user.setVariable(userVariable);
} catch (SFSVariableException e) {
e.printStackTrace();
}
Room room = parentEx.getParentZone().getRoomByName("room"+sessionId.toString());
if(room == null) {
CreateRoomSettings roomSettings = new CreateRoomSettings();
roomSettings.setName("room"+sessionId.toString());
RoomVariable sessionIdVariable = new SFSRoomVariable("sessionId", sessionId);
sessionIdVariable.setHidden(false);
RoomVariable debugVariable = new SFSRoomVariable("debug", true);
debugVariable.setHidden(false);
List<RoomVariable> roomVariables = new ArrayList<RoomVariable>();
roomVariables.add(sessionIdVariable);
roomVariables.add(debugVariable);
roomSettings.setRoomVariables(roomVariables);
CreateRoomSettings.RoomExtensionSettings roomExtensionSettings = new CreateRoomSettings.RoomExtensionSettings("Room", ".roomExtension.RoomExtension");
roomSettings.setMaxVariablesAllowed(16);
roomSettings.setExtension(roomExtensionSettings);
try {
getApi().leaveRoom(user, parentEx.getParentZone().getRoomByName("lobby"), false, false);
getApi().createRoom(parentEx.getParentZone(), roomSettings, user, true, null, true, true);
} catch (SFSCreateRoomException e) {
e.printStackTrace();
}
} else if (room!=null) {
try {
getApi().leaveRoom(user, parentEx.getParentZone().getRoomByName("lobby"), false, false);
getApi().joinRoom(user, room, null, false, null, true, true);
} catch (SFSJoinRoomException e) {
e.printStackTrace();
}
}
trace("EnterSessionRoomRequestHandler(): Finish");
}
}
}