connect method

void connect()

Implementation

void connect() {
  if (_baseURL == null) {
    return;
  }

  String urlString = _baseURL!;
  if (urlString.startsWith("https://")) {
    urlString = urlString.replaceFirst("https://", "wss://");
  } else if (!urlString.startsWith("wss://")) {
    urlString = "wss://$urlString";
  }

  if (urlString.contains(":0/")) {
    urlString = urlString.replaceAll(":0/", "/");
  }

  if (!urlString.contains("/cable")) {
    urlString += "/cable";
  }

  final queryParams = <String, String>{};

  if (_sessionToken != null) {
    queryParams['session_token'] = _sessionToken!;
  }

  final uri = Uri.parse(urlString).replace(queryParameters: queryParams);

  try {
    _channel = IOWebSocketChannel.connect(
      uri,
      headers: {
        'Origin': 'https://api.bynn.com',
        'Authorization': _sessionToken != null ? 'Bearer $_sessionToken' : '',
      },
    );

    Future.delayed(const Duration(milliseconds: 500), () {
      _sendSubscriptionMessage();
    });

    _subscription = _channel!.stream.listen(
      _onMessage,
      onError: (error) {
        _scheduleReconnect();
      },
      onDone: () {
        if (state.isConnected) {
          _scheduleReconnect();
        }
      },
    );

    _startPingTimer();

    state = state.copyWith(
      isConnected: true,
      connectionFailed: false,
    );

  } catch (e) {
    _scheduleReconnect();
  }
}