From 8c29b5f8e6b7a13135df0c65fa5f236d5f8cc051 Mon Sep 17 00:00:00 2001 From: Zohaib Iqbal Kambrani <> Date: Wed, 10 Aug 2022 13:58:43 +0300 Subject: [PATCH] WebRTC or Opentok --- lib/models/LiveCare/IncomingCallData.dart | 3 +++ lib/pages/livecare/incoming_call.dart | 15 +++++++++------ lib/pages/videocall-webrtc-rnd/utils/turn.dart | 2 +- .../videocall-webrtc-rnd/webrtc/signaling.dart | 2 +- lib/uitl/push-notification-handler.dart | 16 +++++++++++++--- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/lib/models/LiveCare/IncomingCallData.dart b/lib/models/LiveCare/IncomingCallData.dart index 507bcc85..1ee149a3 100644 --- a/lib/models/LiveCare/IncomingCallData.dart +++ b/lib/models/LiveCare/IncomingCallData.dart @@ -26,6 +26,7 @@ class IncomingCallData { String isCall; String sound; String server; + String isWebRTC; IncomingCallData( {this.msgID, @@ -80,6 +81,7 @@ class IncomingCallData { isCall = json['is_call']; sound = json['sound']; server = json['server']; + isWebRTC = json['isWebRTC'] ?? "false"; } Map toJson() { @@ -109,6 +111,7 @@ class IncomingCallData { data['is_call'] = this.isCall; data['sound'] = this.sound; data['server'] = this.server; + data['isWebRTC'] = this.isWebRTC; return data; } } diff --git a/lib/pages/livecare/incoming_call.dart b/lib/pages/livecare/incoming_call.dart index 28caf546..907d6b23 100644 --- a/lib/pages/livecare/incoming_call.dart +++ b/lib/pages/livecare/incoming_call.dart @@ -238,17 +238,20 @@ class _IncomingCallState extends State with SingleTickerProviderSt final caller = widget.incomingCallData.callerID; final receiver = widget.incomingCallData.receiverID; final host = widget.incomingCallData.server; - return StartVideoCall(caller: caller, receiver: receiver, iAmCaller: false, host: host,); + if(widget.incomingCallData.isWebRTC == "true"){ + return StartVideoCall(caller: caller, receiver: receiver, iAmCaller: false, host: host); + }else{ + return OpenTokConnectCallPage( + apiKey: OPENTOK_API_KEY, + sessionId: widget.incomingCallData.sessionId, + token: widget.incomingCallData.token + ); + } // return VideoCallWebPage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // Web WebRTC VideoCall // return CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // App WebRTC VideoCall - return OpenTokConnectCallPage( - apiKey: OPENTOK_API_KEY, - sessionId: widget.incomingCallData.sessionId, - token: widget.incomingCallData.token - ); }, ), ); diff --git a/lib/pages/videocall-webrtc-rnd/utils/turn.dart b/lib/pages/videocall-webrtc-rnd/utils/turn.dart index c9c9d7f3..f91fef80 100644 --- a/lib/pages/videocall-webrtc-rnd/utils/turn.dart +++ b/lib/pages/videocall-webrtc-rnd/utils/turn.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'dart:async'; import 'dart:io'; -Future getTurnCredential(String host, int port) async { +Future getTurnCredential(String host) async { HttpClient client = HttpClient(context: SecurityContext()); client.badCertificateCallback = (X509Certificate cert, String host, int port) { diff --git a/lib/pages/videocall-webrtc-rnd/webrtc/signaling.dart b/lib/pages/videocall-webrtc-rnd/webrtc/signaling.dart index aaf5b680..4458604a 100644 --- a/lib/pages/videocall-webrtc-rnd/webrtc/signaling.dart +++ b/lib/pages/videocall-webrtc-rnd/webrtc/signaling.dart @@ -251,7 +251,7 @@ class Signaling { if (_turnCredential == null) { try { - _turnCredential = await getTurnCredential(_host, 8086); + _turnCredential = await getTurnCredential(_host); /* { "username": "1584195784:mbzrxpgjys", diff --git a/lib/uitl/push-notification-handler.dart b/lib/uitl/push-notification-handler.dart index a8b06051..f46ba2a6 100644 --- a/lib/uitl/push-notification-handler.dart +++ b/lib/uitl/push-notification-handler.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:ffi'; import 'dart:io'; import 'package:diplomaticquarterapp/config/config.dart'; @@ -9,6 +10,7 @@ import 'package:diplomaticquarterapp/models/LiveCare/IncomingCallData.dart'; import 'package:diplomaticquarterapp/pages/DrawerPages/notifications/notification_details_page.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/livecare/incoming_call.dart'; +import 'package:diplomaticquarterapp/pages/videocall-webrtc-rnd/webrtc/start_video_call.dart'; import 'package:diplomaticquarterapp/pages/webRTC/OpenTok/OpenTok.dart'; import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart'; import 'package:diplomaticquarterapp/uitl/app-permissions.dart'; @@ -86,8 +88,15 @@ RemoteMessage toFirebaseRemoteMessage(h_push.RemoteMessage message) { return fire_message; } -callPage(String sessionID, String token) async { - await NavigationService.navigateToPage(OpenTokConnectCallPage(apiKey: OPENTOK_API_KEY, sessionId: sessionID, token: token)); +callPage(String sessionID, String token, String isWebrtc, String callerIdString) async { + if (isWebrtc == "true"){ + String caller = callerIdString.split("*")[3]; + String receiver = callerIdString.split("*")[4]; + String host = callerIdString.split("*")[5]; + return StartVideoCall(caller: caller, receiver: receiver, iAmCaller: false, host: host); + }else{ + await NavigationService.navigateToPage(OpenTokConnectCallPage(apiKey: OPENTOK_API_KEY, sessionId: sessionID, token: token)); + } } _incomingCall(Map data) async { @@ -192,6 +201,7 @@ class PushNotificationHandler { String sessionID = callerId.split("*")[0]; String token = callerId.split("*")[1]; + String isWebRTC = callerId.split("*")[2]; print("🎈 SessionID: $sessionID"); print("🎈 Token: $token"); @@ -204,7 +214,7 @@ class PushNotificationHandler { Future.delayed(new Duration(milliseconds: 2000)).then((value) async { print("🎈 Incoming Call!!!"); - callPage(sessionID, token); + callPage(sessionID, token, isWebRTC, callerId); }); // print("🎈 Identity: $identity");