barracuda-client-api
Version:
API Client to connect to Barracuda Enterprise Service Bus
72 lines (64 loc) • 2.28 kB
text/typescript
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);
}
}