LCOV - code coverage report
Current view: top level - src/workers - websocket_worker.dart Coverage Total Hit
Test: lcov.info Lines: 100.0 % 13 13
Test Date: 2026-04-30 18:23:23 Functions: - 0 0

            Line data    Source code
       1              : import 'package:flutter/foundation.dart';
       2              : 
       3              : import '../worker.dart';
       4              : 
       5              : /// Connect to a WebSocket endpoint, send messages, and receive responses.
       6              : ///
       7              : /// The worker connects to [url], sends each string in [messages] after the
       8              : /// connection is established, waits for [receiveMessages] server responses,
       9              : /// then closes the connection cleanly.
      10              : ///
      11              : /// **Platform support:** Android only. Calling this on iOS will return a
      12              : /// failure result with message `"WebSocketWorker is not supported on iOS"`.
      13              : ///
      14              : /// ```dart
      15              : /// await NativeWorkManager.enqueue(
      16              : ///   taskId: 'ws-ping',
      17              : ///   worker: NativeWorker.webSocket(
      18              : ///     url: 'wss://api.example.com/ws',
      19              : ///     messages: ['{"type":"ping"}'],
      20              : ///     receiveMessages: 1,
      21              : ///   ),
      22              : /// );
      23              : /// ```
      24              : ///
      25              : /// **Result data (success):**
      26              : /// ```json
      27              : /// {
      28              : ///   "connected": true,
      29              : ///   "messagesSent": 1,
      30              : ///   "messagesReceived": 1,
      31              : ///   "messages": ["{\"type\":\"pong\"}"]
      32              : /// }
      33              : /// ```
      34              : ///
      35              : /// Optionally persist received messages to disk via [storeResponseAt].
      36              : @immutable
      37              : final class WebSocketWorker extends Worker {
      38            1 :   const WebSocketWorker({
      39              :     required this.url,
      40              :     this.messages = const [],
      41              :     this.headers = const {},
      42              :     this.timeoutSeconds = 30,
      43              :     this.receiveMessages = 1,
      44              :     this.storeResponseAt,
      45              :     this.pingIntervalSeconds,
      46              :   });
      47              : 
      48              :   /// WebSocket endpoint URL. Must use `ws://` or `wss://` scheme.
      49              :   final String url;
      50              : 
      51              :   /// Messages to send after the connection is established.
      52              :   final List<String> messages;
      53              : 
      54              :   /// Optional HTTP upgrade headers (e.g. `Authorization: Bearer …`).
      55              :   final Map<String, String> headers;
      56              : 
      57              :   /// Total connection timeout in seconds. Default `30`.
      58              :   final int timeoutSeconds;
      59              : 
      60              :   /// Number of server messages to wait for before closing. Default `1`.
      61              :   final int receiveMessages;
      62              : 
      63              :   /// Optional absolute path to write received messages as a JSON array.
      64              :   final String? storeResponseAt;
      65              : 
      66              :   /// Optional WebSocket ping interval in seconds (keep-alive).
      67              :   final int? pingIntervalSeconds;
      68              : 
      69            1 :   @override
      70              :   String get workerClassName => 'WebSocketWorker';
      71              : 
      72            1 :   @override
      73            1 :   Map<String, dynamic> toMap() => {
      74            1 :         'workerType': 'webSocket',
      75            2 :         'url': url,
      76            2 :         'messages': messages,
      77            4 :         if (headers.isNotEmpty) 'headers': headers,
      78            2 :         'timeoutSeconds': timeoutSeconds,
      79            2 :         'receiveMessages': receiveMessages,
      80            3 :         if (storeResponseAt != null) 'storeResponseAt': storeResponseAt,
      81            1 :         if (pingIntervalSeconds != null)
      82            2 :           'pingIntervalSeconds': pingIntervalSeconds,
      83              :       };
      84              : }
        

Generated by: LCOV version 2.4-0