in src/containers/Meeting.js [33:129]
componentDidMount() {
/**
* Attendee Join and Leave handler
*/
this.onAttendeesJoinSubscription = getSDKEventEmitter().addListener(MobileSDKEvent.OnAttendeesJoin, ({ attendeeId, externalUserId }) => {
if (!(attendeeId in attendeeNameMap)) {
// The externalUserId will be a format such as c19587e7#Alice
attendeeNameMap[attendeeId] = externalUserId.split("#")[1];
}
this.setState((oldState) => ({
...oldState,
attendees: oldState.attendees.concat([attendeeId])
}));
});
this.onAttendeesLeaveSubscription = getSDKEventEmitter().addListener(MobileSDKEvent.OnAttendeesLeave, ({ attendeeId }) => {
this.setState((oldState) => ({
...oldState,
attendees: oldState.attendees.filter((attendeeToCompare => attendeeId != attendeeToCompare))
}));
});
/**
* Attendee Mute & Unmute handler
*/
this.onAttendeesMuteSubscription = getSDKEventEmitter().addListener(MobileSDKEvent.OnAttendeesMute, attendeeId => {
this.setState((oldState) => ({
...oldState,
mutedAttendee: oldState.mutedAttendee.concat([attendeeId])
}));
});
this.onAttendeesUnmuteSubscription = getSDKEventEmitter().addListener(MobileSDKEvent.OnAttendeesUnmute, attendeeId => {
this.setState((oldState) => ({
...oldState,
mutedAttendee: oldState.mutedAttendee.filter((attendeeToCompare => attendeeId != attendeeToCompare))
}));
});
/**
* Video tile Add & Remove Handler
*/
this.onAddVideoTileSubscription = getSDKEventEmitter().addListener(MobileSDKEvent.OnAddVideoTile, (tileState) => {
if (tileState.isScreenShare) {
this.setState(oldState => ({
...oldState,
screenShareTile: tileState.tileId
}));
} else {
this.setState(oldState => ({
...oldState,
videoTiles: [...oldState.videoTiles, tileState.tileId],
selfVideoEnabled: tileState.isLocal ? true : oldState.selfVideoEnabled
}));
}
});
this.onRemoveVideoTileSubscription = getSDKEventEmitter().addListener(MobileSDKEvent.OnRemoveVideoTile, (tileState) => {
if (tileState.isScreenShare) {
this.setState(oldState => ({
...oldState,
screenShareTile: null
}));
} else {
this.setState(oldState => ({
...oldState,
videoTiles: oldState.videoTiles.filter(tileIdToCompare => tileIdToCompare != tileState.tileId),
selfVideoEnabled: tileState.isLocal ? false : oldState.selfVideoEnabled
}));
}
});
/**
* Data message handler
*/
this.onDataMessageReceivedSubscription = getSDKEventEmitter().addListener(MobileSDKEvent.OnDataMessageReceive, (dataMessage) => {
const str = `Received Data message (topic: ${dataMessage.topic}) ${dataMessage.data} from ${dataMessage.senderAttendeeId}:${dataMessage.senderExternalUserId} at ${dataMessage.timestampMs} throttled: ${dataMessage.throttled}`;
console.log(str);
NativeFunction.sendDataMessage(dataMessage.topic, str, 1000);
})
/**
* General Error handler
*/
this.onErrorSubscription = getSDKEventEmitter().addListener(MobileSDKEvent.OnError, (errorType) => {
switch(errorType) {
case MeetingError.OnMaximumConcurrentVideoReached:
Alert.alert("Failed to enable video", "maximum number of concurrent videos reached!");
break;
default:
Alert.alert("Error", errorType);
break;
}
});
}