Skip to content
This repository was archived by the owner on Sep 23, 2022. It is now read-only.

Commit 3966451

Browse files
committed
Introduce AbstractMain, AbstractWorker, Helper, part of #32
1 parent cefa466 commit 3966451

File tree

3 files changed

+30
-20
lines changed

3 files changed

+30
-20
lines changed

scripts/app.core.js

+4-6
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,12 @@ FlareTail.app.Events = class Events {
5151
* @return {undefined}
5252
*/
5353
on (topic, callback, global = false) {
54-
let bc = new BroadcastChannel(topic);
55-
56-
topic = topic.replace(/^([MVCS]):/, (match, prefix) => {
57-
return this.constructor.name.match(/(.*)(Model|View|Controller|Service)$/)[1]
58-
+ { M: 'Model', V: 'View', C: 'Controller', S: 'Service' }[prefix] + ':';
54+
topic = topic.replace(/^([MVCH]):/, (match, prefix) => {
55+
return this.constructor.name.match(/(.*)(Model|View|Controller|Handler)$/)[1]
56+
+ { M: 'Model', V: 'View', C: 'Controller', H: 'Handler' }[prefix] + ':';
5957
});
6058

61-
bc.addEventListener('message', event => {
59+
(new BroadcastChannel(topic)).addEventListener('message', event => {
6260
if (!global && event.data && event.data.id && this.id && event.data.id !== this.id) {
6361
return false;
6462
}

scripts/app.main.js

+19-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ FlareTail.app = FlareTail.app || {};
1616
/**
1717
* Provide an app bare-bones object.
1818
*/
19-
FlareTail.app.Main = class Main {
19+
FlareTail.app.AbstractMain = class AbstractMain {
2020
/**
2121
* Get a Main instance.
2222
* @constructor
@@ -32,7 +32,9 @@ FlareTail.app.Main = class Main {
3232
// Those components are actually in the service worker; use WorkerProxy to get access
3333
datasources: {},
3434
collections: {},
35-
services: {},
35+
handlers: {},
36+
// Shared workers
37+
workers: {},
3638
});
3739
}
3840
}
@@ -153,9 +155,10 @@ FlareTail.app.WorkerProxy = class WorkerProxy {
153155
* Get a WorkerProxy instance.
154156
* @constructor
155157
* @argument {String} class_name - Name of the target class on the worker.
158+
* @argument {SharedWorker} [worker=undefined] If specified, use the shared worker instead of the service worker.
156159
* @return {Proxy} proxy - The catch-all magic mechanism. Functions on this proxy will return a Promise.
157160
*/
158-
constructor (class_name) {
161+
constructor (class_name, worker = undefined) {
159162
return new Proxy({}, {
160163
get: (obj, func_name) => new Proxy(() => {}, {
161164
apply: (_obj, _this, args) => new Promise(resolve => {
@@ -167,7 +170,12 @@ FlareTail.app.WorkerProxy = class WorkerProxy {
167170
console.info('[WorkerProxy] received message:', class_name, func_name, detail);
168171
}
169172

170-
navigator.serviceWorker.removeEventListener('message', listener);
173+
if (worker) {
174+
worker.port.removeEventListener('message', listener);
175+
} else {
176+
navigator.serviceWorker.removeEventListener('message', listener);
177+
}
178+
171179
resolve(detail);
172180
}
173181
};
@@ -176,8 +184,13 @@ FlareTail.app.WorkerProxy = class WorkerProxy {
176184
console.info('[WorkerProxy] sent message:', class_name, func_name, args);
177185
}
178186

179-
navigator.serviceWorker.addEventListener('message', listener);
180-
navigator.serviceWorker.ready.then(reg => reg.active.postMessage([class_name, func_name, args]));
187+
if (worker) {
188+
worker.port.addEventListener('message', listener);
189+
worker.port.postMessage([class_name, func_name, args]);
190+
} else {
191+
navigator.serviceWorker.addEventListener('message', listener);
192+
navigator.serviceWorker.ready.then(reg => reg.active.postMessage([class_name, func_name, args]));
193+
}
181194
}),
182195
}),
183196
});

scripts/app.worker.js

+7-8
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,21 @@ FlareTail.app = FlareTail.app || {};
1616
/**
1717
* Provide an app bare-bones object.
1818
*/
19-
FlareTail.app.Worker = class Worker {
19+
FlareTail.app.AbstractWorker = class AbstractWorker {
2020
/**
2121
* Get a Worker instance.
2222
* @constructor
2323
* @argument {String} name - App name.
24-
* @argument {(Number|String)} [version=1] - App version mainly used for the offline cache.
2524
* @return {Object} app
2625
*/
27-
constructor (name, version = 1) {
26+
constructor (name) {
2827
this.name = name;
29-
this.version = version;
3028

3129
return ({
3230
datasources: {},
3331
collections: {},
3432
models: {},
35-
services: {},
33+
handlers: {},
3634
});
3735
}
3836
}
@@ -41,7 +39,7 @@ FlareTail.app.Worker = class Worker {
4139
* Provide app base functionalities.
4240
* @extends FlareTail.app.Events
4341
*/
44-
FlareTail.app.Base = class View extends FlareTail.app.Events {}
42+
FlareTail.app.Base = class Base extends FlareTail.app.Events {}
4543

4644
FlareTail.app.Base.prototype.helpers = FlareTail.helpers;
4745

@@ -293,6 +291,7 @@ FlareTail.app.Collection = class Collection extends FlareTail.app.Base {
293291
}
294292

295293
/**
296-
* Provide app service functionalities.
294+
* Provide app handler functionalities.
295+
* @extends FlareTail.app.Base
297296
*/
298-
FlareTail.app.Service = class Service {}
297+
FlareTail.app.Handler = class Handler extends FlareTail.app.Base {}

0 commit comments

Comments
 (0)