62 lines
1.9 KiB
Go
62 lines
1.9 KiB
Go
package main
|
|
|
|
var Index = `<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Test</title>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.7/signalr.min.js" integrity="sha512-7SRCYIJtR6F8ocwW7UxW6wGKqbSyqREDbfCORCbGLatU0iugBLwyOXpzhkPyHIFdBO0K2VCu57fvP2Twgx1o2A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
</head>
|
|
<body>
|
|
<div>
|
|
<div>
|
|
<input type="text" id="name" />
|
|
<button id="greet">Greet</button>
|
|
<button id="ping">Ping</button>
|
|
</div>
|
|
<ul id="events"></ul>
|
|
</div>
|
|
<script>
|
|
(async function () {
|
|
let ws;
|
|
function connect() {
|
|
if (!localStorage.getItem('client_id')) {
|
|
localStorage.setItem('client_id', crypto.randomUUID());
|
|
}
|
|
ws = new WebSocket('/events?id=' + localStorage.getItem('client_id'));
|
|
ws.addEventListener('open', function () {
|
|
wsOpen = true;
|
|
});
|
|
ws.addEventListener('message', function (message) {
|
|
const event = JSON.parse(message.data);
|
|
if (!event.type) {
|
|
return;
|
|
}
|
|
const eventList = document.getElementById('events');
|
|
const li = document.createElement('li');
|
|
li.innerText = event.type + ': ' + (event.data ? JSON.stringify(event.data) : 'null');
|
|
eventList.append(li);
|
|
});
|
|
ws.onclose = function () {
|
|
setTimeout(() => connect(), 5000);
|
|
};
|
|
}
|
|
|
|
document.getElementById('greet').onclick = function () {
|
|
const name = document.getElementById('name').value;
|
|
ws.send(JSON.stringify({
|
|
type: 'greet me',
|
|
data: name,
|
|
}));
|
|
};
|
|
|
|
document.getElementById('ping').onclick = function () {
|
|
ws.send(JSON.stringify({type: 'ping'}));
|
|
};
|
|
|
|
connect();
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>`
|