82 lines
2.6 KiB
Plaintext
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));
|
|
}
|
|
});
|
|
}
|
|
}
|