VoIP constructor
VoIP(
- Client client,
- WebRTCDelegate delegate, {
- bool enableSFUE2EEKeyRatcheting = false,
Implementation
VoIP(
this.client,
this.delegate, {
this.enableSFUE2EEKeyRatcheting = false,
}) : super() {
currentSessionId = base64Encode(secureRandomBytes(16));
Logs().v('set currentSessionId to $currentSessionId');
// to populate groupCalls with already present calls
for (final room in client.rooms) {
final memsList = room.getCallMembershipsFromRoom();
for (final mems in memsList.values) {
for (final mem in mems) {
unawaited(createGroupCallFromRoomStateEvent(mem));
}
}
}
/// handles events todevice and matrix events for invite, candidates, hangup, etc.
client.onCallEvents.stream.listen((events) async {
await _handleCallEvents(events);
});
// handles the com.famedly.call events.
client.onRoomState.stream.listen(
(update) async {
final event = update.state;
if (event is! Event) return;
if (event.room.membership != Membership.join) return;
if (event.type != EventTypes.GroupCallMember) return;
Logs().v('[VOIP] onRoomState: type ${event.toJson()}');
final mems = event.room.getCallMembershipsFromEvent(event);
for (final mem in mems) {
unawaited(createGroupCallFromRoomStateEvent(mem));
}
for (final map in groupCalls.entries) {
if (map.key.roomId == event.room.id) {
// because we don't know which call got updated, just update all
// group calls we have entered for that room
await map.value.onMemberStateChanged();
}
}
},
);
delegate.mediaDevices.ondevicechange = _onDeviceChange;
}