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:
@@ -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.');
|
||||
|
||||
@@ -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}');
|
||||
|
||||
|
||||
@@ -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(),
|
||||
));
|
||||
|
||||
Reference in New Issue
Block a user