sendTypingSignal method
Implementation
Future<void> sendTypingSignal({
required String type,
required String actor,
required DateTime expiresAt,
Map<String, dynamic> extraPayload = const {},
String? eventId,
}) {
final publisher = _ephemeralPublisher;
final channel = _activeRoomChannel;
final channelName = _activeRoomChannelName;
final auth = _activeRoomAuth;
final socketId = _socketId;
if (publisher == null) {
throw StateError('No EphemeralPublishPort configured on this client.');
}
if (channel == null || channelName == null || socketId == null) {
throw StateError(
'No active room subscription to send a typing signal for.');
}
if (auth == null) {
throw StateError(
'The active room\'s presence-channel authorization has not resolved yet.');
}
final envelope = <String, dynamic>{
'version': 1,
'id': eventId ?? generateEventId(),
'kind': 'ephemeral',
'domain': presenceDomain,
'type': type,
'tenant': channel.tenant,
'occurred_at':
DateTime.fromMillisecondsSinceEpoch(_clock.now(), isUtc: true)
.toIso8601String(),
'subject': {'type': 'room', 'id': channel.roomId},
'expires_at': expiresAt.toUtc().toIso8601String(),
'payload': {'actor': actor, ...extraPayload},
};
return publisher.publish(
EphemeralPublishRequest(
channelName: channelName,
socketId: socketId,
auth: auth.auth,
channelData: auth.channelData ?? '',
envelope: envelope,
),
);
}