connect method

  1. @override
Future<void> connect(
  1. String url, {
  2. Map<String, dynamic>? headers,
  3. Map<String, dynamic>? options,
})
override

Connect to a WebSocket endpoint.

Implementation

@override
Future<void> connect(
  String url, {
  Map<String, dynamic>? headers,
  Map<String, dynamic>? options,
}) async {
  if (_socket != null) {
    return;
  }

  final socketOptions = <String, dynamic>{
    'transports': ['websocket'],
    'autoConnect': true,
  };

  if (options != null) {
    socketOptions.addAll(options);
  }
  if (headers != null && headers.isNotEmpty) {
    socketOptions['extraHeaders'] = headers;
  }

  final socket = io.io(url, socketOptions);
  _socket = socket;

  final completer = Completer<void>();
  socket.onConnect((_) {
    if (!completer.isCompleted) {
      completer.complete();
    }
  });
  socket.onConnectError((error) {
    if (!completer.isCompleted) {
      completer.completeError(
        DSWebSocketError(
          'Socket.IO connection failed.',
          originalError: error,
        ),
      );
    }
  });
  socket.onError((error) {
    if (!completer.isCompleted) {
      completer.completeError(
        DSWebSocketError(
          'Socket.IO connection error.',
          originalError: error,
        ),
      );
    }
  });

  return completer.future;
}