From 6c3298f12616cd43f366cb20ae3fb9ba79efb0ca Mon Sep 17 00:00:00 2001 From: Aamir Date: Sun, 3 Mar 2024 10:32:29 +0300 Subject: [PATCH] changes local --- lib/main.dart | 2 +- .../call/chat_incoming_call_screen.dart | 20 +- lib/voipcall/provider/chat_call_provider.dart | 206 +++++++++++++----- lib/widgets/drawer/app_drawer_widget.dart | 41 +++- 4 files changed, 206 insertions(+), 63 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 4de11d7d..26c72024 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -163,7 +163,7 @@ class _MyApp extends State { builder: (_, mchild) { return MediaQuery( data: MediaQuery.of(context).copyWith( - textScaler: TextScaler.linear(1.0), + textScaleFactor: 1.0, ), //set desired text scale factor here child: mchild!); // Container( diff --git a/lib/voipcall/call/chat_incoming_call_screen.dart b/lib/voipcall/call/chat_incoming_call_screen.dart index f8b85a58..83ea9160 100644 --- a/lib/voipcall/call/chat_incoming_call_screen.dart +++ b/lib/voipcall/call/chat_incoming_call_screen.dart @@ -68,10 +68,10 @@ class _StartCallPageState extends State { await cProv!.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson(), isVCall: sessionData!.extra!.callType == "video" ? true : false); try { AppState().setchatUserDetails = UserAutoLoginModel(response: Response.fromJson(sessionData.extra!.loginDetails!.toJson()), errorResponses: null); - await cProv!.buildHubConnection().whenComplete(() { - cProv!.init(); - isCallConnected = true; - }); + // await cProv!.buildHubConnection().whenComplete(() { + // cProv!.init(); + // isCallConnected = true; + // }); } catch (e) { print(e); } @@ -112,10 +112,10 @@ class _StartCallPageState extends State { await cProv!.startIncomingCallViaKit(inCallData: inCallData.toJson(), isVCall: callType == "video" ? true : false); try { AppState().setchatUserDetails = UserAutoLoginModel(response: userLoginResponse.response, errorResponses: null); - await cProv!.buildHubConnection().whenComplete(() { - cProv!.init(); - isCallConnected = true; - }); + // await cProv!.buildHubConnection().whenComplete(() { + // cProv!.init(); + // isCallConnected = true; + // }); } catch (e) { print(e); } @@ -130,8 +130,8 @@ class _StartCallPageState extends State { if (Platform.isAndroid) { startCall(); } else if (Platform.isIOS) { - cProv!.buildHubConnection(); - startIosCall(); + // cProv!.buildHubConnection(); + // startIosCall(); } } diff --git a/lib/voipcall/provider/chat_call_provider.dart b/lib/voipcall/provider/chat_call_provider.dart index 68d0b8b4..ec1adca1 100644 --- a/lib/voipcall/provider/chat_call_provider.dart +++ b/lib/voipcall/provider/chat_call_provider.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:convert'; import 'dart:io'; @@ -6,21 +7,21 @@ import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/uitl/navigation_service.dart'; -import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/voipcall/call/chat_incoming_call_screen.dart'; import 'package:diplomaticquarterapp/voipcall/consts.dart'; import 'package:diplomaticquarterapp/voipcall/model/call.dart'; import 'package:diplomaticquarterapp/voipcall/model/get_single_user_chat_call.dart'; -import 'package:diplomaticquarterapp/voipcall/model/get_user_login_token.dart'; +import 'package:diplomaticquarterapp/voipcall/model/get_user_login_token.dart' as getUserToken; import 'package:diplomaticquarterapp/voipcall/model/webrtc_payloads.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart'; import 'package:flutter_webrtc/flutter_webrtc.dart'; +import 'package:http/http.dart' as http; +import 'package:http/http.dart'; import 'package:just_audio/just_audio.dart'; -import 'package:signalr_netcore/http_connection_options.dart'; -import 'package:signalr_netcore/hub_connection.dart'; -import 'package:signalr_netcore/hub_connection_builder.dart'; +import 'package:logging/logging.dart'; +import 'package:signalr_netcore/signalr_client.dart'; class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { ///////////////////// Web RTC Video Calling ////////////////////// @@ -39,6 +40,7 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { bool isLoudSpeaker = false; bool isCamOff = false; bool isCallEnded = false; + // This need to Be Changed to dynamic bool isVideoCall = true; bool isAudioCall = false; @@ -54,48 +56,76 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { List devices = []; - Future buildHubConnection() async { - try { - chatHubConnection = await getHubConnection(); - await chatHubConnection!.start(); - } catch (e) { - print(e.toString()); - Utils.showErrorToast(e.toString()); - } - - if (kDebugMode) { - print("Hub Conn: Startedddddddd"); - } - // chatHubConnection.on("OnDeliveredChatUserAsync", onMsgReceived); - // chatHubConnection.on("OnGetChatConversationCount", onNewChatConversion); - // chatHubConnection.on("OnDeliveredGroupChatHistoryAsync", onGroupMsgReceived); - registerCallListners(); - } +// +// // If you want only to log out the message for the higer level hub protocol: +// final hubProtLogger = Logger("SignalR - hub"); +// final transportProtLogger = Logger("SignalR - transport"); +// late Logger _logger; +// late StreamSubscription _logMessagesSub; +// +// void _handleLogMessage(LogRecord msg) { +// print(msg.message); +// } +// +// Future buildHubConnection() async { +// try { +// Logger.root.level = Level.ALL; +// _logMessagesSub = Logger.root.onRecord.listen(_handleLogMessage); +// _logger = Logger("ChatPageViewModel"); +// +// // chatHubConnection = await getHubConnection(); +// String to = "ytvF4zQfUrJHOUfpE7UE1Q"; +// HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true, logger: transportProtLogger); +// // hub = HubConnectionBuilder() +// // .withUrl(ApiConsts.chatHubConnectionUrl + "?UserId=${AppState().chatDetails!.response!.id}&source=Desktop&access_token=${AppState().chatDetails!.response!.token}", options: httpOp) +// // .withAutomaticReconnect(retryDelays: [2000, 5000, 10000, 20000]).build(); +// var urlWithParams = "https://ms.hmg.com/livecare/liveCareHub?UserID=4767770&ProjectId=12&IsAdmin=false&To=$to"; +// print("ChatHubURL:::: " + urlWithParams); +// chatHubConnection = await HubConnectionBuilder().withUrl(urlWithParams, options: httpOp).build(); +// await chatHubConnection!.start(); +// print(chatHubConnection!.state); +// chatHubConnection!.onclose(({error}) { +// print("Connection Closed"); +// }); +// // if (chatHubConnection!.state == HubConnectionState.Connected) { +// // print("Success Chat Con ID::: " + chatHubConnection!.connectionId.toString()); +// // if (kDebugMode) { +// // print("Hub Conn: Startedddddddd"); +// // } +// // //registerCallListners(); +// // } +// } catch (e) { +// print(e.toString()); +// Utils.showErrorToast(e.toString()); +// } +// } //{"id":341682,"userName":"Aamir.Muhammad","email":"Aamir.Muhammad@cloudsolutions.com.sa","phone":null,"title":"Aamir Saleem Ahmad Dost Muhammad","token":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzIwNTAyMywiZXhwIjoxNzA3MjkxNDIzLCJpYXQiOjE3MDcyMDUwMjN9.Zz2bcsMwiLAAWGZh2E_p5Qs6ItMt0JHhDFI_0DLdggCQtt6HHcT4n8nvqMZx-uYr3jLwqhA_IAjTuaCeSE15sw","isDomainUser":true,"isActiveCode":false,"encryptedUserId":"nn7RkYzbnQc=","encryptedUserName":"/QruOyp4QMcmNXKZlljUgg=="} Future getHubConnection() async { - AppState().chatDetails = UserAutoLoginModel( - response: Response.fromJson( - { + AppState().chatDetails = getUserToken.UserAutoLoginModel( + response: getUserToken.Response.fromJson({ "id": 341682, "userName": "Aamir.Muhammad", "email": "Aamir.Muhammad@cloudsolutions.com.sa", "phone": null, "title": "Aamir Saleem Ahmad Dost Muhammad", "token": - "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzYzMDY0MiwiZXhwIjoxNzA3NzE3MDQyLCJpYXQiOjE3MDc2MzA2NDJ9.OZZFkXduuhlWTYh67Cw5o6Bxx4J9EcAKoq6Hn-ZqzE39BfZtiF_sswAvecaIF2ULrL4qO2vk8EV0naGPcjZrZw", + "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwODI1NjI5NywiZXhwIjoxNzA4MzQyNjk3LCJpYXQiOjE3MDgyNTYyOTd9.Y-QDVbSbPzcMVkHyIT06WgM0EsKH183hASZrIsXGkFOR_XZcqCJS-CrgdN0nOtxCWV6wd01dgfhMTNTZhybwiQ", "isDomainUser": true, "isActiveCode": false, "encryptedUserId": "nn7RkYzbnQc=", "encryptedUserName": "/QruOyp4QMcmNXKZlljUgg==" - }, - )); - + }), + ); + String to = "dfK3ZqFD-BTlJLnuf1F5Cw"; HubConnection hub; HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true); - hub = HubConnectionBuilder() - .withUrl(ApiConsts.chatHubConnectionUrl + "?UserId=${AppState().chatDetails!.response!.id}&source=Desktop&access_token=${AppState().chatDetails!.response!.token}", options: httpOp) - .withAutomaticReconnect(retryDelays: [2000, 5000, 10000, 20000]).build(); + // hub = HubConnectionBuilder() + // .withUrl(ApiConsts.chatHubConnectionUrl + "?UserId=${AppState().chatDetails!.response!.id}&source=Desktop&access_token=${AppState().chatDetails!.response!.token}", options: httpOp) + // .withAutomaticReconnect(retryDelays: [2000, 5000, 10000, 20000]).build(); + var urlWithParams = "https://ms.hmg.com/livecare/liveCareHub?UserID=4767770&ProjectId=15&IsAdmin=false&To=$to"; + print("ChatHubURL:::: " + urlWithParams); + hub = await HubConnectionBuilder().withUrl(urlWithParams, options: httpOp).withAutomaticReconnect(retryDelays: [2000, 5000, 10000, 20000]).build(); return hub; } @@ -805,26 +835,104 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { // mobileRecoder = null; // notifyListeners(); // } + +// WebRtc + +// If you want only to log out the message for the higer level hub protocol: + final hubProtLogger = Logger("SignalR - hub"); + final transportProtLogger = Logger("SignalR - transport"); + late Logger _logger; + late StreamSubscription _logMessagesSub; + + void _handleLogMessage(LogRecord msg) { + print(msg.message); + } + + void _httpClientCreateCallback(Client httpClient) { + HttpOverrides.global = HttpOverrideCertificateVerificationInDev(); + } + + // Future buildHubConnection() async { + // try { + // chatHubConnection = await HubConnectionBuilder().withUrl(urlWithParams, options: httpOp).build(); + // await chatHubConnection!.start(); + // print(chatHubConnection!.state); + // chatHubConnection!.onclose(({error}) { + // print("Connection Closed"); + // }); + // // if (chatHubConnection!.state == HubConnectionState.Connected) { + // // print("Success Chat Con ID::: " + chatHubConnection!.connectionId.toString()); + // // if (kDebugMode) { + // // print("Hub Conn: Startedddddddd"); + // // } + // // //registerCallListners(); + // // } + // } catch (e) { + // print(e.toString()); + // Utils.showErrorToast(e.toString()); + // } + // } + + handleRecivedOffer(List? val) { + print("----------Event Received ----------"); + print(val); + } + + Future openChatConnection() async { + _logger = Logger("Demo"); + final logger = _logger; + if (chatHubConnection == null) { + final httpConnectionOptions = HttpConnectionOptions(httpClient: WebSupportingHttpClient(logger, httpClientCreateCallback: _httpClientCreateCallback), logger: logger, logMessageContent: true); + Logger.root.level = Level.ALL; + _logMessagesSub = Logger.root.onRecord.listen(_handleLogMessage); + String to = "aXvFIMTEFRAKLJv5flIEWw"; + var urlWithParams = "https://ms.hmg.com/livecare/liveCareHub?UserID=4767770&ProjectId=15&IsAdmin=false&To=$to"; + print("ChatHubURL:::: " + urlWithParams); + chatHubConnection = + await HubConnectionBuilder().withUrl(urlWithParams, options: httpConnectionOptions).withAutomaticReconnect(retryDelays: [2000, 5000, 10000, 20000]).configureLogging(logger).build(); + } + + print(" ------------ Connection State --------------" + chatHubConnection!.state.toString()); + + if (chatHubConnection!.state != HubConnectionState.Connected) { + try { + await chatHubConnection!.start(); + print(" ------------ Connection State --------------" + chatHubConnection!.state.toString()); + print("Connection Stablished --------------"); + } catch (e) { + print(e); + } + } + + print(" ------------ Before Events Register --------------"); + chatHubConnection!.on("pre-offer", handleRecivedOffer); + chatHubConnection!.on("OnOffer", handleRecivedOffer); + chatHubConnection!.on("IceCandidate", handleRecivedOffer); + print(" ------------ After Events Register --------------"); + } +} + +class HttpOverrideCertificateVerificationInDev extends HttpOverrides { + @override + HttpClient createHttpClient(SecurityContext? context) { + return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true; + } } class ChatService extends BaseService { - Future getUserCallToken({required String userid}) async { - UserAutoLoginModel userLoginResponse = UserAutoLoginModel(); - baseAppClient.post( - "${ApiConsts.chatLoginTokenUrl}externaluserlogin", - body: { - "employeeNumber": userid, - "password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG", - }, - onSuccess: (dynamic response, int statusCode) { - userLoginResponse = userAutoLoginModelFromJson(response.body); - }, - onFailure: (String error, int statusCode) { - hasError = true; - print(error); - super.error = error; - }, - ); + Future getUserCallToken({required String userid}) async { + getUserToken.UserAutoLoginModel userLoginResponse = getUserToken.UserAutoLoginModel(); + http.post(Uri.parse("${ApiConsts.chatLoginTokenUrl}externaluserlogin"), body: { + "employeeNumber": userid, + "password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG", + }).then((response) { + userLoginResponse = getUserToken.userAutoLoginModelFromJson(response.body); + }).onError((error, stackTrace) { + hasError = true; + print(error); + super.error = error.toString(); + }); + return userLoginResponse; } } diff --git a/lib/widgets/drawer/app_drawer_widget.dart b/lib/widgets/drawer/app_drawer_widget.dart index 5c419aaa..07fb9e47 100644 --- a/lib/widgets/drawer/app_drawer_widget.dart +++ b/lib/widgets/drawer/app_drawer_widget.dart @@ -467,7 +467,7 @@ class _AppDrawerState extends State { Future micPer = Permission.microphone.request(); Future camPer = Permission.camera.request(); if (await micPer.isGranted && await camPer.isGranted) { - callProv!.buildHubConnection(); + // callProv!.buildHubConnection(); await callProv!.makeCall(callType: "VIDEO").then((value) { Future.delayed(Duration(seconds: 3), () { Navigator.push( @@ -491,10 +491,45 @@ class _AppDrawerState extends State { child: Container( height: 50, width: 200, - child: Center(child: Text("Call Test")), + child: Center(child: Text("Call")), ), ), - ) + ), + GestureDetector( + onTap: () async { + //Aamir Call + Future micPer = Permission.microphone.request(); + Future camPer = Permission.camera.request(); + if (await micPer.isGranted && await camPer.isGranted) { + await callProv!.openChatConnection(); + // IosCallPayload _iosCallPayload = IosCallPayload( + // uuid: "342h8f=-few-3f23rsd-s-f32-r--sd-3rt-2", + // incomingCallerId: "341682", + // incomingCallReciverId: "266642", + // incomingCallerName: "Aamir.Muhammad", + // incomingCallType: "video"); + // Future.delayed(Duration(seconds: 2), () { + // MaterialPageRoute pageRoute = MaterialPageRoute( + // builder: (BuildContext context) => StartCallPage( + // payload: _iosCallPayload, + // ), + // ); + // Navigator.push(context, pageRoute); + // }); + } else if (await micPer.isDenied) { + micPer = Permission.microphone.request(); + } else if (await camPer.isDenied) { + camPer = Permission.camera.request(); + } + }, + child: Card( + child: Container( + height: 50, + width: 200, + child: Center(child: Text("Receive Call")), + ), + ), + ), ], )) ],