request method

  1. @override
Stream<Response> request(
  1. Request request, [
  2. NextLink? forward
])

A function called when a request reaches this Link

Implementation

@override
Stream<Response> request(Request request, [forward]) async* {
  final connectionStateController = StreamController<_ActionCableEvent>();
  final response = StreamController<Response>();

  connectionStateController.stream.listen((event) {
    switch (event.state) {
      case ConnectionState.Connected:
        _subscribed(event.request, response);
        break;
      case ConnectionState.Disconnected:
      case ConnectionState.CannotConnect:
      case ConnectionState.ConnectionLost:
        _retryTimer ??= Timer(retryDuration, () {
          _connect(event.request, connectionStateController);
          _retryTimer!.cancel();
          _retryTimer = null;
        });

        break;
      default:
    }
  });

  _connect(request, connectionStateController);

  response.onCancel = () {
    _cable?.disconnect();
    _retryTimer?.cancel();
    connectionStateController.close();
  };

  yield* response.stream;
}