Skip to main content

Events

Local User - Events​

You can subscribe to various events on the local user by implementing DyteSelfEventsListener and passing the object to meeting.addSelfEventsListener(dyteSelfEventsListener).

Room joined​

Triggered when the room join event completes and now the meeting is ready to produce and consume media.

extension MeetingViewModel: DyteSelfEventsListener {
func onRoomJoined() {
//Room Joined
}
}

Video update​

Triggered when the user starts / stops the video using enableVideo or disableVideo

extension MeetingViewModel: DyteSelfEventsListener {
func onVideoUpdate(videoEnabled: Bool) {
if (videoEnabled) {
// video is enabled, and other participants in room can see local user
} else {
// video is disabled, and other participants in room can not see local user.
}
}
}

Audio update​

Triggered when the user starts / stops the audio using enableAudio or disableAudio


extension MeetingViewModel: DyteSelfEventsListener {
func onAudioUpdate(audioEnabled: Bool) {
if (audioEnabled) {
// audio is enabled, and other participants in room can hear local user
} else {
// audio is disabled, and other participants in room can not hear local user.
}
}
}

Room disconnected update​

Triggered when the user is disconnected due to media/network errors

extension MeetingViewModel: DyteSelfEventsListener {
func onMeetingRoomDisconnected() {
//disconnected
}
}

Proximity changed​

Triggered when there is any change in proximity. Meaning if device is near ear piece which triggers display on/off.

extension MeetingViewModel: DyteSelfEventsListener {
func onProximityChanged(isNear: Bool) {
// isNear
// if true, display should be turned off, as user might be speaking through earpiece
// if false, display should be turned on, as user might be looking at display and listening through speaker/earphones.
}
}

Waitlist status​

For meetings whose waiting room is enabled:

To get status of localUser in waiting room we can use

let waitListStatus = meeting.localUser.waitListStatus

Developers can listen to those changes in onWaitListStatusUpdate() callbacks

extension MeetingViewModel: DyteSelfEventsListener {
func onWaitListStatusUpdate(waitListStatus: WaitListStatus) {

}
}

Participants list events​

You can subscribe to events for all participants by implementing DyteParticipantEventsListener callback and then passing that object to meeting.addParticipantEventsListener(dyteParticipantEventsListener) method. Here are the supported methods:

Participant joined​

Triggers an event when any participant joins the meeting.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onParticipantJoin(participant: DyteMeetingParticipant) {
// your code here to handle new participant
}
}

Participant left​

Triggers an event when any participant leaves the meeting.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onParticipantLeave(participant: DyteMeetingParticipant) {
// your code here to handle participant left from meeting
}
}

Screenshare updates​

Triggers an event when there is any change in screenshares in a meeting.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onScreenSharesUpdated() {
// your code here to handle screenshares from meeting
// you can use `meeting.participants.screenshares` to get latest screenshare participants
}
}

Grid change​

Whenever there is a change in the GridInfo for the room, the following method is triggered. called.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onGridUpdated(gridInfo: GridInfo) {
// your code here to handle grid changes.
}
}

Video update​

Trigger an event when any participant starts / stops video.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onVideoUpdate(videoEnabled: Bool, participant: DyteMeetingParticipant) {
// your code here to handle participant video toggle update
}
}

Audio update​

Trigger an event when any participant starts / stops audio.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onAudioUpdate(audioEnabled: Bool, participant: DyteMeetingParticipant) {
// your code here to handle participant audio toggle update
}
}

Active speaker​

Trigger an event when any is change in active speaker in the meeting.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onActiveSpeakerChanged(participant: DyteMeetingParticipant) {
// your code here to handle active speaker
}

func onNoActiveSpeaker() {
// your code here to handle no active speaker
}
}

Pinned participant​

Trigger an event when any is change in pinned participant in the meeting.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onParticipantPinned(participant: DyteMeetingParticipant) {
// your code here to show pinned participant
}

func onParticipantUnpinned() {
// your code here to remove pinned participant
}
}

Active participants list change​

Triggers an event when any change in active participants list in the meeting.

    extension MeetingViewModel: DyteParticipantEventsListener {
func onActiveParticipantsChanged(active: [DyteMeetingParticipant]) {
// your code here to refresh active participants
}
}

Recording​

The meeting.recording object can be used start and stop recordings in a meeting. You can also get the current status of a recording using this API.

The meeting.recording object has the following properties:

  • recordingState: Indicates the current recording state of the meeting.

Get active recording state​

The meeting.recording.recordingState property describes the current state of the recording. The valid states are IDLE, STARTING, RECORDING, and STOPPING.

Listen to recording state changes​

The changes to meeting.recording.recordingState can be listened by implementing onMeetingRecordingStateUpdated from DyteMeetingRoomEventsListener. You can attach this observer by calling meeting.addMeetingRoomEventsListener(listener).

meeting.addMeetingRoomEventsListener(object : DyteMeetingRoomEventsListener {
override fun onMeetingRecordingStarted() {
super.onMeetingRecordingStarted()
// on recording started
}

override fun onMeetingRecordingEnded() {
super.onMeetingRecordingEnded()
// on recording ended
}

override fun onMeetingRecordingStateUpdated(state: DyteRecordingState) {
super.onMeetingRecordingStateUpdated(state)
// on recording state update
}

override fun onMeetingRecordingStopError(e: Exception) {
super.onMeetingRecordingStopError(e)
// when local user tried to end recording but it fails
}
})