diff --git a/www/common/outer/serviceworker.js b/www/common/outer/serviceworker.js index 68afb4f32..28f4f0a50 100644 --- a/www/common/outer/serviceworker.js +++ b/www/common/outer/serviceworker.js @@ -19,127 +19,130 @@ var debug = function (msg) { console.log(msg); }; var init = function (client, cb) { debug('SW INIT'); - require([ - '/common/requireconfig.js' - ], function (RequireConfig) { - require.config(RequireConfig()); + require(['/api/config?cb=' + (+new Date()).toString(16)], function (ApiConfig) { + if (ApiConfig.requireConf) { require.config(ApiConfig.requireConf); } require([ - '/common/common-util.js', - '/common/outer/worker-channel.js', - '/common/outer/store-rpc.js' - ], function (Util, Channel, SRpc) { - debug('SW Required ressources loaded'); - var msgEv = Util.mkEvent(); - - if (!self.Rpc) { - self.Rpc = SRpc(); - } - var Rpc = self.Rpc; - - var postToClient = function (data) { - postMsg(client, data); - }; - Channel.create(msgEv, postToClient, function (chan) { - debug('SW Channel created'); - - var clientId = client.id; - self.tabs[clientId].chan = chan; - Object.keys(Rpc.queries).forEach(function (q) { - if (q === 'CONNECT') { return; } - if (q === 'JOIN_PAD') { return; } - if (q === 'SEND_PAD_MSG') { return; } - chan.on(q, function (data, cb) { - try { - Rpc.queries[q](clientId, data, cb); - } catch (e) { - console.error('Error in webworker when executing query ' + q); - console.error(e); - console.log(data); - } - if (q === "DISCONNECT") { - console.log('Deleting existing store!'); - delete self.Rpc; - delete self.store; - } + '/common/requireconfig.js' + ], function (RequireConfig) { + require.config(RequireConfig()); + require([ + '/common/common-util.js', + '/common/outer/worker-channel.js', + '/common/outer/store-rpc.js' + ], function (Util, Channel, SRpc) { + debug('SW Required ressources loaded'); + var msgEv = Util.mkEvent(); + + if (!self.Rpc) { + self.Rpc = SRpc(); + } + var Rpc = self.Rpc; + + var postToClient = function (data) { + postMsg(client, data); + }; + Channel.create(msgEv, postToClient, function (chan) { + debug('SW Channel created'); + + var clientId = client.id; + self.tabs[clientId].chan = chan; + Object.keys(Rpc.queries).forEach(function (q) { + if (q === 'CONNECT') { return; } + if (q === 'JOIN_PAD') { return; } + if (q === 'SEND_PAD_MSG') { return; } + chan.on(q, function (data, cb) { + try { + Rpc.queries[q](clientId, data, cb); + } catch (e) { + console.error('Error in webworker when executing query ' + q); + console.error(e); + console.log(data); + } + if (q === "DISCONNECT") { + console.log('Deleting existing store!'); + delete self.Rpc; + delete self.store; + } + }); }); - }); - chan.on('CONNECT', function (cfg, cb) { - debug('SW Connect callback'); - if (self.store) { - debug('Store already exists!'); - if (cfg.driveEvents) { - Rpc._subscribeToDrive(clientId); - } - if (cfg.messenger) { - Rpc._subscribeToMessenger(clientId); + chan.on('CONNECT', function (cfg, cb) { + debug('SW Connect callback'); + if (self.store) { + debug('Store already exists!'); + if (cfg.driveEvents) { + Rpc._subscribeToDrive(clientId); + } + if (cfg.messenger) { + Rpc._subscribeToMessenger(clientId); + } + return void cb(self.store); } - return void cb(self.store); - } - - debug('Loading new async store'); - // One-time initialization (init async-store) - cfg.query = function (cId, cmd, data, cb) { - cb = cb || function () {}; - self.tabs[cId].chan.query(cmd, data, function (err, data2) { - if (err) { return void cb({error: err}); } - cb(data2); - }); - }; - cfg.broadcast = function (excludes, cmd, data, cb) { - cb = cb || function () {}; - Object.keys(self.tabs).forEach(function (cId) { - if (excludes.indexOf(cId) !== -1) { return; } + + debug('Loading new async store'); + // One-time initialization (init async-store) + cfg.query = function (cId, cmd, data, cb) { + cb = cb || function () {}; self.tabs[cId].chan.query(cmd, data, function (err, data2) { if (err) { return void cb({error: err}); } cb(data2); }); + }; + cfg.broadcast = function (excludes, cmd, data, cb) { + cb = cb || function () {}; + Object.keys(self.tabs).forEach(function (cId) { + if (excludes.indexOf(cId) !== -1) { return; } + self.tabs[cId].chan.query(cmd, data, function (err, data2) { + if (err) { return void cb({error: err}); } + cb(data2); + }); + }); + }; + Rpc.queries['CONNECT'](clientId, cfg, function (data) { + if (cfg.driveEvents) { + Rpc._subscribeToDrive(clientId); + } + if (cfg.messenger) { + Rpc._subscribeToMessenger(clientId); + } + if (data && data.state === "ALREADY_INIT") { + return void cb(data.returned); + } + self.store = data; + cb(data); }); - }; - Rpc.queries['CONNECT'](clientId, cfg, function (data) { - if (cfg.driveEvents) { - Rpc._subscribeToDrive(clientId); - } - if (cfg.messenger) { - Rpc._subscribeToMessenger(clientId); + }); + chan.on('JOIN_PAD', function (data, cb) { + self.tabs[clientId].channelId = data.channel; + try { + Rpc.queries['JOIN_PAD'](clientId, data, cb); + } catch (e) { + console.error('Error in webworker when executing query JOIN_PAD'); + console.error(e); + console.log(data); } - if (data && data.state === "ALREADY_INIT") { - return void cb(data.returned); + }); + chan.on('SEND_PAD_MSG', function (msg, cb) { + var data = { + msg: msg, + channel: self.tabs[clientId].channelId + }; + try { + Rpc.queries['SEND_PAD_MSG'](clientId, data, cb); + } catch (e) { + console.error('Error in webworker when executing query SEND_PAD_MSG'); + console.error(e); + console.log(data); } - self.store = data; - cb(data); }); - }); - chan.on('JOIN_PAD', function (data, cb) { - self.tabs[clientId].channelId = data.channel; - try { - Rpc.queries['JOIN_PAD'](clientId, data, cb); - } catch (e) { - console.error('Error in webworker when executing query JOIN_PAD'); - console.error(e); - console.log(data); - } - }); - chan.on('SEND_PAD_MSG', function (msg, cb) { - var data = { - msg: msg, - channel: self.tabs[clientId].channelId - }; - try { - Rpc.queries['SEND_PAD_MSG'](clientId, data, cb); - } catch (e) { - console.error('Error in webworker when executing query SEND_PAD_MSG'); - console.error(e); - console.log(data); - } - }); - cb(); - }, true); - - self.tabs[client.id].msgEv = msgEv; - - self.tabs[client.id].close = function () { - Rpc._removeClient(client.id); - }; + cb(); + }, true); + + self.tabs[client.id].msgEv = msgEv; + + self.tabs[client.id].close = function () { + Rpc._removeClient(client.id); + }; + }); }); }); }; diff --git a/www/common/outer/sharedworker.js b/www/common/outer/sharedworker.js index 97686da24..3d946070d 100644 --- a/www/common/outer/sharedworker.js +++ b/www/common/outer/sharedworker.js @@ -19,128 +19,131 @@ var debug = function (msg) { console.log(msg); }; var init = function (client, cb) { debug('SharedW INIT'); - require([ - '/common/requireconfig.js' - ], function (RequireConfig) { - require.config(RequireConfig()); + require(['/api/config?cb=' + (+new Date()).toString(16)], function (ApiConfig) { + if (ApiConfig.requireConf) { require.config(ApiConfig.requireConf); } require([ - '/common/common-util.js', - '/common/outer/worker-channel.js', - '/common/outer/store-rpc.js' - ], function (Util, Channel, SRpc) { - debug('SharedW Required ressources loaded'); - var msgEv = Util.mkEvent(); + '/common/requireconfig.js' + ], function (RequireConfig) { + require.config(RequireConfig()); + require([ + '/common/common-util.js', + '/common/outer/worker-channel.js', + '/common/outer/store-rpc.js' + ], function (Util, Channel, SRpc) { + debug('SharedW Required ressources loaded'); + var msgEv = Util.mkEvent(); - if (!self.Rpc) { - self.Rpc = SRpc(); - } - var Rpc = self.Rpc; + if (!self.Rpc) { + self.Rpc = SRpc(); + } + var Rpc = self.Rpc; - var postToClient = function (data) { - postMsg(client, data); - }; - Channel.create(msgEv, postToClient, function (chan) { - debug('SharedW Channel created'); + var postToClient = function (data) { + postMsg(client, data); + }; + Channel.create(msgEv, postToClient, function (chan) { + debug('SharedW Channel created'); - var clientId = client.id; - client.chan = chan; - Object.keys(Rpc.queries).forEach(function (q) { - if (q === 'CONNECT') { return; } - if (q === 'JOIN_PAD') { return; } - if (q === 'SEND_PAD_MSG') { return; } - chan.on(q, function (data, cb) { - try { - Rpc.queries[q](clientId, data, cb); - } catch (e) { - console.error('Error in webworker when executing query ' + q); - console.error(e); - console.log(data); - } - if (q === "DISCONNECT") { - console.log('Deleting existing store!'); - delete self.Rpc; - delete self.store; - } + var clientId = client.id; + client.chan = chan; + Object.keys(Rpc.queries).forEach(function (q) { + if (q === 'CONNECT') { return; } + if (q === 'JOIN_PAD') { return; } + if (q === 'SEND_PAD_MSG') { return; } + chan.on(q, function (data, cb) { + try { + Rpc.queries[q](clientId, data, cb); + } catch (e) { + console.error('Error in webworker when executing query ' + q); + console.error(e); + console.log(data); + } + if (q === "DISCONNECT") { + console.log('Deleting existing store!'); + delete self.Rpc; + delete self.store; + } + }); }); - }); - chan.on('CONNECT', function (cfg, cb) { - debug('SharedW connecting to store...'); - if (self.store) { - debug('Store already exists!'); - if (cfg.driveEvents) { - Rpc._subscribeToDrive(clientId); - } - if (cfg.messenger) { - Rpc._subscribeToMessenger(clientId); + chan.on('CONNECT', function (cfg, cb) { + debug('SharedW connecting to store...'); + if (self.store) { + debug('Store already exists!'); + if (cfg.driveEvents) { + Rpc._subscribeToDrive(clientId); + } + if (cfg.messenger) { + Rpc._subscribeToMessenger(clientId); + } + return void cb(self.store); } - return void cb(self.store); - } - debug('Loading new async store'); - // One-time initialization (init async-store) - cfg.query = function (cId, cmd, data, cb) { - cb = cb || function () {}; - self.tabs[cId].chan.query(cmd, data, function (err, data2) { - if (err) { return void cb({error: err}); } - cb(data2); - }); - }; - cfg.broadcast = function (excludes, cmd, data, cb) { - cb = cb || function () {}; - Object.keys(self.tabs).forEach(function (cId) { - if (excludes.indexOf(cId) !== -1) { return; } + debug('Loading new async store'); + // One-time initialization (init async-store) + cfg.query = function (cId, cmd, data, cb) { + cb = cb || function () {}; self.tabs[cId].chan.query(cmd, data, function (err, data2) { if (err) { return void cb({error: err}); } cb(data2); }); + }; + cfg.broadcast = function (excludes, cmd, data, cb) { + cb = cb || function () {}; + Object.keys(self.tabs).forEach(function (cId) { + if (excludes.indexOf(cId) !== -1) { return; } + self.tabs[cId].chan.query(cmd, data, function (err, data2) { + if (err) { return void cb({error: err}); } + cb(data2); + }); + }); + }; + Rpc.queries['CONNECT'](clientId, cfg, function (data) { + if (cfg.driveEvents) { + Rpc._subscribeToDrive(clientId); + } + if (cfg.messenger) { + Rpc._subscribeToMessenger(clientId); + } + if (data && data.state === "ALREADY_INIT") { + self.store = data.returned; + return void cb(data.returned); + } + self.store = data; + cb(data); }); - }; - Rpc.queries['CONNECT'](clientId, cfg, function (data) { - if (cfg.driveEvents) { - Rpc._subscribeToDrive(clientId); - } - if (cfg.messenger) { - Rpc._subscribeToMessenger(clientId); + }); + chan.on('JOIN_PAD', function (data, cb) { + client.channelId = data.channel; + try { + Rpc.queries['JOIN_PAD'](clientId, data, cb); + } catch (e) { + console.error('Error in webworker when executing query JOIN_PAD'); + console.error(e); + console.log(data); } - if (data && data.state === "ALREADY_INIT") { - self.store = data.returned; - return void cb(data.returned); + }); + chan.on('SEND_PAD_MSG', function (msg, cb) { + var data = { + msg: msg, + channel: client.channelId + }; + try { + Rpc.queries['SEND_PAD_MSG'](clientId, data, cb); + } catch (e) { + console.error('Error in webworker when executing query SEND_PAD_MSG'); + console.error(e); + console.log(data); } - self.store = data; - cb(data); }); - }); - chan.on('JOIN_PAD', function (data, cb) { - client.channelId = data.channel; - try { - Rpc.queries['JOIN_PAD'](clientId, data, cb); - } catch (e) { - console.error('Error in webworker when executing query JOIN_PAD'); - console.error(e); - console.log(data); - } - }); - chan.on('SEND_PAD_MSG', function (msg, cb) { - var data = { - msg: msg, - channel: client.channelId - }; - try { - Rpc.queries['SEND_PAD_MSG'](clientId, data, cb); - } catch (e) { - console.error('Error in webworker when executing query SEND_PAD_MSG'); - console.error(e); - console.log(data); - } - }); - cb(); - }, true); + cb(); + }, true); - client.msgEv = msgEv; + client.msgEv = msgEv; - client.close = function () { - Rpc._removeClient(client.id); - }; + client.close = function () { + Rpc._removeClient(client.id); + }; + }); }); }); }; diff --git a/www/common/outer/webworker.js b/www/common/outer/webworker.js index 201f3db9e..f1cc1a3a2 100644 --- a/www/common/outer/webworker.js +++ b/www/common/outer/webworker.js @@ -7,94 +7,97 @@ localStorage = { getItem: function (k) { return localStorage[k]; } }; -require([ - '/common/requireconfig.js' -], function (RequireConfig) { - require.config(RequireConfig()); +require(['/api/config?cb=' + (+new Date()).toString(16)], function (ApiConfig) { + if (ApiConfig.requireConf) { require.config(ApiConfig.requireConf); } require([ - '/common/common-util.js', - '/common/outer/worker-channel.js', - '/common/outer/store-rpc.js' - ], function (Util, Channel, SRpc) { - var msgEv = Util.mkEvent(); + '/common/requireconfig.js' + ], function (RequireConfig) { + require.config(RequireConfig()); + require([ + '/common/common-util.js', + '/common/outer/worker-channel.js', + '/common/outer/store-rpc.js' + ], function (Util, Channel, SRpc) { + var msgEv = Util.mkEvent(); - var Rpc = SRpc(); + var Rpc = SRpc(); - Channel.create(msgEv, postMessage, function (chan) { - var clientId = '1'; - Object.keys(Rpc.queries).forEach(function (q) { - if (q === 'CONNECT') { return; } - if (q === 'JOIN_PAD') { return; } - if (q === 'SEND_PAD_MSG') { return; } - chan.on(q, function (data, cb) { + Channel.create(msgEv, postMessage, function (chan) { + var clientId = '1'; + Object.keys(Rpc.queries).forEach(function (q) { + if (q === 'CONNECT') { return; } + if (q === 'JOIN_PAD') { return; } + if (q === 'SEND_PAD_MSG') { return; } + chan.on(q, function (data, cb) { + try { + Rpc.queries[q](clientId, data, cb); + } catch (e) { + console.error('Error in webworker when executing query ' + q); + console.error(e); + console.log(data); + } + }); + }); + chan.on('CONNECT', function (cfg, cb) { + // load Store here, with cfg, and pass a "query" (chan.query) + // cId is a clientId used in ServiceWorker or SharedWorker + cfg.query = function (cId, cmd, data, cb) { + cb = cb || function () {}; + chan.query(cmd, data, function (err, data2) { + if (err) { return void cb({error: err}); } + cb(data2); + }); + }; + cfg.broadcast = function (excludes, cmd, data, cb) { + cb = cb || function () {}; + if (excludes.indexOf(clientId) !== -1) { return; } + chan.query(cmd, data, function (err, data2) { + if (err) { return void cb({error: err}); } + cb(data2); + }); + }; + Rpc.queries['CONNECT'](clientId, cfg, function (data) { + if (data && data.state === "ALREADY_INIT") { + return void cb(data); + } + if (cfg.driveEvents) { + Rpc._subscribeToDrive(clientId); + } + if (cfg.messenger) { + Rpc._subscribeToMessenger(clientId); + } + cb(data); + }); + }); + var chanId; + chan.on('JOIN_PAD', function (data, cb) { + chanId = data.channel; try { - Rpc.queries[q](clientId, data, cb); + Rpc.queries['JOIN_PAD'](clientId, data, cb); } catch (e) { - console.error('Error in webworker when executing query ' + q); + console.error('Error in webworker when executing query JOIN_PAD'); console.error(e); console.log(data); } }); - }); - chan.on('CONNECT', function (cfg, cb) { - // load Store here, with cfg, and pass a "query" (chan.query) - // cId is a clientId used in ServiceWorker or SharedWorker - cfg.query = function (cId, cmd, data, cb) { - cb = cb || function () {}; - chan.query(cmd, data, function (err, data2) { - if (err) { return void cb({error: err}); } - cb(data2); - }); - }; - cfg.broadcast = function (excludes, cmd, data, cb) { - cb = cb || function () {}; - if (excludes.indexOf(clientId) !== -1) { return; } - chan.query(cmd, data, function (err, data2) { - if (err) { return void cb({error: err}); } - cb(data2); - }); - }; - Rpc.queries['CONNECT'](clientId, cfg, function (data) { - if (data && data.state === "ALREADY_INIT") { - return void cb(data); - } - if (cfg.driveEvents) { - Rpc._subscribeToDrive(clientId); - } - if (cfg.messenger) { - Rpc._subscribeToMessenger(clientId); + chan.on('SEND_PAD_MSG', function (msg, cb) { + var data = { + msg: msg, + channel: chanId + }; + try { + Rpc.queries['SEND_PAD_MSG'](clientId, data, cb); + } catch (e) { + console.error('Error in webworker when executing query SEND_PAD_MSG'); + console.error(e); + console.log(data); } - cb(data); }); - }); - var chanId; - chan.on('JOIN_PAD', function (data, cb) { - chanId = data.channel; - try { - Rpc.queries['JOIN_PAD'](clientId, data, cb); - } catch (e) { - console.error('Error in webworker when executing query JOIN_PAD'); - console.error(e); - console.log(data); - } - }); - chan.on('SEND_PAD_MSG', function (msg, cb) { - var data = { - msg: msg, - channel: chanId - }; - try { - Rpc.queries['SEND_PAD_MSG'](clientId, data, cb); - } catch (e) { - console.error('Error in webworker when executing query SEND_PAD_MSG'); - console.error(e); - console.log(data); - } - }); - }, true); + }, true); - onmessage = function (e) { - msgEv.fire(e); - }; + onmessage = function (e) { + msgEv.fire(e); + }; + }); }); });