|
147 | 147 | * @constructor |
148 | 148 | */ |
149 | 149 | function WorkerMessenger(port, receiverEventPreprocessor, senderEventPreprocessor) { |
150 | | - |
| 150 | + if (port === NOINIT) return; |
151 | 151 | function postMessageHandler(data, transferList) { |
152 | 152 | port.postMessage(data, transferList); |
153 | 153 | } |
154 | 154 |
|
155 | 155 | MessagePortDispatcher.call(this, port, postMessageHandler, receiverEventPreprocessor, senderEventPreprocessor); |
156 | 156 | } |
157 | 157 |
|
| 158 | + WorkerMessenger.prototype = MessagePortDispatcher.createNoInitPrototype(); |
| 159 | + WorkerMessenger.prototype.constructor = WorkerMessenger; |
| 160 | + |
158 | 161 | function setScopeHandlers(source, target) { |
159 | 162 | WorkerEvent.createHandler(Event.ERROR, source, target); |
160 | 163 | WorkerEvent.createHandler(Event.LANGUAGECHANGE, source, target); |
|
167 | 170 | function setAbstractWorkerHandlers(source, target) { |
168 | 171 | WorkerEvent.createHandler(Event.ERROR, source, target); |
169 | 172 | } |
| 173 | + function createNoInitPrototype() { |
| 174 | + return new WorkerMessenger(NOINIT); |
| 175 | + } |
| 176 | + |
| 177 | + WorkerMessenger.createNoInitPrototype = createNoInitPrototype; |
170 | 178 |
|
171 | 179 | WorkerMessenger.setAbstractWorkerHandlers = setAbstractWorkerHandlers; |
172 | 180 | return WorkerMessenger; |
173 | 181 | })(); |
174 | 182 |
|
| 183 | + /** |
| 184 | + * |
| 185 | + * @param worker {String|Worker} |
| 186 | + * @param type {String} |
| 187 | + * @param receiverEventPreprocessor {?Function} |
| 188 | + * @param senderEventPreprocessor {?Function} |
| 189 | + * @extends WorkerMessenger |
| 190 | + * @constructor |
| 191 | + */ |
| 192 | + function WorkerEventDispatcher(worker, receiverEventPreprocessor, senderEventPreprocessor, type) { |
| 193 | + if (worker === NOINIT) { |
| 194 | + Object.defineProperties(this, { |
| 195 | + type: { |
| 196 | + value: type |
| 197 | + } |
| 198 | + }); |
| 199 | + } else { |
| 200 | + Object.defineProperties(this, { |
| 201 | + type: { |
| 202 | + value: WorkerType.DEDICATED_WORKER |
| 203 | + } |
| 204 | + }); |
| 205 | + DedicatedWorkerEventDispatcher.call(this, worker, receiverEventPreprocessor, senderEventPreprocessor); |
| 206 | + } |
| 207 | + } |
| 208 | + |
| 209 | + WorkerEventDispatcher.prototype = WorkerMessenger.createNoInitPrototype(); |
| 210 | + WorkerEventDispatcher.prototype.constructor = WorkerEventDispatcher; |
| 211 | + |
175 | 212 | /** |
176 | 213 | * |
177 | 214 | * @param worker |
|
196 | 233 |
|
197 | 234 | _target.addEventListener('connect', connectHandler); |
198 | 235 |
|
199 | | - this.addEventListener = _receiver.addEventListener; |
200 | | - this.hasEventListener = _receiver.hasEventListener; |
201 | | - this.removeEventListener = _receiver.removeEventListener; |
202 | | - this.removeAllEventListeners = _receiver.removeAllEventListeners; |
| 236 | + this.addEventListener = _receiver.addEventListener.bind(_receiver); |
| 237 | + this.hasEventListener = _receiver.hasEventListener.bind(_receiver); |
| 238 | + this.removeEventListener = _receiver.removeEventListener.bind(_receiver); |
| 239 | + this.removeAllEventListeners = _receiver.removeAllEventListeners.bind(_receiver); |
203 | 240 |
|
204 | 241 | WorkerMessenger.setScopeHandlers(_target, _receiver); |
205 | 242 |
|
|
209 | 246 | }, |
210 | 247 | target: { |
211 | 248 | value: _target |
| 249 | + }, |
| 250 | + type: { |
| 251 | + value: WorkerType.SHARED_WORKER_SERVER |
212 | 252 | } |
213 | 253 | }); |
214 | 254 | } |
215 | | - ServerEventDispatcher.prototype = new WorkerEventDispatcher(NOINIT, null, null, WorkerType.SHARED_WORKER_SERVER); |
| 255 | + |
| 256 | + ServerEventDispatcher.prototype = EventDispatcher.createNoInitPrototype(); |
216 | 257 | ServerEventDispatcher.prototype.constructor = ServerEventDispatcher; |
217 | 258 |
|
218 | 259 | /** |
|
287 | 328 | DedicatedWorkerEventDispatcher.prototype = new WorkerEventDispatcher(NOINIT, null, null, WorkerType.DEDICATED_WORKER); |
288 | 329 | DedicatedWorkerEventDispatcher.prototype.constructor = DedicatedWorkerEventDispatcher; |
289 | 330 |
|
290 | | - /** |
291 | | - * |
292 | | - * @param worker {String|Worker} |
293 | | - * @param type {String} |
294 | | - * @param receiverEventPreprocessor {?Function} |
295 | | - * @param senderEventPreprocessor {?Function} |
296 | | - * @extends WorkerMessenger |
297 | | - * @constructor |
298 | | - */ |
299 | | - function WorkerEventDispatcher(worker, receiverEventPreprocessor, senderEventPreprocessor, type) { |
300 | | - if (worker === NOINIT) { |
301 | | - Object.defineProperties(this, { |
302 | | - type: { |
303 | | - value: type |
304 | | - } |
305 | | - }); |
306 | | - } else { |
307 | | - DedicatedWorkerEventDispatcher.call(this, worker, receiverEventPreprocessor, senderEventPreprocessor); |
308 | | - } |
309 | | - } |
310 | | - |
311 | 331 | WorkerEventDispatcher.WorkerEvent = WorkerEvent; |
312 | 332 | WorkerEventDispatcher.WorkerType = WorkerType; |
313 | 333 | WorkerEventDispatcher.CONNECT_EVENT = WorkerEvent.CONNECT; |
|
0 commit comments