flutter_websocket_plus 0.1.0 copy "flutter_websocket_plus: ^0.1.0" to clipboard
flutter_websocket_plus: ^0.1.0 copied to clipboard

WebSocket connection management with reconnection logic and message queuing. Supports all 6 platforms with WASM compatibility.

example/example.dart

import 'dart:async';
import 'package:flutter_websocket_plus/flutter_websocket_plus.dart';

String _separator() => List.filled(60, '=').join();

void main() async {
  print('πŸš€ flutter_websocket_plus - Comprehensive Example');
  print(_separator());

  // ============================================================
  // Feature 1: Configurable - Show all configuration options
  // ============================================================
  print('\nπŸ“‹ Feature: Configurable');
  print('Creating WebSocket configuration with all options...');

  final config = WebSocketConfig(
    url: 'wss://echo.websocket.org',
    connectionTimeout: Duration(seconds: 30),
    enableReconnection: true,
    maxReconnectionAttempts: 10,
    initialReconnectionDelay: Duration(seconds: 1),
    maxReconnectionDelay: Duration(minutes: 5),
    enableMessageQueue: true,
    maxQueueSize: 1000,
    heartbeatInterval: Duration(seconds: 30),
    enableHeartbeat: true,
    headers: {'User-Agent': 'flutter_websocket_plus'},
    protocols: [],
  );

  print('βœ“ Configuration created with:');
  print('  - URL: ${config.url}');
  print('  - Reconnection: ${config.enableReconnection}');
  print('  - Message Queue: ${config.enableMessageQueue}');
  print('  - Heartbeat: ${config.enableHeartbeat}');

  // ============================================================
  // Feature 2: Custom Reconnection Strategy
  // ============================================================
  print('\nπŸ”„ Feature: Automatic Reconnection with Custom Strategy');
  print('Creating exponential backoff reconnection strategy...');

  final reconnectionStrategy = ExponentialBackoffStrategy(
    initialDelay: Duration(seconds: 1),
    maxDelay: Duration(minutes: 5),
    multiplier: 2.0,
  );

  print('βœ“ Reconnection strategy created');

  // ============================================================
  // Feature 3: WebSocket Manager Creation
  // ============================================================
  print('\nπŸ”§ Feature: WebSocket Manager');
  print('Creating WebSocket manager...');

  final manager = WebSocketManager(
    config: config,
    reconnectionStrategy: reconnectionStrategy,
  );

  print('βœ“ Manager created');

  // ============================================================
  // Feature 4: Event Handling
  // ============================================================
  print('\nπŸ“‘ Feature: Event Handling');
  print('Setting up event listeners...');

  manager.eventStream.listen((event) {
    switch (event.type) {
      case 'connecting':
        print('  πŸ“‘ Event: Connecting to server...');
        break;
      case 'connected':
        print('  βœ… Event: Connected to WebSocket server');
        break;
      case 'disconnected':
        print('  ❌ Event: Disconnected from server');
        break;
      case 'reconnecting':
        print('  πŸ”„ Event: Reconnecting... Attempt ${event.data}');
        break;
      case 'messageSent':
        print('  πŸ“€ Event: Message sent');
        break;
      case 'messageQueued':
        print('  πŸ“¬ Event: Message queued (connection down)');
        break;
      case 'error':
        print('  ⚠️  Event: Error - ${event.data}');
        break;
      default:
        print('  πŸ“¨ Event: ${event.type}');
    }
  });

  print('βœ“ Event listeners set up');

  // ============================================================
  // Feature 5: Connection State Monitoring
  // ============================================================
  print('\nπŸ“Š Feature: Connection State Monitoring');
  print('Setting up state stream listener...');

  manager.stateStream.listen((state) {
    print('  πŸ“Š State: ${state.connectionState.name}');
    print('    - Queue size: ${state.queueSize}');
    print('    - Reconnecting: ${state.isReconnecting}');
    print('    - Attempt: ${state.reconnectionAttempt}');
  });

  print('βœ“ State monitoring set up');

  // ============================================================
  // Feature 6: Message Listening
  // ============================================================
  print('\nπŸ“¨ Feature: Message Listening');
  print('Setting up message stream listener...');

  manager.messageStream.listen((message) {
    print('  πŸ“¨ Received: ${message.type} message');
    print('    - Data: ${message.data}');
    print('    - Timestamp: ${message.timestamp}');
    print('    - ID: ${message.id}');
  });

  print('βœ“ Message listener set up');

  // ============================================================
  // Feature 7: Connect to Server
  // ============================================================
  print('\nπŸ”Œ Feature: Connection');
  print('Connecting to WebSocket server...');

  try {
    await manager.connect();
    print('βœ“ Connection initiated');

    // Wait a bit for connection to establish
    await Future.delayed(Duration(seconds: 2));

    if (manager.isConnected) {
      print('βœ… Successfully connected!');
    } else {
      print('⏳ Connection in progress...');
    }
  } catch (e) {
    print('❌ Connection error: $e');
  }

  // ============================================================
  // Feature 8: Send Different Message Types
  // ============================================================
  print('\nπŸ“€ Feature: Sending Messages');

  if (manager.isConnected) {
    print('Sending text message...');
    await manager.sendText('Hello, WebSocket!');
    await Future.delayed(Duration(milliseconds: 500));

    print('Sending JSON message...');
    await manager.sendJson({
      'type': 'message',
      'content': 'Hello from flutter_websocket_plus!',
      'timestamp': DateTime.now().toIso8601String(),
    });
    await Future.delayed(Duration(milliseconds: 500));

    print('Sending binary message...');
    await manager.sendBinary([72, 101, 108, 108, 111]); // "Hello" in bytes
    await Future.delayed(Duration(milliseconds: 500));

    print('βœ“ Messages sent');
  } else {
    print('⚠️  Not connected, messages will be queued');

    // Feature 9: Message Queuing (when disconnected)
    print('\nπŸ“¬ Feature: Message Queuing');
    print('Sending message while disconnected (will be queued)...');

    final queuedMessage = WebSocketMessage.json({
      'type': 'queued',
      'data': 'This will be queued',
    }, requiresAck: true);

    await manager.send(queuedMessage);
    print('βœ“ Message queued (queue size: ${manager.queueStatistics['size']})');
  }

  // ============================================================
  // Feature 10: Heartbeat Support
  // ============================================================
  print('\nπŸ’“ Feature: Heartbeat Support');
  if (config.enableHeartbeat) {
    print('Heartbeat is enabled (interval: ${config.heartbeatInterval})');
    print('Ping messages will be sent automatically');

    // Manually send ping to demonstrate
    if (manager.isConnected) {
      print('Sending manual ping...');
      await manager.sendPing();
      await Future.delayed(Duration(milliseconds: 500));
      print('βœ“ Ping sent');
    }
  } else {
    print('Heartbeat is disabled');
  }

  // ============================================================
  // Feature 11: Statistics & Monitoring
  // ============================================================
  print('\nπŸ“Š Feature: Statistics & Monitoring');
  print('Getting comprehensive statistics...');

  final stats = manager.getStatistics();
  print('\nπŸ“ˆ Manager Statistics:');
  print('  - Connection State: ${stats['connectionState']}');
  print('  - Is Connected: ${stats['isConnected']}');
  print('  - Is Reconnecting: ${stats['isReconnecting']}');
  print('  - Reconnection Attempts: ${stats['reconnectionAttempt']}');

  if (stats['connectionStatistics'] != null) {
    final connStats = stats['connectionStatistics'] as Map<String, dynamic>;
    print('\nπŸ“‘ Connection Statistics:');
    print('  - Messages Sent: ${connStats['messagesSent'] ?? 0}');
    print('  - Messages Received: ${connStats['messagesReceived'] ?? 0}');
    print('  - Errors: ${connStats['errorsCount'] ?? 0}');
    print('  - Ping Sent: ${connStats['pingSent'] ?? 0}');
    print('  - Pong Received: ${connStats['pongReceived'] ?? 0}');
    if (connStats['heartbeatHealth'] != null) {
      print('  - Heartbeat Health: ${connStats['heartbeatHealth']}');
    }
  }

  final queueStats = manager.queueStatistics;
  print('\nπŸ“¬ Queue Statistics:');
  print('  - Size: ${queueStats['size']}');
  print('  - Max Size: ${queueStats['maxSize']}');
  print('  - Utilization: ${queueStats['utilization']}');
  print('  - Retryable: ${queueStats['retryableCount']}');
  print('  - Ack Required: ${queueStats['ackRequiredCount']}');

  print('βœ“ Statistics retrieved');

  // ============================================================
  // Feature 12: Error Handling
  // ============================================================
  print('\nπŸ›‘οΈ  Feature: Error Handling');
  print('Error handling is demonstrated through:');
  print('  - Automatic reconnection on connection failure');
  print('  - Message queuing when connection is down');
  print('  - Retry mechanism for failed messages');
  print('  - Error events in event stream');
  print('βœ“ Error handling is active');

  // ============================================================
  // Feature 13: Cross-Platform Support
  // ============================================================
  print('\nπŸš€ Feature: Cross-Platform Support');
  print('This package works on:');
  print('  βœ… iOS');
  print('  βœ… Android');
  print('  βœ… Web (including WASM)');
  print('  βœ… Windows');
  print('  βœ… macOS');
  print('  βœ… Linux');
  print('βœ“ Cross-platform support verified');

  // ============================================================
  // Wait and demonstrate features
  // ============================================================
  print('\n⏳ Waiting 5 seconds to demonstrate real-time features...');
  print('(Watch for heartbeat pings, message responses, etc.)\n');

  await Future.delayed(Duration(seconds: 5));

  // ============================================================
  // Final Statistics
  // ============================================================
  print('\nπŸ“Š Final Statistics:');
  final finalStats = manager.getStatistics();
  print('  Connection State: ${finalStats['connectionState']}');
  print('  Queue Size: ${finalStats['queueStatistics']['size']}');

  if (finalStats['connectionStatistics'] != null) {
    final connStats =
        finalStats['connectionStatistics'] as Map<String, dynamic>;
    print('  Messages Sent: ${connStats['messagesSent'] ?? 0}');
    print('  Messages Received: ${connStats['messagesReceived'] ?? 0}');
  }

  // ============================================================
  // Cleanup
  // ============================================================
  print('\n🧹 Cleaning up...');
  await manager.dispose();
  print('βœ“ Manager disposed');

  print('\n' + _separator());
  print('✨ Example completed! All features demonstrated.');
  print(_separator());
}
2
likes
160
points
120
downloads

Publisher

verified publisherbechattaoui.dev

Weekly Downloads

WebSocket connection management with reconnection logic and message queuing. Supports all 6 platforms with WASM compatibility.

Repository (GitHub)
View/report issues

Topics

#websocket #networking #real-time #communication #reconnection

Documentation

Documentation
API reference

Funding

Consider supporting this project:

github.com

License

MIT (license)

Dependencies

flutter, http, web_socket_channel

More

Packages that depend on flutter_websocket_plus