handle room update message (#79)

This commit is contained in:
davidliu
2022-02-07 12:37:47 +09:00
committed by GitHub
parent 9bd546b9a2
commit 29c2117453
6 changed files with 41 additions and 4 deletions
+2
View File
@@ -656,6 +656,8 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
..on<SignalSubscribedQualityUpdatedEvent>((event) => events.emit(event))
// relay to Room
..on<SignalSubscriptionPermissionUpdateEvent>((event) => events.emit(event))
// relay to Room
..on<SignalRoomUpdateEvent>((event) => events.emit(event))
..on<SignalTokenUpdatedEvent>((event) {
logger.fine('Server refreshed the token');
token = event.token;
+7
View File
@@ -52,6 +52,9 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
/// sid of the room
String? sid;
/// metadata of the room
String? metadata;
/// Server version
String? get serverVersion => _serverVersion;
String? _serverVersion;
@@ -202,6 +205,10 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
//
await publication.updateSubscriptionAllowed(event.allowed);
})
..on<SignalRoomUpdateEvent>((event) async {
metadata = event.room.metadata;
events.emit(RoomMetadataChangedEvent(metadata: event.room.metadata));
})
..on<EngineTrackAddedEvent>((event) async {
logger.fine('EngineTrackAddedEvent trackSid:${event.track.id}');
+1 -1
View File
@@ -176,7 +176,7 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
SignalSpeakersChangedEvent(speakers: msg.speakersChanged.speakers));
break;
case lk_rtc.SignalResponse_Message.roomUpdate:
// TODO
events.emit(SignalRoomUpdateEvent(room: msg.roomUpdate.room));
break;
case lk_rtc.SignalResponse_Message.connectionQuality:
events.emit(SignalConnectionQualityUpdateEvent(
+14
View File
@@ -56,11 +56,25 @@ class RoomDisconnectedEvent with RoomEvent {
String toString() => '${runtimeType}()';
}
/// Room metadata has changed.
/// Emitted by [Room].
class RoomMetadataChangedEvent with RoomEvent {
final String? metadata;
const RoomMetadataChangedEvent({
required this.metadata,
});
@override
String toString() => '${runtimeType}()';
}
/// When a new [RemoteParticipant] joins *after* the current participant has connected
/// It will not fire for participants that are already in the room
/// Emitted by [Room].
class ParticipantConnectedEvent with RoomEvent {
final RemoteParticipant participant;
const ParticipantConnectedEvent({
required this.participant,
});
+9
View File
@@ -155,17 +155,26 @@ class SignalConnectionQualityUpdateEvent
class SignalLocalTrackPublishedEvent with SignalEvent, InternalEvent {
final String cid;
final lk_models.TrackInfo track;
const SignalLocalTrackPublishedEvent({
required this.cid,
required this.track,
});
}
@internal
class SignalRoomUpdateEvent with SignalEvent, EngineEvent, InternalEvent {
final lk_models.Room room;
const SignalRoomUpdateEvent({required this.room});
}
@internal
// Speaker update received through websocket
// relayed by Engine
class SignalSpeakersChangedEvent with SignalEvent, EngineEvent, InternalEvent {
final List<lk_models.SpeakerInfo> speakers;
const SignalSpeakersChangedEvent({
required this.speakers,
});
+8 -3
View File
@@ -84,10 +84,15 @@ void main() {
);
});
test('room update', () async {
test('room metadata update', () async {
expect(
room.events.streamCtrl.stream,
emits(predicate<RoomMetadataChangedEvent>((event) =>
event.metadata == roomUpdateResponse.roomUpdate.room.metadata &&
room.metadata == event.metadata)),
);
ws.onData(roomUpdateResponse.writeToBuffer());
// TODO: room update event and handling
}, skip: 'todo');
});
test('connection quality', () async {
expect(