init for release
This commit is contained in:
112
src/ws_client.js
Normal file
112
src/ws_client.js
Normal file
@@ -0,0 +1,112 @@
|
||||
class WebSocketClient {
|
||||
constructor(url) {
|
||||
this.url = url;
|
||||
this.socket = null;
|
||||
this.messageHandlers = [];
|
||||
this.openHandlers = [];
|
||||
this.errorHandlers = [];
|
||||
this.closeHandlers = [];
|
||||
this.connected = false; // Add connected property
|
||||
}
|
||||
|
||||
connect() {
|
||||
// Reset connected status before attempting a new connection
|
||||
this.connected = false;
|
||||
this.socket = new WebSocket(this.url);
|
||||
|
||||
this.socket.addEventListener('open', (event) => {
|
||||
this.handleOpen(event);
|
||||
});
|
||||
|
||||
this.socket.addEventListener('message', (event) => {
|
||||
this.handleMessage(event);
|
||||
});
|
||||
|
||||
this.socket.addEventListener('error', (event) => {
|
||||
this.handleError(event);
|
||||
});
|
||||
|
||||
this.socket.addEventListener('close', (event) => {
|
||||
this.handleClose(event);
|
||||
});
|
||||
}
|
||||
|
||||
// Updated to set connected status
|
||||
handleOpen(event) {
|
||||
console.log('WebSocket is open now.');
|
||||
this.connected = true;
|
||||
this.openHandlers.forEach(handler => handler());
|
||||
}
|
||||
|
||||
addOpenHandler(handler) {
|
||||
this.openHandlers.push(handler);
|
||||
}
|
||||
|
||||
handleMessage(event) {
|
||||
if (event.data instanceof Blob) {
|
||||
this.handleBlobMessage(event);
|
||||
} else {
|
||||
console.log('Message from server:', event.data);
|
||||
}
|
||||
}
|
||||
|
||||
handleBlobMessage = (event) => {
|
||||
const reader = new FileReader();
|
||||
reader.onload = () => {
|
||||
const arrayBuffer = reader.result;
|
||||
const buffer = new Uint8Array(arrayBuffer);
|
||||
this.messageHandlers.forEach(handler => handler(buffer));
|
||||
};
|
||||
reader.readAsArrayBuffer(event.data);
|
||||
}
|
||||
|
||||
addMessageHandler(handler) {
|
||||
this.messageHandlers.push(handler);
|
||||
}
|
||||
|
||||
handleError(event) {
|
||||
console.error('WebSocket error observed:', event);
|
||||
this.connected = false; // Update connected status on error
|
||||
this.errorHandlers.forEach(handler => handler(event));
|
||||
}
|
||||
|
||||
addErrorHandler(handler) {
|
||||
this.errorHandlers.push(handler);
|
||||
}
|
||||
|
||||
// Updated to set connected status
|
||||
handleClose(event) {
|
||||
console.log('WebSocket is closed now.');
|
||||
this.connected = false;
|
||||
this.closeHandlers.forEach(handler => handler());
|
||||
}
|
||||
|
||||
addCloseHandler(handler) {
|
||||
this.closeHandlers.push(handler);
|
||||
}
|
||||
|
||||
write(buffer) {
|
||||
if (this.isConnected() && this.socket) {
|
||||
const binaryData = new Blob([new Uint8Array(buffer)]);
|
||||
this.socket.send(binaryData);
|
||||
return true;
|
||||
} else {
|
||||
console.error('WebSocket is not open. Ready state:', this.socket?.readyState);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Add a method to check if connected
|
||||
isConnected() {
|
||||
return this.connected && this.socket && this.socket.readyState === WebSocket.OPEN;
|
||||
}
|
||||
|
||||
close() {
|
||||
if (this.socket) {
|
||||
this.socket.close();
|
||||
this.connected = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default WebSocketClient;
|
||||
Reference in New Issue
Block a user