@@ -16,7 +16,7 @@ FlareTail.app = FlareTail.app || {};
16
16
/**
17
17
* Provide an app bare-bones object.
18
18
*/
19
- FlareTail . app . Main = class Main {
19
+ FlareTail . app . AbstractMain = class AbstractMain {
20
20
/**
21
21
* Get a Main instance.
22
22
* @constructor
@@ -32,7 +32,9 @@ FlareTail.app.Main = class Main {
32
32
// Those components are actually in the service worker; use WorkerProxy to get access
33
33
datasources : { } ,
34
34
collections : { } ,
35
- services : { } ,
35
+ handlers : { } ,
36
+ // Shared workers
37
+ workers : { } ,
36
38
} ) ;
37
39
}
38
40
}
@@ -153,9 +155,10 @@ FlareTail.app.WorkerProxy = class WorkerProxy {
153
155
* Get a WorkerProxy instance.
154
156
* @constructor
155
157
* @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.
156
159
* @return {Proxy } proxy - The catch-all magic mechanism. Functions on this proxy will return a Promise.
157
160
*/
158
- constructor ( class_name ) {
161
+ constructor ( class_name , worker = undefined ) {
159
162
return new Proxy ( { } , {
160
163
get : ( obj , func_name ) => new Proxy ( ( ) => { } , {
161
164
apply : ( _obj , _this , args ) => new Promise ( resolve => {
@@ -167,7 +170,12 @@ FlareTail.app.WorkerProxy = class WorkerProxy {
167
170
console . info ( '[WorkerProxy] received message:' , class_name , func_name , detail ) ;
168
171
}
169
172
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
+
171
179
resolve ( detail ) ;
172
180
}
173
181
} ;
@@ -176,8 +184,13 @@ FlareTail.app.WorkerProxy = class WorkerProxy {
176
184
console . info ( '[WorkerProxy] sent message:' , class_name , func_name , args ) ;
177
185
}
178
186
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
+ }
181
194
} ) ,
182
195
} ) ,
183
196
} ) ;
0 commit comments