1 import { Observable } from "rxjs";
2 import { share } from "rxjs/operators";
9 import { getWsUri } from "../env";
10 import { isBrowser } from "../utils";
12 export class WebSocketService {
13 private static _instance: WebSocketService;
15 public subject: Observable<any>;
17 private constructor() {
18 let firstConnect = true;
20 this.subject = new Observable((obs: any) => {
21 this.ws = new WebsocketBuilder(getWsUri())
22 .onMessage((_i, e) => {
24 obs.next(JSON.parse(e.data.toString()));
30 console.log(`Connected to ${getWsUri()}`);
41 console.log("Retrying websocket connection...");
44 console.error("Websocket closed.");
46 .withBackoff(new ExponentialBackoff(100, 7))
47 .withBuffer(new LRUBuffer(1000))
52 window.onunload = () => {
55 // Clears out scroll positions.
56 sessionStorage.clear();
61 public send(data: string) {
65 public static get Instance() {
66 return this._instance || (this._instance = new this());