From 9695a5ad1056dd3834193bc16c6fd82f5a39e88f Mon Sep 17 00:00:00 2001 From: cloudwebrtc Date: Mon, 8 Aug 2022 22:50:43 +0800 Subject: [PATCH 1/3] chore: Use onRoomState to monitor group call creation and member join and leave. --- lib/src/client.dart | 2 ++ lib/src/room.dart | 2 ++ lib/src/voip/voip.dart | 9 ++++++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/src/client.dart b/lib/src/client.dart index c8293c61..1b0a986c 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -1098,6 +1098,8 @@ class Client extends MatrixApi { final CachedStreamController onGroupMember = CachedStreamController(); + final CachedStreamController onRoomState = CachedStreamController(); + /// How long should the app wait until it retrys the synchronisation after /// an error? int syncErrorTimeoutSec = 3; diff --git a/lib/src/room.dart b/lib/src/room.dart index 4718e652..f31c00bd 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -197,6 +197,8 @@ class Room { } (states[state.type] ??= {})[stateKey] = state; + + client.onRoomState.add(state); } /// ID of the fully read marker event. diff --git a/lib/src/voip/voip.dart b/lib/src/voip/voip.dart index 334418c5..c56849f8 100644 --- a/lib/src/voip/voip.dart +++ b/lib/src/voip/voip.dart @@ -68,9 +68,12 @@ class VoIP { client.onAssertedIdentityReceived.stream .listen((event) => _handleEvent(event, onAssertedIdentityReceived)); - client.onGroupCallRequest.stream.listen((event) { - Logs().v('[VOIP] onGroupCallRequest: type ${event.toJson()}.'); - onRoomStateChanged(event); + client.onRoomState.stream.listen((event) { + if (event.type == EventTypes.GroupCallMemberPrefix || + event.type == EventTypes.GroupCallPrefix) { + Logs().v('[VOIP] onRoomState: type ${event.toJson()}.'); + onRoomStateChanged(event); + } }); client.onToDeviceEvent.stream.listen((event) { From 3f38a96d4fcf25f1427dd235f3a1194df1c3ca29 Mon Sep 17 00:00:00 2001 From: cloudwebrtc Date: Mon, 8 Aug 2022 22:54:08 +0800 Subject: [PATCH 2/3] chore: Remove the previous room state listener method. --- lib/src/voip/group_call.dart | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/lib/src/voip/group_call.dart b/lib/src/voip/group_call.dart index 94c88925..e6667d06 100644 --- a/lib/src/voip/group_call.dart +++ b/lib/src/voip/group_call.dart @@ -197,9 +197,6 @@ class GroupCall { Timer? activeSpeakerLoopTimeout; - Timer? retryCallLoopTimeout; - Map retryCallCounts = {}; - final CachedStreamController onGroupCallFeedsChanged = CachedStreamController(); @@ -430,8 +427,6 @@ class GroupCall { onMemberStateChanged(stateEvent); }); - retryCallLoopTimeout = Timer.periodic( - Duration(milliseconds: retryCallInterval), onRetryCallLoop); onActiveSpeakerLoop(); voip.currentGroupCID = groupCallId; @@ -467,8 +462,6 @@ class GroupCall { activeSpeaker = null; activeSpeakerLoopTimeout?.cancel(); - retryCallCounts.clear(); - retryCallLoopTimeout?.cancel(); _callSubscription?.cancel(); } @@ -876,24 +869,6 @@ class GroupCall { return memberDevices[0]; } - /// Monitor member status and respond to mesh calls by regularly updating - /// the state event in the room - void onRetryCallLoop(Timer _) async { - final memberStateEvents = - await getStateEventsList(EventTypes.GroupCallMemberPrefix); - - memberStateEvents.forEach((event) { - final memberId = event.senderId; - final existingCall = - calls.indexWhere((call) => call.remoteUser!.id == memberId) != -1; - final retryCallCount = retryCallCounts[memberId] ?? 0; - if (!existingCall && retryCallCount < 3) { - retryCallCounts[memberId] = retryCallCount + 1; - onMemberStateChanged(event); - } - }); - } - CallSession? getCallByUserId(String userId) { final value = calls.where((item) => item.remoteUser!.id == userId); if (value.isNotEmpty) { @@ -1064,10 +1039,6 @@ class GroupCall { call.isLocalVideoMuted != videoMuted) { call.setLocalVideoMuted(videoMuted); } - - if (state == CallState.kConnected) { - retryCallCounts.remove(call.remoteUser!.id); - } } void onCallHangup(CallSession call) { From f2af63685cdd2b5d922912c1f03dd5a8a7f754f3 Mon Sep 17 00:00:00 2001 From: cloudwebrtc Date: Tue, 9 Aug 2022 15:22:36 +0800 Subject: [PATCH 3/3] chore: Improve code. --- lib/src/voip/voip.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/src/voip/voip.dart b/lib/src/voip/voip.dart index c56849f8..45f031ea 100644 --- a/lib/src/voip/voip.dart +++ b/lib/src/voip/voip.dart @@ -69,8 +69,10 @@ class VoIP { .listen((event) => _handleEvent(event, onAssertedIdentityReceived)); client.onRoomState.stream.listen((event) { - if (event.type == EventTypes.GroupCallMemberPrefix || - event.type == EventTypes.GroupCallPrefix) { + if ([ + EventTypes.GroupCallPrefix, + EventTypes.GroupCallMemberPrefix, + ].contains(event.type)) { Logs().v('[VOIP] onRoomState: type ${event.toJson()}.'); onRoomStateChanged(event); }