connectWithCredential method

void connectWithCredential(
  1. CredentialConfig credentialConfig
)

Connects to the WebSocket using the provided CredentialConfig

Implementation

void connectWithCredential(CredentialConfig credentialConfig) {
  // Store current config for potential fallback
  _currentConfig = credentialConfig;

  // First check if there is a custom logger set within the config - if so, we set it here
  // Use custom logger if provided or fallback to default.
  _logger = credentialConfig.customLogger ?? DefaultLogger();
  GlobalLogger.logger = _logger;
  GlobalLogger().i(
    'TelnyxClient.connectWithCredential: Attempting to connect.',
  );

  // Now that a logger is set, we can set the log level
  _logger
    ..setLogLevel(credentialConfig.logLevel)
    ..log(LogLevel.info, 'connect()');
  try {
    // Build the host address with region support
    final hostAddress = _buildHostAddress(
      credentialConfig,
      voiceSdkId: _pushMetaData?.voiceSdkId,
    );

    txSocket.hostAddress = hostAddress;
    GlobalLogger().i('connecting to WebSocket $hostAddress');
    txSocket
      ..onOpen = () {
        _closed = false;
        _connected = true;
        _isRegionFallbackAttempt =
            false; // Reset fallback flag on successful connection
        GlobalLogger().i(
          'TelnyxClient.connectWithCredential (via _onOpen): Web Socket is now connected',
        );
        _onOpen();
        credentialLogin(credentialConfig);
      }
      ..onMessage = (dynamic data) {
        _onMessage(data);
      }
      ..onClose = (int closeCode, String closeReason) {
        GlobalLogger().i('Closed [$closeCode, $closeReason]!');
        _connected = false;
        bool wasClean = WebSocketUtils.isCleanClose(closeCode, closeReason);
        _onClose(wasClean, closeCode, closeReason);
      }
      ..connect();
  } catch (e) {
    GlobalLogger().e(e.toString());
    _connected = false;
    GlobalLogger().e('WebSocket $_storedHostAddress error: $e');
  }
}