generated from ZEISS/template-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
reload.ts
57 lines (44 loc) · 1.13 KB
/
reload.ts
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
var lastUuid = "";
var timeout;
const resetBackoff = () => {
timeout = 1000;
};
const backOff = () => {
if (timeout > 10 * 1000) {
return;
}
timeout = timeout * 2;
};
const hotReloadUrl = () => {
const hostAndPort =
location.hostname + (location.port ? ":" + location.port : "");
if (location.protocol === "https:") {
return "wss://" + hostAndPort + "/ws/reload";
}
return "ws://" + hostAndPort + "/ws/reload";
};
function connectHotReload() {
const socket = new WebSocket(hotReloadUrl());
socket.onmessage = (event) => {
if (lastUuid === "") {
lastUuid = event.data;
}
if (lastUuid !== event.data) {
console.log("[Hot Reloader] Server Changed, reloading");
location.reload();
}
};
socket.onopen = () => {
resetBackoff();
socket.send("Hello");
};
socket.onclose = () => {
const timeoutId = setTimeout(function () {
clearTimeout(timeoutId);
backOff();
connectHotReload();
}, timeout);
};
}
resetBackoff();
connectHotReload();