changes local

dev_v3.13.6_voipcall
Aamir Muhammad 2 years ago
parent 3a0a807a9c
commit 6c3298f126

@ -163,7 +163,7 @@ class _MyApp extends State<MyApp> {
builder: (_, mchild) { builder: (_, mchild) {
return MediaQuery( return MediaQuery(
data: MediaQuery.of(context).copyWith( data: MediaQuery.of(context).copyWith(
textScaler: TextScaler.linear(1.0), textScaleFactor: 1.0,
), //set desired text scale factor here ), //set desired text scale factor here
child: mchild!); child: mchild!);
// Container( // Container(

@ -68,10 +68,10 @@ class _StartCallPageState extends State<StartCallPage> {
await cProv!.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson(), isVCall: sessionData!.extra!.callType == "video" ? true : false); await cProv!.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson(), isVCall: sessionData!.extra!.callType == "video" ? true : false);
try { try {
AppState().setchatUserDetails = UserAutoLoginModel(response: Response.fromJson(sessionData.extra!.loginDetails!.toJson()), errorResponses: null); AppState().setchatUserDetails = UserAutoLoginModel(response: Response.fromJson(sessionData.extra!.loginDetails!.toJson()), errorResponses: null);
await cProv!.buildHubConnection().whenComplete(() { // await cProv!.buildHubConnection().whenComplete(() {
cProv!.init(); // cProv!.init();
isCallConnected = true; // isCallConnected = true;
}); // });
} catch (e) { } catch (e) {
print(e); print(e);
} }
@ -112,10 +112,10 @@ class _StartCallPageState extends State<StartCallPage> {
await cProv!.startIncomingCallViaKit(inCallData: inCallData.toJson(), isVCall: callType == "video" ? true : false); await cProv!.startIncomingCallViaKit(inCallData: inCallData.toJson(), isVCall: callType == "video" ? true : false);
try { try {
AppState().setchatUserDetails = UserAutoLoginModel(response: userLoginResponse.response, errorResponses: null); AppState().setchatUserDetails = UserAutoLoginModel(response: userLoginResponse.response, errorResponses: null);
await cProv!.buildHubConnection().whenComplete(() { // await cProv!.buildHubConnection().whenComplete(() {
cProv!.init(); // cProv!.init();
isCallConnected = true; // isCallConnected = true;
}); // });
} catch (e) { } catch (e) {
print(e); print(e);
} }
@ -130,8 +130,8 @@ class _StartCallPageState extends State<StartCallPage> {
if (Platform.isAndroid) { if (Platform.isAndroid) {
startCall(); startCall();
} else if (Platform.isIOS) { } else if (Platform.isIOS) {
cProv!.buildHubConnection(); // cProv!.buildHubConnection();
startIosCall(); // startIosCall();
} }
} }

@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
@ -6,21 +7,21 @@ import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/uitl/navigation_service.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/call/chat_incoming_call_screen.dart';
import 'package:diplomaticquarterapp/voipcall/consts.dart'; import 'package:diplomaticquarterapp/voipcall/consts.dart';
import 'package:diplomaticquarterapp/voipcall/model/call.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_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:diplomaticquarterapp/voipcall/model/webrtc_payloads.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart'; import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart';
import 'package:flutter_webrtc/flutter_webrtc.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:just_audio/just_audio.dart';
import 'package:signalr_netcore/http_connection_options.dart'; import 'package:logging/logging.dart';
import 'package:signalr_netcore/hub_connection.dart'; import 'package:signalr_netcore/signalr_client.dart';
import 'package:signalr_netcore/hub_connection_builder.dart';
class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
///////////////////// Web RTC Video Calling ////////////////////// ///////////////////// Web RTC Video Calling //////////////////////
@ -39,6 +40,7 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
bool isLoudSpeaker = false; bool isLoudSpeaker = false;
bool isCamOff = false; bool isCamOff = false;
bool isCallEnded = false; bool isCallEnded = false;
// This need to Be Changed to dynamic // This need to Be Changed to dynamic
bool isVideoCall = true; bool isVideoCall = true;
bool isAudioCall = false; bool isAudioCall = false;
@ -54,48 +56,76 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
List<MediaDeviceInfo> devices = []; List<MediaDeviceInfo> devices = [];
Future<void> buildHubConnection() async { //
try { // // If you want only to log out the message for the higer level hub protocol:
chatHubConnection = await getHubConnection(); // final hubProtLogger = Logger("SignalR - hub");
await chatHubConnection!.start(); // final transportProtLogger = Logger("SignalR - transport");
} catch (e) { // late Logger _logger;
print(e.toString()); // late StreamSubscription<LogRecord> _logMessagesSub;
Utils.showErrorToast(e.toString()); //
} // void _handleLogMessage(LogRecord msg) {
// print(msg.message);
if (kDebugMode) { // }
print("Hub Conn: Startedddddddd"); //
} // Future<void> buildHubConnection() async {
// chatHubConnection.on("OnDeliveredChatUserAsync", onMsgReceived); // try {
// chatHubConnection.on("OnGetChatConversationCount", onNewChatConversion); // Logger.root.level = Level.ALL;
// chatHubConnection.on("OnDeliveredGroupChatHistoryAsync", onGroupMsgReceived); // _logMessagesSub = Logger.root.onRecord.listen(_handleLogMessage);
registerCallListners(); // _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: <int>[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=="} //{"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<HubConnection> getHubConnection() async { Future<HubConnection> getHubConnection() async {
AppState().chatDetails = UserAutoLoginModel( AppState().chatDetails = getUserToken.UserAutoLoginModel(
response: Response.fromJson( response: getUserToken.Response.fromJson({
{
"id": 341682, "id": 341682,
"userName": "Aamir.Muhammad", "userName": "Aamir.Muhammad",
"email": "Aamir.Muhammad@cloudsolutions.com.sa", "email": "Aamir.Muhammad@cloudsolutions.com.sa",
"phone": null, "phone": null,
"title": "Aamir Saleem Ahmad Dost Muhammad", "title": "Aamir Saleem Ahmad Dost Muhammad",
"token": "token":
"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzYzMDY0MiwiZXhwIjoxNzA3NzE3MDQyLCJpYXQiOjE3MDc2MzA2NDJ9.OZZFkXduuhlWTYh67Cw5o6Bxx4J9EcAKoq6Hn-ZqzE39BfZtiF_sswAvecaIF2ULrL4qO2vk8EV0naGPcjZrZw", "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwODI1NjI5NywiZXhwIjoxNzA4MzQyNjk3LCJpYXQiOjE3MDgyNTYyOTd9.Y-QDVbSbPzcMVkHyIT06WgM0EsKH183hASZrIsXGkFOR_XZcqCJS-CrgdN0nOtxCWV6wd01dgfhMTNTZhybwiQ",
"isDomainUser": true, "isDomainUser": true,
"isActiveCode": false, "isActiveCode": false,
"encryptedUserId": "nn7RkYzbnQc=", "encryptedUserId": "nn7RkYzbnQc=",
"encryptedUserName": "/QruOyp4QMcmNXKZlljUgg==" "encryptedUserName": "/QruOyp4QMcmNXKZlljUgg=="
}, }),
)); );
String to = "dfK3ZqFD-BTlJLnuf1F5Cw";
HubConnection hub; HubConnection hub;
HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true); HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
hub = HubConnectionBuilder() // hub = HubConnectionBuilder()
.withUrl(ApiConsts.chatHubConnectionUrl + "?UserId=${AppState().chatDetails!.response!.id}&source=Desktop&access_token=${AppState().chatDetails!.response!.token}", options: httpOp) // .withUrl(ApiConsts.chatHubConnectionUrl + "?UserId=${AppState().chatDetails!.response!.id}&source=Desktop&access_token=${AppState().chatDetails!.response!.token}", options: httpOp)
.withAutomaticReconnect(retryDelays: <int>[2000, 5000, 10000, 20000]).build(); // .withAutomaticReconnect(retryDelays: <int>[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: <int>[2000, 5000, 10000, 20000]).build();
return hub; return hub;
} }
@ -805,26 +835,104 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
// mobileRecoder = null; // mobileRecoder = null;
// notifyListeners(); // 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<LogRecord> _logMessagesSub;
void _handleLogMessage(LogRecord msg) {
print(msg.message);
}
void _httpClientCreateCallback(Client httpClient) {
HttpOverrides.global = HttpOverrideCertificateVerificationInDev();
}
// Future<void> 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<Object?>? val) {
print("----------Event Received ----------");
print(val);
}
Future<void> 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 { class ChatService extends BaseService {
Future<UserAutoLoginModel> getUserCallToken({required String userid}) async { Future<getUserToken.UserAutoLoginModel> getUserCallToken({required String userid}) async {
UserAutoLoginModel userLoginResponse = UserAutoLoginModel(); getUserToken.UserAutoLoginModel userLoginResponse = getUserToken.UserAutoLoginModel();
baseAppClient.post( http.post(Uri.parse("${ApiConsts.chatLoginTokenUrl}externaluserlogin"), body: {
"${ApiConsts.chatLoginTokenUrl}externaluserlogin", "employeeNumber": userid,
body: { "password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG",
"employeeNumber": userid, }).then((response) {
"password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG", userLoginResponse = getUserToken.userAutoLoginModelFromJson(response.body);
}, }).onError((error, stackTrace) {
onSuccess: (dynamic response, int statusCode) { hasError = true;
userLoginResponse = userAutoLoginModelFromJson(response.body); print(error);
}, super.error = error.toString();
onFailure: (String error, int statusCode) { });
hasError = true;
print(error);
super.error = error;
},
);
return userLoginResponse; return userLoginResponse;
} }
} }

@ -467,7 +467,7 @@ class _AppDrawerState extends State<AppDrawer> {
Future<PermissionStatus> micPer = Permission.microphone.request(); Future<PermissionStatus> micPer = Permission.microphone.request();
Future<PermissionStatus> camPer = Permission.camera.request(); Future<PermissionStatus> camPer = Permission.camera.request();
if (await micPer.isGranted && await camPer.isGranted) { if (await micPer.isGranted && await camPer.isGranted) {
callProv!.buildHubConnection(); // callProv!.buildHubConnection();
await callProv!.makeCall(callType: "VIDEO").then((value) { await callProv!.makeCall(callType: "VIDEO").then((value) {
Future.delayed(Duration(seconds: 3), () { Future.delayed(Duration(seconds: 3), () {
Navigator.push( Navigator.push(
@ -491,10 +491,45 @@ class _AppDrawerState extends State<AppDrawer> {
child: Container( child: Container(
height: 50, height: 50,
width: 200, width: 200,
child: Center(child: Text("Call Test")), child: Center(child: Text("Call")),
), ),
), ),
) ),
GestureDetector(
onTap: () async {
//Aamir Call
Future<PermissionStatus> micPer = Permission.microphone.request();
Future<PermissionStatus> 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")),
),
),
),
], ],
)) ))
], ],

Loading…
Cancel
Save