executeSubscription method

Future<Snapshot> executeSubscription(
  1. Query query
)

Execute a Subscription from a Query

Implementation

Future<Snapshot> executeSubscription(Query query) async {
  Snapshot snapshot;
  if (snapmap.containsKey(query.key)) {
    return snapmap[query.key]!;
  } else {
    final usecase = sl.get<GetSnapshotSubscription>();
    final request = Request(
      url: url,
      type: RequestType.subscription,
      query: query,
    );
    final result = usecase(
      closeConnection: _removeSnapshot,
      changeVariables: _changeVariables,
      request: request,
    );
    snapshot = result.fold((l) => throw l, (s) => s);
    snapmap[query.key!] = snapshot;
    await _interceptorExecutor.onSubscription(request, snapshot);
  }

  if (snapmap.keys.isNotEmpty && !_isConnected) {
    // ignore: unawaited_futures
    _connect();
    await Future.delayed(const Duration(milliseconds: 500));
  } else if (_isConnected) {
    final input = querySubscription(snapshot.query);
    sendToWebSocketServer(input);
  }
  return snapshot;
}