send method

  1. @override
Future<void> send(
  1. dynamic data
)
override

Sends raw data through the WebSocket

Implementation

@override
Future<void> send(dynamic data) async {
  if (_disposed) return;
  if (_currentState != WebSocketState.connected) {
    throw StateError('WebSocket is not connected');
  }

  if (_shouldFailSending) {
    final error = Exception('Mock sending failure');
    if (!_disposed) _errorController.add(error);
    throw error;
  }

  WebSocketMessage message;
  if (data is String) {
    if (_isPingMessageData(data)) {
      message = WebSocketMessage(
        data: data,
        timestamp: DateTime.now(),
        type: 'heartbeat',
        metadata: {'isHeartbeat': true},
      );
    } else {
      try {
        final jsonData = jsonDecode(data);
        message = WebSocketMessage.json(jsonData);
      } catch (_) {
        message = WebSocketMessage.text(data);
      }
    }
  } else if (data is List<int>) {
    message = WebSocketMessage.binary(data);
  } else {
    message = WebSocketMessage.now(data: data);
  }

  _sentMessages.add(message);

  if (_autoRespondToPing && _isPingMessage(message)) {
    final t = Timer(Duration(milliseconds: 50), () {
      if (!_disposed) simulatePongMessage();
    });
    _timers.add(t);
  }
}