public Task PostPublish <T>(PublishContext <T> context) where T : class { if (context.Message is MediaStateChanged message && message.ConferenceId == _conferenceId) { State = ApplyUpdate(State, message.Payload); } return(Task.CompletedTask); }
private static SfuConferenceInfo ApplyUpdate(SfuConferenceInfo current, SfuConferenceInfoUpdate update) { var newPermissions = current.ParticipantPermissions.ToDictionary(x => x.Key, x => x.Value); var newParticipants = current.ParticipantToRoom.ToDictionary(x => x.Key, x => x.Value); foreach (var updatePermission in update.ParticipantPermissions) { newPermissions[updatePermission.Key] = updatePermission.Value; } foreach (var(participantId, roomId) in update.ParticipantToRoom) { newParticipants[participantId] = roomId; } foreach (var removedParticipantId in update.RemovedParticipants) { newPermissions.Remove(removedParticipantId); newParticipants.Remove(removedParticipantId); } return(new SfuConferenceInfo(newParticipants, newPermissions)); }
public SfuConferenceInfoEndpoint(SfuConferenceInfo state, string conferenceId) { _conferenceId = conferenceId; State = state; }