UNPKG

barracuda-client-api

Version:

API Client to connect to Barracuda Enterprise Service Bus

72 lines (64 loc) 2.28 kB
import { IBarracudaWebSocket } from "./IBarracudaWebSocket"; export class BarracudaBrowserWebSocket implements IBarracudaWebSocket { private _endpoint: string; private _ws: WebSocket; constructor(endpoint: string) { this._endpoint = endpoint; this._ws = new WebSocket(endpoint); } public close(code: number, reason: string): void { this._ws.close(code, reason); } public on(eventType: "message", onEvent: (msg: any) => void): void; public on(eventType: "error", onEvent: (err: any) => void): void; public on(eventType: "message" | "error", onEvent: ((arg: any) => void) | ((err: number, reason: string) => void)): void { switch (eventType) { case "error": this._ws.onerror = (ev: Event) => (onEvent as ((err: any) => void))(new Error(ev.toString())); break; case "message": this._ws.onmessage = ev => { (onEvent as ((msg: any) => void))(ev.data); }; break; } } public once(eventType: "message", onEvent: (msg: any) => void): void; public once(eventType: "open", onEvent: () => void): void; public once(eventType: "close", onEvent: (err: number, reason: string) => void): void; public once(eventType: "message" | "open" | "close", onEvent: ((msg: any) => void) | ((err: number, reason: string) => void)): void { switch (eventType) { case "message": let handledMessage = false; this._ws.addEventListener("message", ev => { if (handledMessage) { return; } handledMessage = true; (onEvent as ((msg: any) => void))(ev.data); }); break; case "open": let handledOpen = false; this._ws.addEventListener("open", ev => { if (handledOpen) { return; } handledOpen = true; (onEvent as ((msg: any) => void))(ev); }); break; case "close": let handledClose = false; this._ws.addEventListener("close", ev => { if (handledClose) { return; } handledClose = true; (onEvent as ((err: number, reason: string) => void))(ev.code, ev.reason); }); break; } } public send(msg: string): void { this._ws.send(msg); } }