import { webSocket } from "@kit.NetworkKit"; import { BusinessError } from "@kit.BasicServicesKit"; import { hilog } from "@kit.PerformanceAnalysisKit"; const DOMAIN: number = 0 const TAG: string = "websocket message" export default class WebSocketMessage { private ws = webSocket.createWebSocket(); private url: string; private room: string; private onMessageCallback: (data: string | ArrayBuffer) => void = () => { }; constructor(url: string, room: string) { this.url = url; this.room = room; } public connect(): void { this.ws.on('open', (err: BusinessError, value: Object) => { hilog.debug(DOMAIN, TAG, "on open, status: " + JSON.stringify(value)); this.ws.send("Hello, server!", (err: BusinessError, success: boolean) => { if (!err) { hilog.debug(DOMAIN, TAG, "Message sent successfully"); } else { hilog.debug(DOMAIN, TAG, "Failed to send the message. Err: " + JSON.stringify(err)); } }); }); this.ws.on('message', (err: BusinessError, value: string | ArrayBuffer) => { hilog.debug(DOMAIN, TAG, "on message, message: " + value); if (value === 'bye') { this.close(); } this.onMessageCallback(value); }); this.ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => { hilog.debug(DOMAIN, TAG, "on close, code: " + value.code + ", reason: " + value.reason); }); this.ws.on('error', (err: BusinessError) => { hilog.debug(DOMAIN, TAG, "on error, error: " + JSON.stringify(err)); }); const wsUrl = `ws://${this.url}/ws/room?room=${this.room}`; this.ws.connect(wsUrl, (err: BusinessError, connected: boolean) => { if (!err) { hilog.debug(DOMAIN, TAG, "Connected successfully"); } else { hilog.debug(DOMAIN, TAG, "Connection failed. Err: " + JSON.stringify(err)); } }); } public setOnMessage(callback: (data: string | ArrayBuffer) => void): void { this.onMessageCallback = callback; } public sendMessage(message: string): void { this.ws.send(message, (err: BusinessError, success: boolean) => { if (!err) { hilog.debug(DOMAIN, TAG, "Message sent: " + message); } else { hilog.debug(DOMAIN, TAG, "Send failed: " + JSON.stringify(err)); } }); } public close(): void { this.ws.close((err: BusinessError, success: boolean) => { if (!err) { hilog.debug(DOMAIN, TAG, "Connection closed successfully"); } else { hilog.debug(DOMAIN, TAG, "Failed to close the connection. Err: " + JSON.stringify(err)); } }); } }