Shared Workers improvements
authorgustavo <gu.martinm@gmail.com>
Tue, 17 May 2016 00:11:02 +0000 (02:11 +0200)
committergustavo <gu.martinm@gmail.com>
Tue, 17 May 2016 00:11:02 +0000 (02:11 +0200)
ecma6/sharedworkers/main.js
ecma6/sharedworkers/shared.js

index 5c70ade..5c3687e 100644 (file)
     // Shared worker will be released once every tab using that worker is closed.
     // see: chrome://inspect/#workers
     var sharedWorker = new SharedWorker('shared.js', 'shared-worker-example');
+    sharedWorker.onerror = onError;
 
     var sendButton = document.getElementById('sendButton');
     sendButton.addEventListener('click', postMessage);
 
     messagePort = sharedWorker.port;
-    messagePort.onerror = onError;
     messagePort.onmessage = onMessage;
     // Starts the sending of messages queued on the port
     // (only needed when using EventTarget.addEventListener; it is implied when using MessagePort.onmessage.)
@@ -30,8 +30,8 @@
     log.insertAdjacentHTML('beforeend', 'Message posted to worker: ' + sendText.value + ' <br>');
   }
 
-  function onMessage(e) {
-    log.insertAdjacentHTML('beforeend', 'Message received from worker: ' + e.data + ' <br>');
+  function onMessage(event) {
+    log.insertAdjacentHTML('beforeend', 'Message received from worker: ' + event.data + ' <br>');
   }
 
   function onError() {
@@ -39,7 +39,7 @@
   }
 
   function close() {
-    // I think, calling close method is not required. Once all tabs are closed, shared worker will be released.
+    // When should I call close method?
     messagePort.close();
   }
 
index 2aae397..fa4005f 100644 (file)
@@ -1,14 +1,37 @@
-onconnect = function(e) {
-  var port = e.ports[0];
+'use strict';
 
-  port.onmessage = function(e) {
-    var workerResult = 'Result: ' + e.data;
+var lastData;
+var messagePorts = [];
+
+onconnect = function(event) {
+  var messagePort = event.ports[0];
+  messagePort.onmessage = function(event) {
+
+    var workerResult;
+    if (lastData) {
+      workerResult = 'Result: ' + event.data + ' Last data: ' + lastData;
+    } else {
+      workerResult = 'Result: ' + event.data;
+    }
+    lastData = event.data;
 
     console.log('SharedWorkerGlobalScope name: ' + name);
     console.log('SharedWorkerGlobalScope location: ' + location);
+    console.log('SharedWorkerGlobalScope result: ' + event.data);
 
-    // Data will be sent only to the current active tab.
-    port.postMessage(workerResult);
+    messagePorts.forEach(function (messagePort) {
+      messagePort.postMessage(workerResult);
+    });
   };
 
+  messagePorts.push(messagePort);
+
+  // When and where should I call close method?
+  // Should I call messagePort.close() or SharedWorkerGlobalScope.close()?
+  // SharedWorker doesn't have close method but SharedWorkerGlobalScope has one :(
+
+};
+
+onerror = function() {
+  console.log('SharedWorkerGlobalScope: There is an error with the shared worker!');
 };