-
Notifications
You must be signed in to change notification settings - Fork 0
/
service worker.js
155 lines (146 loc) · 4.71 KB
/
service worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// Service worker
const version = "550";
const cacheName = "Checkers-v:" + version;
const appShellFiles = [
"./src/images/american flag.jpeg",
"./src/images/kenyan flag.jpeg",
"./src/images/casino flag.jpeg",
"./src/images/international flags.jpeg",
"./src/images/pool flag.jpeg",
"./src/images/russian flag.jpeg",
"./src/images/nigerian flag.jpeg",
"./src/images/background1.jpeg",
"./src/images/background2.jpeg",
"./src/images/background3.jpeg",
"./src/images/black cell.jpeg",
"./src/images/white cell.jpeg",
"./src/images/sound on.png",
"./src/images/sound off.png",
"./src/images/frame.jpeg",
"./src/images/hint.png",
"./src/images/menu.png",
"./src/images/restart.png",
"./src/images/undo.png",
"./src/images/about.png",
"./src/images/black piece.png",
"./src/images/white piece.png",
"./src/images/black crown.png",
"./src/images/white crown.png",
"./src/images/send.png",
"./src/images/cancel.png",
"./src/images/alert.png",
"./src/images/confirm.png",
"./src/images/winner.png",
"./src/images/loser.png",
"./src/images/draw.png",
"./src/images/load.png",
"./src/images/dice roll.png",
"./src/images/contact.png",
"./src/images/homescreen 48icon.png",
"./src/images/homescreen 96icon.png",
"./src/images/homescreen 144icon.png",
"./src/images/homescreen 192icon.png",
"./src/images/homescreen 256icon.png",
"./src/images/homescreen 512icon.png",
"./src/images/favicon16.png",
"./src/images/favicon32.png",
"./src/images/favicon96.png",
"./src/images/favicon.ico",
"./src/images/bin.png",
"./src/images/bin lid.png",
"./src/images/copy.png",
"./src/images/warning.png",
"./src/images/lock.png",
"./src/images/star.png",
"./src/images/channel image.png",
"./src/images/player image.png",
"./src/images/status image.png",
"./src/images/channel joined image.png",
"./src/images/Sololearn.png",
"./src/images/Github.png",
"./src/images/LinkedIn.png",
"./src/images/Facebook.png",
"./src/images/Twitter.png",
"./src/images/Instagram.png",
"./src/audio/click.mp3",
"./src/audio/capture.mp3",
"./src/audio/king.mp3",
"./src/audio/collect.mp3",
"./src/audio/game win.mp3",
"./src/audio/game lose.mp3",
"./src/audio/notification.mp3",
"./src/objects.js",
"./src/ai.js",
"./src/app.js",
"./src/channel.js",
"./src/core.js",
"./src/worker.js",
"./src/app.css",
"./manifest.webmanifest",
"./index.js",
"./index.css",
"./index.html"
];
self.addEventListener("install", (e) => {
e.waitUntil(
caches.open(cacheName).then((cache) => {
return cache.addAll(appShellFiles);
})
)
});
self.addEventListener("fetch", (e) => {
e.respondWith(
caches.match(e.request.url.replace(/html\/.*$/i, 'html').replace(/checkers\/$/i, (t) => t + "index.html"), {cacheName, ignoreSearch: true}).then( async (res) => {
if(res && !/objects.js$/gi.test(e.request.url)) {
return res;
}
return fetch(e.request).then((res2) => {
if(e.request.url.includes("pndsn.com")) {
return res2;
/*Not storing this kind of request*/
}
if(res2.status != 200) {
return res || res2;
}
return caches.open(cacheName).then((cache) => {
cache.put(e.request.url.split("?")[0], res2.clone());
return res2;
}).catch((error) => {
return res2;
});
}).catch((error) => {
console.log(e.request.url);
return res || new Response(null, {"status": 200});
});
})
)
});
self.addEventListener("activate", (e) => {
const keepList = [cacheName];
e.waitUntil(
caches.keys().then((keyList) => {
return Promise.all(keyList.map((key) => {
if(keepList.indexOf(key) === -1) {
return caches.delete(key);
}
}))
})
)
});
self.addEventListener("message", async (e) => {
if(e.data && e.data.type == "skip-waiting") {
self.skipWaiting();
}
else if(e.data && e.data.type == "move-search") {
sendMsg(e.data.content);
await searchMove(e.data.content);
}
});
function sendMsg(msg) {
self.clients.matchAll({type: 'window'}).
then((clients) => {
for(let client of clients) {
client.postMessage(msg);
}
});
}