itender/src/WebSocketPayload.ts
Tobias Hopp a356b39bad update
Took 25 hours 49 minutes
2022-11-15 00:58:59 +01:00

61 lines
1.6 KiB
TypeScript

import {WebSocketEvent} from "./WebSocketEvent";
export class WebSocketPayload {
set event(value: WebSocketEvent) {
this._event = value;
}
set error(value: boolean) {
this._error = value;
}
set data(value: any | undefined) {
this._data = value;
}
private _event: WebSocketEvent;
private _error: boolean;
private _data: any | undefined;
get event(): WebSocketEvent {
return this._event;
}
get error(): boolean {
return this._error;
}
get data(): any | undefined {
return this._data;
}
constructor(event: WebSocketEvent, error: boolean = false, data?: any) {
this._event = event;
this._error = error;
this._data = data;
}
public static parseFromBase64Json(json: string): WebSocketPayload | null {
json = (typeof window != 'undefined') ? atob(json) : Buffer.from(json, "base64").toString();
let rawPayload: { event: string, error: boolean, data: any };
try {
rawPayload = JSON.parse(json);
} catch (e) {
return null;
}
let wsEvent = WebSocketEvent[<keyof typeof WebSocketEvent>rawPayload.event];
return new WebSocketPayload(wsEvent, rawPayload.error, rawPayload.data);
}
/**
* Returns the payload as base64 encoded json string
*/
public toString(): string {
let json = JSON.stringify({"event": this._event, status: this._error, data: this._data});
json = ((typeof window != 'undefined') ? btoa(json) : Buffer.from(json).toString("base64"));
return json;
}
}