connectWithToken method

void connectWithToken(
  1. TokenConfig tokenConfig
)

Connects to the WebSocket using the provided tokenConfig

Implementation

void connectWithToken(TokenConfig tokenConfig) {
  // Store current config for potential fallback
  _currentConfig = tokenConfig;

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

  // Now that a logger is set, we can set the log level
  _logger
    ..setLogLevel(tokenConfig.logLevel)
    ..log(LogLevel.info, 'connect()')
    ..log(LogLevel.info, 'connecting to WebSocket $_storedHostAddress');
  try {
    // Build the host address with region support
    final hostAddress = _buildHostAddress(
      tokenConfig,
      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.connectWithToken (via _onOpen): Web Socket is now connected',
        );
        _onOpen();
        tokenLogin(tokenConfig);
      }
      ..onMessage = (dynamic data) {
        _onMessage(data);
      }
      ..onClose = (int closeCode, String closeReason) {
        GlobalLogger().i('Closed [$closeCode, $closeReason]!');
        _connected = false;
        final wasClean = WebSocketUtils.isCleanClose(closeCode, closeReason);
        _onClose(wasClean, closeCode, closeReason);
      }
      ..connect();
  } catch (e) {
    GlobalLogger().e(e.toString());
    _connected = false;
    GlobalLogger().e('WebSocket $_storedHostAddress error: $e');
  }
}