Skip to content

WebSocketWrapper

A Service class for managing WebSocket connections with promise-based operations and automatic lifecycle management. Perfect for real-time communication, live updates, and bidirectional data exchange in web applications.

Features

  • Promise-based API: Modern async/await compatible interface
  • Automatic Connection Management: Built-in connection state tracking
  • Error Handling: Comprehensive error catching and logging
  • Interactive Logging: Console feedback for debugging
  • Connection Validation: URL validation and connection state checks
  • Clean Resource Management: Proper connection cleanup and disposal

Service Reference

WebSocketWrapper Methods

The wrapper provides a complete set of methods for WebSocket lifecycle management:

typescript
ws.setURL(url: string): void
ws.init(): Promise<WebSocketWrapper>
ws.onMessage(callback: (message: string) => void): Promise<WebSocketWrapper>
ws.sendMessage(message: string): Promise<void>
ws.close(): void
ws.getConnectionStatus(): boolean

Method Parameters

MethodParametersReturnsDescription
setURLurl: stringvoidSets the WebSocket connection URL
init-Promise<WebSocketWrapper>Initializes and establishes connection
onMessagecallback: (message: string) => voidPromise<WebSocketWrapper>Sets up message handler
sendMessagemessage: stringPromise<void>Sends message through connection
close-voidCloses connection and cleans up
getConnectionStatus-booleanReturns current connection status

Usage Examples

Basic WebSocket Connection

typescript
import WebSocketWrapper from './WebSocketWrapper';

const ws = new WebSocketWrapper();

// Establish connection
ws.setURL('ws://localhost:8080');
ws.init()
  .then(() => {
    console.log('WebSocket ready!');
  })
  .catch((error) => {
    console.error('Connection failed:', error);
  });

Message Handling

typescript
// Set up message handler
ws.onMessage((message) => {
  console.log('Received:', message);
  
  // Handle JSON messages
  try {
    const data = JSON.parse(message);
    processIncomingData(data);
  } catch (error) {
    console.log('Plain text message:', message);
  }
});

// Send messages
ws.sendMessage('Hello, server!')
  .then(() => console.log('Message sent'))
  .catch((error) => console.error('Send failed:', error));

Method Chaining

typescript
const ws = new WebSocketWrapper();

ws.setURL('wss://api.example.com/ws');
ws.init()
  .then(() => ws.onMessage(handleMessage))
  .then(() => ws.sendMessage(JSON.stringify({ type: 'connect', user: 'john' })))
  .catch(console.error);

function handleMessage(message: string) {
  const data = JSON.parse(message);
  updateUI(data);
}

Connection Status Monitoring

typescript
// Check connection before sending
if (ws.getConnectionStatus()) {
  ws.sendMessage('Status update');
} else {
  console.log('Cannot send - not connected');
}

// Periodic status check
setInterval(() => {
  const status = ws.getConnectionStatus() ? 'Connected' : 'Disconnected';
  console.log(`WebSocket Status: ${status}`);
}, 5000);

Error Types

  • URL Not Set: Attempting to connect without setting URL
  • Already Initialized: Multiple initialization attempts
  • Connection Failed: Network or server issues
  • Send Without Connection: Message sent while disconnected
  • Invalid Message: Transmission errors

Best Practices

  • Always set URL before initializing connection
  • Handle promise rejections for all async operations
  • Check connection status before sending messages
  • Set up message handlers before sending data
  • Close connections when component unmounts
  • Implement reconnection logic for production apps