subscribe method

Implementation

Future<ParseLiveQuerySubscription> subscribe(
  ParseQuery<ParseObject> query, {
  ParseLiveQuerySubscription? subscription,
}) async {
  final selectedKeys = query.selectedKeys;
  final Map<String, dynamic>? where = query.toJsonParams()['where'];
  subscription ??= ParseLiveQuerySubscription(
    clientId: _clientId,
    requestId: requestIdCounter++,
    parseQuery: query,
  );

  if (subscription.requestId != null) {
    mapRequestSubscription[subscription.requestId!] = subscription;
  }

  final subscribeMessage = <String, dynamic>{
    'op': 'subscribe',
    'requestId': subscription.requestId,
    'query': <String, dynamic>{
      'className': query.className,
      'where': where ?? {},
    }
  };

  if (selectedKeys != null && selectedKeys.isNotEmpty) {
    subscribeMessage['fields'] = selectedKeys;
  }

  final user = await ParseUser.currentUser;
  if (user != null && user.sessionId != null) {
    subscribeMessage['sessionToken'] = user.sessionId;
  }

  parseLiveQueryClient.sendMessage(json.encode(subscribeMessage));

  return subscription;
}