broadcastMessage method

  1. @override
Future<void> broadcastMessage(
  1. Message message, {
  2. List<String>? excludeClientIds,
})
override

Broadcast a message to all subscribed clients

Implementation

@override
Future<void> broadcastMessage(
  Message message, {
  List<String>? excludeClientIds,
}) async {
  final documentId = message.documentId;
  final sessions = List.of(_sessions.values);

  final sessionsReached = <String>[];

  for (final session in sessions) {
    final isExcluded = excludeClientIds?.contains(session.id) ?? false;
    final isSubscribed = session.isSubscribedTo(documentId);

    if (!isExcluded && isSubscribed) {
      await session.sendMessage(message);
      sessionsReached.add(session.id);
    }
  }

  if (sessionsReached.isNotEmpty) {
    _addServerEvent(
      ServerEvent(
        type: ServerEventType.messageBroadcasted,
        message: 'Message broadcasted to ${sessionsReached.length} clients',
        data: {
          'documentId': documentId,
          'sessionsReached': sessionsReached,
          'message': message.toJson(),
        },
      ),
    );
  }
}