joinPresence method

  1. @override
Stream<List<Map<String, dynamic>>> joinPresence(
  1. String channelName,
  2. Map<String, dynamic> userInfo
)
override

Joins presence in channelName publishing userInfo metadata.

Returns a broadcast Stream emitting the list of active users in the channel. Automatically subscribes to channelName and re-registers presence across reconnects.

Implementation

@override
Stream<List<Map<String, dynamic>>> joinPresence(
  String channelName,
  Map<String, dynamic> userInfo,
) {
  _desiredPresenceJoins[channelName] = userInfo;
  final isNew = _desiredSubscriptions.add(channelName);

  final stream = _presenceStreams.putIfAbsent(channelName, () {
    final controller =
        StreamController<List<Map<String, dynamic>>>.broadcast();
    _presenceControllers[channelName] = controller;
    return controller.stream;
  });

  if (isConnected) {
    if (isNew) {
      send(RealtimeMessage.subscribe(channelName));
    }
    send(RealtimeMessage.presenceJoin(channelName, userInfo));
  }

  return stream;
}