54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
// Sending messages, a simple POST
|
|
function PublishForm(form, url) {
|
|
|
|
function sendMessage(message) {
|
|
fetch(url, {
|
|
method: 'POST',
|
|
body: message
|
|
});
|
|
}
|
|
|
|
form.onsubmit = function() {
|
|
let message = form.message.value;
|
|
if (message) {
|
|
form.message.value = '';
|
|
sendMessage(message);
|
|
}
|
|
return false;
|
|
};
|
|
}
|
|
|
|
// Receiving messages with long polling
|
|
function SubscribePane(elem, url) {
|
|
|
|
function showMessage(message) {
|
|
let messageElem = document.createElement('div');
|
|
messageElem.append(message);
|
|
elem.append(messageElem);
|
|
}
|
|
|
|
async function subscribe() {
|
|
let response = await fetch(url);
|
|
|
|
if (response.status == 502) {
|
|
// Connection timeout
|
|
// happens when the connection was pending for too long
|
|
// let's reconnect
|
|
await subscribe();
|
|
} else if (response.status != 200) {
|
|
// Show Error
|
|
showMessage(response.statusText);
|
|
// Reconnect in one second
|
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
await subscribe();
|
|
} else {
|
|
// Got message
|
|
let message = await response.text();
|
|
showMessage(message);
|
|
await subscribe();
|
|
}
|
|
}
|
|
|
|
subscribe();
|
|
|
|
}
|