Subscription permission API (#68)

* signal

* request

* implement

* rename event

* ref

* adjustments based on review

* override subscribed

* move events emit

* fix subscription state

* minor change

* update example for permissions demo

* format & subscriptionState as computed property

* prepare macos build

* unsubscribed event when subscription not allowed
This commit is contained in:
Hiroshi Horie
2022-01-10 23:48:44 +07:00
committed by GitHub
parent 9a37129504
commit aef1fd8804
12 changed files with 259 additions and 24 deletions
+2
View File
@@ -621,6 +621,8 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
..on<SignalStreamStateUpdatedEvent>((event) => events.emit(event))
// relay to Room
..on<SignalSubscribedQualityUpdatedEvent>((event) => events.emit(event))
// relay to Room
..on<SignalSubscriptionPermissionUpdateEvent>((event) => events.emit(event))
..on<SignalLeaveEvent>((event) async {
if (connectionState == ConnectionState.reconnecting) {
logger.warning('Received leave signal while engine is reconnecting.');
+19
View File
@@ -191,6 +191,25 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
}
publication.updatePublishingLayers(event.updates);
})
..on<SignalSubscriptionPermissionUpdateEvent>((event) async {
logger.fine('SignalSubscriptionPermissionUpdateEvent '
'participantSid:${event.participantSid} '
'trackSid:${event.trackSid} '
'allowed:${event.allowed}');
// find participant
final participant = _participants[event.participantSid];
if (participant == null) {
return;
}
// find track
final publication = participant.trackPublications[event.trackSid];
if (publication == null) {
return;
}
//
await publication.updateSubscriptionAllowed(event.allowed);
})
..on<EngineTrackAddedEvent>((event) async {
logger.fine('EngineTrackAddedEvent trackSid:${event.track.id}');
+18
View File
@@ -186,6 +186,13 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
updates: msg.subscribedQualityUpdate.subscribedQualities,
));
break;
case lk_rtc.SignalResponse_Message.subscriptionPermissionUpdate:
events.emit(SignalSubscriptionPermissionUpdateEvent(
participantSid: msg.subscriptionPermissionUpdate.participantSid,
trackSid: msg.subscriptionPermissionUpdate.trackSid,
allowed: msg.subscriptionPermissionUpdate.allowed,
));
break;
default:
logger.warning('skipping unsupported signal message');
}
@@ -296,6 +303,17 @@ extension SignalClientRequests on SignalClient {
),
));
void sendUpdateSubscriptionPermissions({
required bool allParticipants,
required List<lk_rtc.TrackPermission> trackPermissions,
}) =>
_sendRequest(lk_rtc.SignalRequest(
subscriptionPermissions: lk_rtc.UpdateSubscriptionPermissions(
allParticipants: allParticipants,
trackPermissions: trackPermissions,
),
));
void sendLeave() => _sendRequest(lk_rtc.SignalRequest(
leave: lk_rtc.LeaveRequest(),
));