Code: Select all
public void onSearchSuccess(User player1, User player2) {
SmartFoxServer.getInstance().getAPIManager().getSFSApi().joinRoom(player1, gameRoom, null, false, null, false, true);
SmartFoxServer.getInstance().getAPIManager().getSFSApi().joinRoom(player2, gameRoom, null, false, null, false, true);
}
Code: Select all
public class JoinRoomHandler extends BaseServerEventHandler {
public void handleServerEvent(ISFSEvent event) throws SFSException {
if (event.getType() == SFSEventType.USER_JOIN_ROOM) {
trace("Players List Size: " + room.getPlayersList().size());
}
}
}
However.....
When I try with synchronization things started working as expected... Following snippet works. But using synchronization as below recommended ?
Code: Select all
public void handleServerEvent(ISFSEvent event) throws SFSException {
if (event.getType() == SFSEventType.USER_JOIN_ROOM) {
Room room = (Room) event.getParameter(SFSEventParam.ROOM);
RoomVariable roomVariable = room.getVariable("game_state");
trace("game_state: " + roomVariable.getStringValue());
trace("Players List Size: " + room.getPlayersList().size());
if (room.isGame()
&& room.getPlayersList().size() == 2
&& GameState.NOT_STARTED.getName().equals(roomVariable.getStringValue())) {
GameExtension gameExtension = (GameExtension) room.getExtension();
gameExtension.sendSearchResponse();
}
}
}
Code: Select all
public synchronized void sendSearchResponse() {
trace("*** sendSearchResponse *** : " + getGameState());
if (getGameState() == GameState.NOT_STARTED) {
//update room variable state to SEARCH_SUCCESS
List<User> players = getParentRoom().getPlayersList();
ISFSObject param = new SFSObject();
param.putBool("count_down", true);
ResponseHandler.sendResponse(Command.SEARCH_SUCCESS, param, players,
getParentRoom(), true);
startTimer(players);
setGameState(GameState.SEARCH_SUCCESS);
}
}