broadcastMessage method
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(),
},
),
);
}
}