Browse Source

Fixed a couple of asynchronousy related issues with room joins in various scenarios.

pull/156/head
Simon Eisenmann 11 years ago
parent
commit
3b5a2467a7
  1. 39
      static/js/services/rooms.js

39
static/js/services/rooms.js

@ -22,12 +22,14 @@
"use strict"; "use strict";
define([ define([
'angular', 'angular',
'jquery' 'jquery',
], function(angular, $) { 'underscore'
], function(angular, $, _) {
return ["$window", "$location", "$timeout", "$q", "$route", "$rootScope", "$http", "globalContext", "safeApply", "connector", "api", "restURL", "roompin", "appData", "alertify", "translation", function($window, $location, $timeout, $q, $route, $rootScope, $http, globalContext, safeApply, connector, api, restURL, roompin, appData, alertify, translation) { return ["$window", "$location", "$timeout", "$q", "$route", "$rootScope", "$http", "globalContext", "safeApply", "connector", "api", "restURL", "roompin", "appData", "alertify", "translation", function($window, $location, $timeout, $q, $route, $rootScope, $http, globalContext, safeApply, connector, api, restURL, roompin, appData, alertify, translation) {
var url = restURL.api("rooms"); var url = restURL.api("rooms");
var requestedRoomName = ""; var requestedRoomName = "";
var helloedRoomName = null;
var currentRoom = null; var currentRoom = null;
var joinFailed = function(error) { var joinFailed = function(error) {
@ -70,12 +72,20 @@ define([
// Do nothing while authorizing. // Do nothing while authorizing.
return; return;
} }
if (!connector.connected || !currentRoom || requestedRoomName !== currentRoom.Name) { if (!connector.connected || !currentRoom || requestedRoomName !== currentRoom.Name) {
if (requestedRoomName !== "" || globalContext.Cfg.DefaultRoomEnabled) { if (requestedRoomName !== "" || globalContext.Cfg.DefaultRoomEnabled) {
console.log("Joining room", requestedRoomName);
requestedRoomName = requestedRoomName ? requestedRoomName : ""; requestedRoomName = requestedRoomName ? requestedRoomName : "";
api.sendHello(requestedRoomName, roompin.get(requestedRoomName), setCurrentRoom, joinFailed); if (helloedRoomName !== requestedRoomName) {
console.log("Joining room", requestedRoomName);
helloedRoomName = requestedRoomName;
api.sendHello(requestedRoomName, roompin.get(requestedRoomName), function(room) {
helloedRoomName = null;
setCurrentRoom(room);
}, function(error) {
helloedRoomName = null;
joinFailed(error);
});
}
} else { } else {
console.log("Default room disabled, requesting a random room."); console.log("Default room disabled, requesting a random room.");
setCurrentRoom(null); setCurrentRoom(null);
@ -120,17 +130,19 @@ define([
setCurrentRoom(null); setCurrentRoom(null);
}); });
api.e.on("received.self", function(event, data) {
joinRequestedRoom();
});
api.e.on("received.room", function(event, room) { api.e.on("received.room", function(event, room) {
applyRoomUpdate(room); applyRoomUpdate(room);
}); });
$rootScope.$on("authorization.succeeded", function() { appData.e.on("authorizing", function(event, value) {
// NOTE(lcooper): This will have been skipped earlier, so try again. if (!value) {
joinRequestedRoom(); // NOTE(lcooper): This will have been skipped earlier, so try again.
_.defer(joinRequestedRoom);
}
});
appData.e.on("selfReceived", function(event, data) {
_.defer(joinRequestedRoom);
}); });
$rootScope.$on("$locationChangeSuccess", function(event) { $rootScope.$on("$locationChangeSuccess", function(event) {
@ -141,10 +153,9 @@ define([
} else { } else {
roomName = ""; roomName = "";
} }
requestedRoomName = roomName; requestedRoomName = roomName;
if (connector.connected) { if (connector.connected) {
joinRequestedRoom(); _.defer(joinRequestedRoom);
} else { } else {
$rootScope.$broadcast("rooms.ready"); $rootScope.$broadcast("rooms.ready");
} }

Loading…
Cancel
Save