Skip to content

Commit b93c6ab

Browse files
committed
adding status-update messages (isOnline, isLoggedIn)
1 parent 2cb3557 commit b93c6ab

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

web/js/blog.js

+30
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@
2727
window.addEventListener("online",function online(){
2828
offlineIcon.classList.add("hidden");
2929
isOnline = true;
30+
sendStatusUpdate();
3031
},false);
3132
window.addEventListener("offline",function offline(){
3233
offlineIcon.classList.remove("hidden");
3334
isOnline = false;
35+
sendStatusUpdate();
3436
},false);
3537
}
3638

@@ -40,11 +42,39 @@
4042
});
4143

4244
svcworker = swRegistration.installing || swRegistration.waiting || swRegistration.active;
45+
sendStatusUpdate(svcworker);
4346

4447
// listen for new service worker to take over
4548
navigator.serviceWorker.addEventListener("controllerchange",async function onController(){
4649
svcworker = navigator.serviceWorker.controller;
50+
sendStatusUpdate(svcworker);
4751
});
52+
53+
navigator.serviceWorker.addEventListener("message",onSWMessage,false);
54+
}
55+
56+
function onSWMessage(evt) {
57+
var { data } = evt;
58+
if (data.statusUpdateRequest) {
59+
console.log("Status update requested from service worker, responding...");
60+
sendStatusUpdate(evt.ports && evt.ports[0]);
61+
}
62+
}
63+
64+
function sendStatusUpdate(target) {
65+
sendSWMessage({ statusUpdate: { isOnline, isLoggedIn } },target);
66+
}
67+
68+
function sendSWMessage(msg,target) {
69+
if (target) {
70+
target.postMessage(msg);
71+
}
72+
else if (svcworker) {
73+
svcworker.postMessage(msg);
74+
}
75+
else if (navigator.serviceWorker.controller) {
76+
navigator.serviceWorker.controller.postMessage(msg);
77+
}
4878
}
4979

5080
})();

web/js/sw.js

+23-2
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
"use strict";
22

3-
var version = 1;
3+
var version = 2;
4+
var isOnline = true;
5+
var isLoggedIn = false;
46

57
self.addEventListener("install",onInstall);
68
self.addEventListener("activate",onActivate);
9+
self.addEventListener("message",onMessage);
710

811
main().catch(console.error);
912

1013

1114
// ****************************
1215

1316
async function main() {
14-
console.log(`Service Worker (v${version}) started`);
17+
await sendMessage({ statusUpdateRequest: true });
1518
}
1619

1720
function onInstall(evt) {
@@ -27,3 +30,21 @@ async function handleActivation() {
2730
await clients.claim();
2831
console.log(`Service Worker (v${version}) activated`);
2932
}
33+
34+
async function sendMessage(msg) {
35+
var allClients = await clients.matchAll({ includeUncontrolled: true, });
36+
return Promise.all(
37+
allClients.map(function sendTo(client){
38+
var chan = new MessageChannel();
39+
chan.port1.onmessage = onMessage;
40+
return client.postMessage(msg,[chan.port2]);
41+
})
42+
);
43+
}
44+
45+
function onMessage({ data }) {
46+
if ("statusUpdate" in data) {
47+
({ isOnline, isLoggedIn } = data.statusUpdate);
48+
console.log(`Service Worker (v${version}) status update... isOnline:${isOnline}, isLoggedIn:${isLoggedIn}`);
49+
}
50+
}

0 commit comments

Comments
 (0)