-
Notifications
You must be signed in to change notification settings - Fork 0
/
stream-controller.mjs
38 lines (33 loc) · 1.13 KB
/
stream-controller.mjs
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
/* eslint-disable no-console */
import { Controller } from 'stimulus';
import { connectStreamSource, disconnectStreamSource } from '@hotwired/turbo';
export default class extends Controller {
connect() {
// can be relative
const url = this.element.getAttribute('data-stream-source');
if (!url) {
console.log('Stream controller connected without a stream source.');
return;
}
if (url.startsWith('ws')) {
this.es = new WebSocket(url);
console.log('Established WebSocket stream source at url:', url);
this.es.onmessage = function handleMessage(message) {
console.log('WS: got message:', message);
};
} else {
// server sent events (SSE, not WebSocket) endpoint
this.es = new EventSource(url);
console.log('Established server sent event (SSE) stream source at url:', url);
this.es.onmessage = function handleMessage(event) {
console.log('SSE: got message:', event.data);
};
}
connectStreamSource(this.es);
}
disconnect() {
console.log('Disconnection stream source');
this.es.close();
disconnectStreamSource(this.es);
}
}