Skip to content

Commit 8d9e500

Browse files
authored
Merge branch 'main' into session-api
2 parents b784dda + 6adfb15 commit 8d9e500

File tree

12 files changed

+289
-98
lines changed

12 files changed

+289
-98
lines changed

.changes/event-logging-trace

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
patch type="changed" "Add event logging with public/internal tagging"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
patch type="changed" "Enabled software AEC/NS/AGC for linux"

example/lib/main.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import 'pages/connect.dart';
77
void main() async {
88
final format = DateFormat('HH:mm:ss');
99
// configure logs for debugging
10-
Logger.root.level = Level.FINE;
10+
Logger.root.level = Level.FINEST;
1111
Logger.root.onRecord.listen((record) {
12-
print('${format.format(record.time)}: ${record.message}');
12+
print('${format.format(record.time)} [${record.level.name}]: ${record.message}');
1313
});
1414

1515
WidgetsFlutterBinding.ensureInitialized();

lib/src/core/room.dart

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
422422
logger.fine('[Engine] Received JoinResponse, '
423423
'serverVersion: ${event.response.serverVersion}');
424424

425-
_localParticipant ??= LocalParticipant(
425+
_localParticipant ??= await LocalParticipant.createFromInfo(
426426
room: this,
427427
info: event.response.participant,
428428
);
@@ -487,7 +487,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
487487
for (final info in event.response.otherParticipants) {
488488
logger.fine('Creating RemoteParticipant: sid = ${info.sid}(identity:${info.identity}) '
489489
'tracks:${info.tracks.map((e) => e.sid)}');
490-
await _getOrCreateRemoteParticipant(info.identity, info);
490+
await _getOrCreateRemoteParticipant(info);
491491
}
492492

493493
if (e2eeManager != null && event.response.sifTrailer.isNotEmpty) {
@@ -657,9 +657,12 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
657657
return null;
658658
}
659659

660-
Future<ParticipantCreationResult> _getOrCreateRemoteParticipant(
661-
String identity, lk_models.ParticipantInfo? info) async {
662-
RemoteParticipant? participant = _remoteParticipants[identity];
660+
Future<ParticipantCreationResult> _getOrCreateRemoteParticipant(lk_models.ParticipantInfo info) async {
661+
if (!info.hasIdentity() || !info.hasSid()) {
662+
throw Exception('ParticipantInfo must have identity and sid');
663+
}
664+
665+
final participant = _remoteParticipants[info.identity];
663666
if (participant != null) {
664667
// Return existing participant with no new publications; caller handles updates.
665668
return ParticipantCreationResult(
@@ -668,25 +671,10 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
668671
);
669672
}
670673

671-
ParticipantCreationResult result;
672-
if (info == null) {
673-
logger.warning('RemoteParticipant.info is null identity: $identity');
674-
participant = RemoteParticipant(
675-
room: this,
676-
sid: '',
677-
identity: identity,
678-
name: '',
679-
);
680-
result = ParticipantCreationResult(
681-
participant: participant,
682-
newPublications: const [],
683-
);
684-
} else {
685-
result = await RemoteParticipant.createFromInfo(
686-
room: this,
687-
info: info,
688-
);
689-
}
674+
final result = await RemoteParticipant.createFromInfo(
675+
room: this,
676+
info: info,
677+
);
690678

691679
_remoteParticipants[result.participant.identity] = result.participant;
692680
_sidToIdentity[result.participant.sid] = result.participant.identity;
@@ -717,7 +705,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
717705
continue;
718706
}
719707

720-
final result = await _getOrCreateRemoteParticipant(info.identity, info);
708+
final result = await _getOrCreateRemoteParticipant(info);
721709

722710
if (isNew) {
723711
hasChanged = true;

lib/src/events.dart

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ import 'types/participant_state.dart' show ParticipantState;
3030
import 'types/transcription_segment.dart';
3131

3232
/// Base type for all LiveKit events.
33-
mixin LiveKitEvent {}
33+
mixin LiveKitEvent {
34+
/// Every event must provide a useful textual representation for logging.
35+
@override
36+
String toString();
37+
}
3438

3539
/// Base type for all [Room] events.
3640
mixin RoomEvent implements LiveKitEvent {}
@@ -47,6 +51,9 @@ mixin EngineEvent implements LiveKitEvent {}
4751
/// Base type for all [SignalClient] events.
4852
mixin SignalEvent implements LiveKitEvent {}
4953

54+
/// Base type for internal-only events.
55+
mixin InternalEvent implements LiveKitEvent {}
56+
5057
class RoomConnectedEvent with RoomEvent {
5158
final Room room;
5259
final String? metadata;
@@ -56,7 +63,7 @@ class RoomConnectedEvent with RoomEvent {
5663
});
5764

5865
@override
59-
String toString() => '${runtimeType}(room: ${room})';
66+
String toString() => '${runtimeType}(room: ${room}, metadata: ${metadata})';
6067
}
6168

6269
/// When the connection to the server has been interrupted and it's attempting
@@ -81,7 +88,9 @@ class RoomAttemptReconnectEvent with RoomEvent {
8188
});
8289

8390
@override
84-
String toString() => '${runtimeType}()';
91+
String toString() => '${runtimeType}'
92+
'(attempt: ${attempt}, maxAttemptsRetry: ${maxAttemptsRetry}, '
93+
'nextRetryDelaysInMs: ${nextRetryDelaysInMs})';
8594
}
8695

8796
/// Connection to room is re-established. All existing state is preserved.
@@ -102,7 +111,7 @@ class RoomDisconnectedEvent with RoomEvent {
102111
});
103112

104113
@override
105-
String toString() => '${runtimeType}($reason)';
114+
String toString() => '${runtimeType}(reason: ${reason})';
106115
}
107116

108117
/// Room metadata has changed.
@@ -115,7 +124,7 @@ class RoomMetadataChangedEvent with RoomEvent {
115124
});
116125

117126
@override
118-
String toString() => '${runtimeType}()';
127+
String toString() => '${runtimeType}(metadata: ${metadata})';
119128
}
120129

121130
/// Participant's attributes have changed.
@@ -130,7 +139,8 @@ class ParticipantAttributesChanged with RoomEvent, ParticipantEvent {
130139
});
131140

132141
@override
133-
String toString() => '${runtimeType}(participant: ${participant})';
142+
String toString() => '${runtimeType}'
143+
'(participant: ${participant}, attributes: ${attributes})';
134144
}
135145

136146
/// Room recording status has changed.
@@ -143,7 +153,7 @@ class RoomRecordingStatusChanged with RoomEvent {
143153
});
144154

145155
@override
146-
String toString() => '${runtimeType}(activeRecording = $activeRecording)';
156+
String toString() => '${runtimeType}(activeRecording: ${activeRecording})';
147157
}
148158

149159
/// When a new [RemoteParticipant] joins *after* the current participant has connected
@@ -238,8 +248,7 @@ class LocalTrackSubscribedEvent with RoomEvent, ParticipantEvent {
238248
});
239249

240250
@override
241-
String toString() => '${runtimeType}'
242-
'(trakSid: ${trackSid}})';
251+
String toString() => '${runtimeType}(trackSid: ${trackSid})';
243252
}
244253

245254
/// The local participant has unpublished one of their [Track].
@@ -287,6 +296,10 @@ class TrackSubscriptionExceptionEvent with RoomEvent, ParticipantEvent {
287296
this.sid,
288297
required this.reason,
289298
});
299+
300+
@override
301+
String toString() => '${runtimeType}'
302+
'(participant: ${participant}, sid: ${sid}, reason: ${reason})';
290303
}
291304

292305
/// The [LocalParticipant] has unsubscribed from a track published by a
@@ -370,7 +383,8 @@ class ParticipantMetadataUpdatedEvent with RoomEvent, ParticipantEvent {
370383
});
371384

372385
@override
373-
String toString() => '${runtimeType}(participant: ${participant})';
386+
String toString() => '${runtimeType}'
387+
'(participant: ${participant}, metadata: ${metadata})';
374388
}
375389

376390
class ParticipantStateUpdatedEvent with RoomEvent, ParticipantEvent {
@@ -417,7 +431,7 @@ class DataReceivedEvent with RoomEvent, ParticipantEvent {
417431

418432
@override
419433
String toString() => '${runtimeType}'
420-
'(participant: ${participant}, data: ${data})';
434+
'(participant: ${participant}, topic: ${topic}, data: ${data})';
421435
}
422436

423437
/// The participant's isSpeaking property has changed
@@ -470,7 +484,8 @@ class ParticipantPermissionsUpdatedEvent with RoomEvent, ParticipantEvent {
470484

471485
@override
472486
String toString() => '${runtimeType}'
473-
'(participant: ${participant}, permissions: ${permissions})';
487+
'(participant: ${participant}, permissions: ${permissions}, '
488+
'oldPermissions: ${oldPermissions})';
474489
}
475490

476491
/// Transcription event received from the server.
@@ -483,6 +498,11 @@ class TranscriptionEvent with RoomEvent, ParticipantEvent {
483498
required this.publication,
484499
required this.segments,
485500
});
501+
502+
@override
503+
String toString() => '${runtimeType}'
504+
'(participant: ${participant}, publication: ${publication}, '
505+
'segments: ${segments})';
486506
}
487507

488508
class ParticipantNameUpdatedEvent with RoomEvent, ParticipantEvent {
@@ -505,8 +525,7 @@ class AudioPlaybackStatusChanged with RoomEvent {
505525
});
506526

507527
@override
508-
String toString() => '${runtimeType}'
509-
'Audio Playback Status Changed, isPlaying: ${isPlaying})';
528+
String toString() => '${runtimeType}(isPlaying: ${isPlaying})';
510529
}
511530

512531
class AudioSenderStatsEvent with TrackEvent {
@@ -519,7 +538,7 @@ class AudioSenderStatsEvent with TrackEvent {
519538

520539
@override
521540
String toString() => '${runtimeType}'
522-
'stats: ${stats})';
541+
'(stats: ${stats}, currentBitrate: ${currentBitrate})';
523542
}
524543

525544
class VideoSenderStatsEvent with TrackEvent {
@@ -534,7 +553,8 @@ class VideoSenderStatsEvent with TrackEvent {
534553

535554
@override
536555
String toString() => '${runtimeType}'
537-
'stats: ${stats})';
556+
'(stats: ${stats}, bitrateForLayers: ${bitrateForLayers}, '
557+
'currentBitrate: ${currentBitrate})';
538558
}
539559

540560
class AudioReceiverStatsEvent with TrackEvent {
@@ -547,7 +567,7 @@ class AudioReceiverStatsEvent with TrackEvent {
547567

548568
@override
549569
String toString() => '${runtimeType}'
550-
'stats: ${stats})';
570+
'(stats: ${stats}, currentBitrate: ${currentBitrate})';
551571
}
552572

553573
class VideoReceiverStatsEvent with TrackEvent {
@@ -560,7 +580,7 @@ class VideoReceiverStatsEvent with TrackEvent {
560580

561581
@override
562582
String toString() => '${runtimeType}'
563-
'stats: ${stats})';
583+
'(stats: ${stats}, currentBitrate: ${currentBitrate})';
564584
}
565585

566586
class AudioVisualizerEvent with TrackEvent {
@@ -572,8 +592,7 @@ class AudioVisualizerEvent with TrackEvent {
572592
});
573593

574594
@override
575-
String toString() => '${runtimeType}'
576-
'track: ${track})';
595+
String toString() => '${runtimeType}(track: ${track}, event: ${event})';
577596
}
578597

579598
class TrackProcessorUpdateEvent with TrackEvent {
@@ -586,7 +605,7 @@ class TrackProcessorUpdateEvent with TrackEvent {
586605

587606
@override
588607
String toString() => '${runtimeType}'
589-
'track: ${track})';
608+
'(track: ${track}, processor: ${processor})';
590609
}
591610

592611
/// Pre-connect audio buffer has started recording.

0 commit comments

Comments
 (0)