executeSubscription method
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;
}