Merge pull request +6675 from c9/fix-vfs

Improve VFS connect logic robustness
pull/51/head
Lennart Kats 2015-03-23 14:23:21 +01:00
rodzic 504f68ac0a
commit 8f04053d74
2 zmienionych plików z 33 dodań i 22 usunięć

Wyświetl plik

@ -1,7 +1,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
"use strict"; "use strict";
main.consumes = ["Plugin", "auth", "http", "api"]; main.consumes = ["Plugin", "auth", "http", "api", "error_handler"];
main.provides = ["vfs.endpoint"]; main.provides = ["vfs.endpoint"];
return main; return main;
@ -10,6 +10,7 @@ define(function(require, exports, module) {
var auth = imports.auth; var auth = imports.auth;
var http = imports.http; var http = imports.http;
var api = imports.api; var api = imports.api;
var errorHandler = imports.error_handler;
/***** Initialization *****/ /***** Initialization *****/
@ -43,29 +44,32 @@ define(function(require, exports, module) {
var servers; var servers;
var pendingServerReqs = []; var pendingServerReqs = [];
if (options.getServers) initDefaultServers();
options.getServers(initDefaultServers);
else
initDefaultServers();
options.pid = options.pid || 1; options.pid = options.pid || 1;
/***** Methods *****/ /***** Methods *****/
function initDefaultServers(baseURI) { function initDefaultServers(baseURI) {
options.getServers = undefined; if (options.getServers)
var loc = require("url").parse(baseURI || document.baseURI || window.location.href); return options.getServers(init);
var defaultServers = [{ init();
url: loc.protocol + "//" + loc.hostname + (loc.port ? ":" + loc.port : "") + "/vfs",
region: "default" function init() {
}]; options.getServers = undefined;
servers = (urlServers || options.servers || defaultServers).map(function(server) { var loc = require("url").parse(baseURI || document.baseURI || window.location.href);
server.url = server.url.replace(/\/*$/, ""); var defaultServers = [{
return server; url: loc.protocol + "//" + loc.hostname + (loc.port ? ":" + loc.port : "") + "/vfs",
}); region: "default"
pendingServerReqs.forEach(function(cb) { }];
cb(null, servers); servers = (urlServers || options.servers || defaultServers).map(function(server) {
}); server.url = server.url.replace(/\/*$/, "");
return server;
});
pendingServerReqs.forEach(function(cb) {
cb(null, servers);
});
}
} }
function getServers(callback) { function getServers(callback) {
@ -90,10 +94,14 @@ define(function(require, exports, module) {
} }
function getVfsEndpoint(version, callback) { function getVfsEndpoint(version, callback) {
getServers(function(err, servers) { getServers(function(err, _servers) {
if (err) return callback(err); if (err) {
errorHandler.reportError(err);
initDefaultServers();
_servers = servers;
}
getVfsUrl(version, servers, function(err, vfsid, url, region) { getVfsUrl(version, _servers, function(err, vfsid, url, region) {
if (err) return callback(err); if (err) return callback(err);
callback(null, { callback(null, {

Wyświetl plik

@ -7,7 +7,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
"use strict"; "use strict";
main.consumes = ["Plugin", "auth", "vfs.endpoint", "dialog.error", "dialog.alert"]; main.consumes = ["Plugin", "auth", "vfs.endpoint", "dialog.error", "dialog.alert", "error_handler"];
main.provides = ["vfs"]; main.provides = ["vfs"];
return main; return main;
@ -33,6 +33,7 @@ define(function(require, exports, module) {
var showError = errorDialog.show; var showError = errorDialog.show;
var hideError = errorDialog.hide; var hideError = errorDialog.hide;
var showAlert = imports["dialog.alert"].show; var showAlert = imports["dialog.alert"].show;
var errorHandler = imports.error_handler;
var eio = require("engine.io"); var eio = require("engine.io");
var Consumer = require("vfs-socket/consumer").Consumer; var Consumer = require("vfs-socket/consumer").Consumer;
@ -123,6 +124,7 @@ define(function(require, exports, module) {
}); });
function disconnect() { function disconnect() {
pingUrl = null;
reconnect(function(err) { reconnect(function(err) {
if (err && err.fatal) if (err && err.fatal)
return; return;
@ -275,6 +277,7 @@ define(function(require, exports, module) {
consumer.connect(transport, function(err, _vfs) { consumer.connect(transport, function(err, _vfs) {
// TODO // TODO
if (err) { if (err) {
errorHandler.reportError(new Error("Error connecting to VFS", { err: err }));
console.error("error connecting to VFS", err); console.error("error connecting to VFS", err);
return; return;
} }