I'm having trouble pulling the correct value of a server-owned roomVar if it is upsted AFTER I join the zone.
Here's what I mean...
When a game starts, I call my server-side extension which sets an "isStarted" roomVar. The roomVar is server-owned. Here's my code:
Code: Select all
function startGame()
{
var room = _server.getCurrentRoom()
var rVars = [];
rVars.push( {name:"isStarted", val:"true", priv:false, persistent:true} );
_server.setRoomVariables(room, null, rVars);
var res = {};
res._cmd = "start";
_server.sendResponse(res, currentRoomId, null, users);
}
Back on the client, I get all of the rooms in the zone, and exclude any where "isStarted == 'true'"... like so:
Code: Select all
function onQuickJoin( evt:MouseEvent ):void
{
var gameToJoin:String = "";
gameRoomArray = smartFox.getAllRooms();
for (var r:String in gameRoomArray)
{
var gameRoom:Room = gameRoomArray[r]
trace("Room: " + gameRoom.getName())
if ((gameRoom.getName() != "Lobby")&&(gameRoom.getVariable("isStarted") != "true")) {
trace("Game name: " + gameRoom.getName() + ", Id: " + gameRoom.getId() + ", isStarted: " + gameRoom.getVariable("isStarted") as String);
gameToJoin = gameRoom.getName();
break;
}
}
if (gameToJoin != "") {
smartFox.joinRoom( gameRoom.getName(), "" );
} else {
// Create waiting room, which then creates new game room and joins player
trace("Create new game and join: g" + smartFox.myUserId);
var newGameRoom:Object = new Object();
newGameRoom.name = "game" + smartFox.myUserId;
//newGameRoom.password = pwd
newGameRoom.maxUsers = 3
newGameRoom.maxSpectators = 0
newGameRoom.isGame = true
newGameRoom.isTemp = true
var xt:Object = {}
xt.name = "myXtName"
xt.script = "myGameRoom.as"
newGameRoom.extension = xt
smartFox.createRoom( newGameRoom )
}
}
I added a "showGames" button, which traces the room info:
Code: Select all
function onShowRooms( evt:MouseEvent ):void
{
trace("-----------");
trace("onShowRooms");
gameRoomArray = smartFox.getAllRooms();
trace(gameRoomArray.length + " rooms found");
for (var r:String in gameRoomArray)
{
var gameRoom:Room = gameRoomArray[r]
trace("Room: " + gameRoom.getName())
if (gameRoom.getName() != "Lobby") {
trace("Name: " + gameRoom.getName() + ", Id: " + gameRoom.getId() + ", isStarted: " + gameRoom.getVariable("isStarted") as String);
}
}
}
When a game is in progress, I am able to pull the correct value of isStarted for that room, but ONLY if I join the zone (in this case, the lobby) AFTER the game has started (and the isStarted flag has been set).
However, If I'm already in the zone/lobby BEFORE the game starts, then isStarted shows as "undefined".
My understanding is that SFS sends an updated room list whenever you join a room. I'm trying to manually pull in a fresh copy of the room list by using smartFox.getAllRooms(). Am I using this incorrectly, or is there some other reason why this isn't working?