connect method

Future<void> connect()

Connect to the sessions WebSocket endpoint.

Implementation

Future<void> connect() async {
  if (_state == WebSocketState.connecting) return;

  _state = WebSocketState.connecting;

  final url =
      '$_baseWsUrl/v1/sessions/ws/$_sessionId/subscribe'
      '?organization_uuid=$_orgUuid';

  final accessToken = _getAccessToken();
  final headers = <String, dynamic>{
    'Authorization': 'Bearer $accessToken',
    'anthropic-version': '2023-06-01',
  };

  try {
    _ws = await WebSocket.connect(url, headers: headers);
    _state = WebSocketState.connected;
    _reconnectAttempts = 0;
    _sessionNotFoundRetries = 0;
    _startPingInterval();
    _callbacks.onConnected?.call();

    _wsSubscription = _ws!.listen(
      (data) => _handleMessage(data is String ? data : data.toString()),
      onDone: () => _handleClose(_ws?.closeCode ?? 1006),
      onError: (Object error) {
        _callbacks.onError?.call(error);
      },
    );
  } catch (e) {
    _callbacks.onError?.call(e);
    _handleClose(1006); // abnormal closure
  }
}