send method

Future<bool> send(
  1. WebSocketMessage message
)

Sends a message through the WebSocket connection.

Implementation

Future<bool> send(WebSocketMessage message) async {
  if (!isConnected) {
    throw const WebSocketException.messageSendFailed(
      'Connection not established',
    );
  }

  try {
    if (message.isText) {
      _channel!.sink.add(message.data as String);
    } else if (message.isBinary) {
      _channel!.sink.add(message.data as List<int>);
    } else if (message.isJson) {
      // Properly serialize JSON using jsonEncode
      _channel!.sink.add(jsonEncode(message.data));
    } else if (message.isControl) {
      // For ping/pong, send as text message for application-level heartbeat
      _channel!.sink.add(message.data as String);
    } else {
      _channel!.sink.add(message.data.toString());
    }

    _lastMessageTime = DateTime.now();
    _messagesSent++;

    // Track ping/pong for heartbeat statistics
    if (message.type == 'ping') {
      _pingSent++;
      _lastPingTime = DateTime.now();
    }

    _eventController.add(WebSocketEvent.messageSent(message));
    _updateStatistics();

    return true;
  } catch (e) {
    _errorsCount++;
    _updateStatistics();
    throw WebSocketException.messageSendFailed('Failed to send message: $e');
  }
}