Files
UDN/node_modules/udn-ts/index.ts
T

63 lines
1.6 KiB
TypeScript

export default class UDNFrontend {
private ws: WebSocket | undefined;
// handlers
private connectionHandler = () => {};
private disconnectionHandler = () => {};
private messageHandler = (data: Object) => {};
// init
set onconnect(handler: () => void) {
this.connectionHandler = handler;
}
set ondisconnect(handler: () => void) {
this.disconnectionHandler = handler;
}
set onmessage(handler: (data: Object) => void) {
this.messageHandler = handler;
}
// utility methods
private send(messageObject: Object): boolean {
if (this.ws == undefined) return false;
const messageString = JSON.stringify(messageObject);
this.ws.send(messageString);
return true;
}
// public methods
connect(address: string): void {
this.ws = new WebSocket(address);
this.ws.addEventListener("open", this.connectionHandler);
this.ws.addEventListener("close", this.disconnectionHandler);
this.ws.addEventListener("message", (message) => {
const dataString = message.data.toString();
const data = JSON.parse(dataString);
this.messageHandler(data);
});
}
sendMessage(channel: string, body: string): boolean {
const messageObject = {
messageChannel: channel,
messageBody: body,
};
return this.send(messageObject);
}
subscribe(channel: string): boolean {
const messageObject = {
subscribeChannel: channel,
};
return this.send(messageObject);
}
unsubscribe(channel: string): boolean {
const messageObject = {
unsubscribeChannel: channel,
};
return this.send(messageObject);
}
}