ClassMG/entry/src/main/ets/util/WebsocketMessage.ets

82 lines
2.6 KiB
Plaintext

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));
}
});
}
}