chore: add more interface for delegate.
This commit is contained in:
		
							parent
							
								
									60618d1775
								
							
						
					
					
						commit
						01276bbf60
					
				|  | @ -8,7 +8,13 @@ import '../matrix.dart'; | ||||||
| 
 | 
 | ||||||
| abstract class WebRTCDelegate { | abstract class WebRTCDelegate { | ||||||
|   RTCFactory get rtcFactory; |   RTCFactory get rtcFactory; | ||||||
|  |   bool get isBackgroud; | ||||||
|  |   bool get isWeb; | ||||||
|   VideoRenderer createRenderer(); |   VideoRenderer createRenderer(); | ||||||
|  |   void playRingtone(); | ||||||
|  |   void stopRingtone(); | ||||||
|  |   Function(CallSession session)? onNewCall; | ||||||
|  |   Function(CallSession session)? onCallEnded; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// The default life time for call events, in millisecond. | /// The default life time for call events, in millisecond. | ||||||
|  | @ -553,8 +559,7 @@ class CallSession { | ||||||
| 
 | 
 | ||||||
|     if (purpose == SDPStreamMetadataPurpose.Usermedia) { |     if (purpose == SDPStreamMetadataPurpose.Usermedia) { | ||||||
|       speakerOn = type == CallType.kVideo; |       speakerOn = type == CallType.kVideo; | ||||||
|       //TODO: Confirm that the platform is not Web. |       if (voip.delegate.isWeb && !voip.delegate.isBackgroud) { | ||||||
|       if (/*!kIsWeb && */ !voip.background) { |  | ||||||
|         final audioTrack = stream.getAudioTracks()[0]; |         final audioTrack = stream.getAudioTracks()[0]; | ||||||
|         audioTrack.enableSpeakerphone(speakerOn); |         audioTrack.enableSpeakerphone(speakerOn); | ||||||
|       } |       } | ||||||
|  | @ -653,29 +658,12 @@ class CallSession { | ||||||
|     return callOnHold; |     return callOnHold; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   void setSpeakerOn() { |  | ||||||
|     speakerOn = !speakerOn; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   //TODO: move to the app. |  | ||||||
|   Future<void> switchCamera() async { |  | ||||||
|     if (localUserMediaStream != null) { |  | ||||||
|       /* |  | ||||||
|       await Helper.switchCamera( |  | ||||||
|           localUserMediaStream!.stream!.getVideoTracks()[0]); |  | ||||||
|       if (kIsMobile) { |  | ||||||
|         facingMode == 'user' ? facingMode = 'environment' : facingMode = 'user'; |  | ||||||
|       } |  | ||||||
|       */ |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void answer() async { |   void answer() async { | ||||||
|     if (inviteOrAnswerSent) { |     if (inviteOrAnswerSent) { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     // stop play ringtone |     // stop play ringtone | ||||||
|     voip.stopRingTone(); |     voip.delegate.stopRingtone(); | ||||||
| 
 | 
 | ||||||
|     if (direction == CallDirection.kIncoming) { |     if (direction == CallDirection.kIncoming) { | ||||||
|       setCallState(CallState.kCreateAnswer); |       setCallState(CallState.kCreateAnswer); | ||||||
|  | @ -722,7 +710,7 @@ class CallSession { | ||||||
| 
 | 
 | ||||||
|   void hangup([String? reason, bool suppressEvent = true]) async { |   void hangup([String? reason, bool suppressEvent = true]) async { | ||||||
|     // stop play ringtone |     // stop play ringtone | ||||||
|     voip.stopRingTone(); |     voip.delegate.stopRingtone(); | ||||||
| 
 | 
 | ||||||
|     terminate( |     terminate( | ||||||
|         CallParty.kLocal, reason ?? CallErrorCode.UserHangup, !suppressEvent); |         CallParty.kLocal, reason ?? CallErrorCode.UserHangup, !suppressEvent); | ||||||
|  | @ -1123,10 +1111,7 @@ class VoIP { | ||||||
|   TurnServerCredentials? _turnServerCredentials; |   TurnServerCredentials? _turnServerCredentials; | ||||||
|   Map<String, CallSession> calls = <String, CallSession>{}; |   Map<String, CallSession> calls = <String, CallSession>{}; | ||||||
|   String? currentCID; |   String? currentCID; | ||||||
|   Function(CallSession session)? onNewCall; |  | ||||||
|   Function(CallSession session)? onCallEnded; |  | ||||||
|   String? get localPartyId => client.deviceID; |   String? get localPartyId => client.deviceID; | ||||||
|   bool background = false; |  | ||||||
|   final Client client; |   final Client client; | ||||||
|   RTCFactory get factory => delegate.rtcFactory; |   RTCFactory get factory => delegate.rtcFactory; | ||||||
|   final WebRTCDelegate delegate; |   final WebRTCDelegate delegate; | ||||||
|  | @ -1228,38 +1213,20 @@ class VoIP { | ||||||
|         .initWithInvite(callType, offer, sdpStreamMetadata, lifetime) |         .initWithInvite(callType, offer, sdpStreamMetadata, lifetime) | ||||||
|         .then((_) { |         .then((_) { | ||||||
|       // Popup CallingPage for incoming call. |       // Popup CallingPage for incoming call. | ||||||
|       if (!background) { |       if (!delegate.isBackgroud) { | ||||||
|         onNewCall?.call(newCall); |         delegate.onNewCall?.call(newCall); | ||||||
|       } |       } | ||||||
|     }); |     }); | ||||||
|     currentCID = callId; |     currentCID = callId; | ||||||
| 
 | 
 | ||||||
|     if (background) { |     if (delegate.isBackgroud) { | ||||||
|       /// Forced to enable signaling synchronization until the end of the call. |       /// Forced to enable signaling synchronization until the end of the call. | ||||||
|       client.backgroundSync = true; |       client.backgroundSync = true; | ||||||
| 
 | 
 | ||||||
|       ///TODO: notify the callkeep that the call is incoming. |       ///TODO: notify the callkeep that the call is incoming. | ||||||
|     } |     } | ||||||
|     // Play ringtone |     // Play ringtone | ||||||
|     playRingtone(); |     delegate.playRingtone(); | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void playRingtone() async { |  | ||||||
|     if (!background) { |  | ||||||
|       try { |  | ||||||
|         // TODO: callback the event to the user. |  | ||||||
|         // await UserMediaManager().startRinginTone(); |  | ||||||
|       } catch (_) {} |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void stopRingTone() async { |  | ||||||
|     if (!background) { |  | ||||||
|       try { |  | ||||||
|         // TODO: |  | ||||||
|         // await UserMediaManager().stopRingingTone(); |  | ||||||
|       } catch (_) {} |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   void onCallAnswer(Event event) async { |   void onCallAnswer(Event event) async { | ||||||
|  | @ -1272,7 +1239,7 @@ class VoIP { | ||||||
|       if (event.senderId == client.userID) { |       if (event.senderId == client.userID) { | ||||||
|         // Ignore messages to yourself. |         // Ignore messages to yourself. | ||||||
|         if (!call._answeredByUs) { |         if (!call._answeredByUs) { | ||||||
|           stopRingTone(); |           delegate.stopRingtone(); | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|  | @ -1315,8 +1282,8 @@ class VoIP { | ||||||
| 
 | 
 | ||||||
|   void onCallHangup(Event event) async { |   void onCallHangup(Event event) async { | ||||||
|     // stop play ringtone, if this is an incoming call |     // stop play ringtone, if this is an incoming call | ||||||
|     if (!background) { |     if (!delegate.isBackgroud) { | ||||||
|       stopRingTone(); |       delegate.stopRingtone(); | ||||||
|     } |     } | ||||||
|     Logs().v('[VOIP] onCallHangup => ${event.content.toString()}'); |     Logs().v('[VOIP] onCallHangup => ${event.content.toString()}'); | ||||||
|     final String callId = event.content['call_id']; |     final String callId = event.content['call_id']; | ||||||
|  | @ -1325,7 +1292,7 @@ class VoIP { | ||||||
|       // hangup in any case, either if the other party hung up or we did on another device |       // hangup in any case, either if the other party hung up or we did on another device | ||||||
|       call.terminate(CallParty.kRemote, |       call.terminate(CallParty.kRemote, | ||||||
|           event.content['reason'] ?? CallErrorCode.UserHangup, true); |           event.content['reason'] ?? CallErrorCode.UserHangup, true); | ||||||
|       onCallEnded?.call(call); |       delegate.onCallEnded?.call(call); | ||||||
|     } else { |     } else { | ||||||
|       Logs().v('[VOIP] onCallHangup: Session [$callId] not found!'); |       Logs().v('[VOIP] onCallHangup: Session [$callId] not found!'); | ||||||
|     } |     } | ||||||
|  | @ -1504,8 +1471,8 @@ class VoIP { | ||||||
|     final newCall = createNewCall(opts); |     final newCall = createNewCall(opts); | ||||||
|     currentCID = callId; |     currentCID = callId; | ||||||
|     await newCall.initOutboundCall(type).then((_) { |     await newCall.initOutboundCall(type).then((_) { | ||||||
|       if (!background) { |       if (!delegate.isBackgroud) { | ||||||
|         onNewCall?.call(newCall); |         delegate.onNewCall?.call(newCall); | ||||||
|       } |       } | ||||||
|     }); |     }); | ||||||
|     currentCID = callId; |     currentCID = callId; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue