Untitled
unknown
dart
a year ago
16 kB
6
Indexable
import 'dart:convert';
import 'package:get/get.dart';
import 'package:takamol_user/app/enums/enums.dart';
import 'package:takamol_user/app/modules/bus_shuttle/modules/bus_active_trip/controllers/bus_active_trip_controller.dart';
import 'package:takamol_user/app/modules/home/controllers/home_controller.dart';
import 'package:takamol_user/app/modules/hospitality/current_order/controllers/hospitality_current_order_controller.dart';
import 'package:takamol_user/app/modules/hospitality/order_history/controller/order_history_controller.dart';
import 'package:takamol_user/app/modules/hospitality/restaurant/kitchen/controllers/kitchen_controller.dart';
import 'package:takamol_user/app/modules/hospitality/restaurant/orders/controllers/orders_controller.dart';
import 'package:takamol_user/app/modules/notifications/controllers/notifications_controller.dart';
import 'package:takamol_user/app/modules/user_controller.dart';
import 'package:takamol_user/app/modules/vip/modules/vip_active_trip/controllers/vip_active_trip_controller.dart';
import 'package:takamol_user/app/modules/vip/widgets/rate_vip_trip_bottom_sheet/view/rate_vip_trip_view.dart';
import 'package:takamol_user/app/modules/visitors/calendar/controllers/calendar_controller.dart';
import 'package:takamol_user/app/modules/visitors/requests/my_requests_visits/controllers/my_requests_controller.dart';
import 'package:takamol_user/app/routes/app_pages.dart';
import 'package:takamol_user/app/server/models/lat_lng_pair.dart';
import 'package:takamol_user/main.dart';
import '../../../resources/strings_generated.dart';
import '../../data/models/signalr_notification.dart';
import '../../modules/bus_shuttle/modules/request_bus_trip/controllers/request_bus_trip_controller.dart';
import '../../modules/bus_shuttle/widgets/rate_bus_trip_bottom_sheet/view/rate_bus_trip_view.dart';
import '../../modules/drawer/view/hidden_drawer.dart';
import '../../modules/home/bindings/home_binding.dart';
import '../../utils/functions/app_functions.dart';
import '../models/users.dart';
import 'signalr_client.dart';
class EntityHub {
static SignalRClient? signalR;
static Future init() async {
final AppFunctions appFunctions = AppFunctions();
// Channel
signalR = SignalRClient("notificationHub");
// Start
// Close
//signalR.connection.onclose((exception) => output(exception));
if (signalR != null) {
await signalR!.start();
signalR!.on(
"ReceiveMessage",
(data) {
Get.log(data.toString());
// 14 => location
// 17 boarding
// 18 getoff
if (data != null && data.isNotEmpty && data.first != null) {
// Set notification
SignalRNotification signalRNotification =
SignalRNotification.fromJson(data.first);
// Log
// if (kDebugMode) {
// Get.log(signalRNotification.toJson().toString());
// }
// Get current route
String currentRoute = Get.currentRoute.toString();
// Check Auth
if (currentUser is User) {
// BusTripDriverUpdateGeo
if (signalRNotification.notificationType == 14) {
if (currentRoute.contains('RequestBusTripView'.toString())) {
final RequestBusTripController requestBusTripController =
Get.find();
requestBusTripController.requestBusTripMethods.getOnlineBuses(
isEvent: requestBusTripController.isEventsOnly.value);
} else if (currentRoute
.contains('BusActiveTripView'.toString())) {
final BusActiveTripController busActiveTripController =
Get.find();
busActiveTripController.busActiveTripMethods
.getCurrentBusTrips(withLoading: false, addMarker: true);
} else if (currentRoute.contains('VipActiveTripView')) {
final VipActiveTripController vipController = Get.find();
Map<String, dynamic> jsonMap =
jsonDecode(signalRNotification.messageParameters ?? "{}");
double? latitude = jsonMap['Latitude'];
double? longitude = jsonMap['Longitude'];
String? direction = jsonMap['Direction'];
LatLngPair p1 = LatLngPair(lat: latitude, lng: longitude);
vipController.methods.addUpdateDriverMarker(
driverId: signalRNotification.userId ?? '',
p1: p1,
direction: direction);
}
// Refresh
}
// BusTripHeadingDestination
else if (signalRNotification.notificationType == 17) {
if (currentRoute.contains('BusActiveTripView'.toString())) {
final BusActiveTripController busActiveTripController =
Get.find();
busActiveTripController.busActiveTripMethods
.getCurrentBusTrips(withLoading: false, addMarker: true);
}
}
// BusTripArrivedDestination
else if (signalRNotification.notificationType == 18) {
if (currentRoute.contains('BusActiveTripView'.toString())) {
final BusActiveTripController busActiveTripController =
Get.find();
if (signalRNotification.transId != null) {
bool isEventTrip = busActiveTripController.busTrip.id ==
signalRNotification.transId;
appFunctions.startNotiSound();
AppFunctions().openAppBottomSheet(
title: isEventTrip
? AppStrings.eventTrip
: AppStrings.busOrder,
body: RateBusTripView(
tripId: signalRNotification.transId!,
goToHome: true,
),
);
} else {
Get.offAll(
() => const HiddenDrawerScreen(),
binding: HomeBinding(),
);
}
}
}
// on going
else if (signalRNotification.notificationType == 28) {
if (currentRoute.contains('VipActiveTripView'.toString())) {
final VipActiveTripController vipController = Get.find();
vipController.methods.getCurrentTrip(withLoading: false);
appFunctions.startNotiSound();
appFunctions.showGetSnackbar(
message: AppStrings.driverVipOnGoing, duration: 6);
}
}
// arrived
else if (signalRNotification.notificationType == 29) {
if (currentRoute.contains('VipActiveTripView'.toString())) {
final VipActiveTripController vipController = Get.find();
vipController.methods.getCurrentTrip(withLoading: false);
appFunctions.startNotiSound();
appFunctions.showGetSnackbar(
message: AppStrings.driverVipArrived, duration: 6);
}
}
// trip start
else if (signalRNotification.notificationType == 30) {
if (currentRoute.contains('VipActiveTripView'.toString())) {
final VipActiveTripController vipController = Get.find();
appFunctions.startNotiSound();
vipController.methods.getCurrentTrip(withLoading: false);
}
}
// trip finished
else if (signalRNotification.notificationType == 31) {
Get.find<HomeController>().getStatisticsOrders('22');
if (signalRNotification.transId != null) {
appFunctions.startNotiSound();
AppFunctions().openAppBottomSheet(
title: AppStrings.privateCar,
body: RateVipTripView(
tripId: signalRNotification.transId!,
goToHome:
currentRoute.contains('VipActiveTripView'.toString()),
),
);
} else {
Get.offAll(
() => const HiddenDrawerScreen(),
binding: HomeBinding(),
);
}
}
// new driver assigned
else if (signalRNotification.notificationType == 33) {
if (currentRoute.contains('VipActiveTripView'.toString())) {
final VipActiveTripController vipController = Get.find();
appFunctions.startNotiSound();
vipController.methods.getCurrentTrip(withLoading: false);
appFunctions.showGetSnackbar(
message: AppStrings.assignedVipDriver, duration: 6);
}
} else if (signalRNotification.notificationType == 53) {
if (!currentRoute.contains(Routes.ORDER_HISTORY)) {
Get.put(OrderHistoryController());
}
Get.find<OrderHistoryController>().rateOrder(
orderId: signalRNotification.transId!,
orderNumber: 0,
);
}
// Admin Accept Cancel Trip
else if (signalRNotification.notificationType == 35) {
if (currentRoute.contains('VipActiveTripView'.toString())) {
Get.offAll(
() => const HiddenDrawerScreen(),
binding: HomeBinding(),
);
} else {
if (Get.isRegistered<HomeController>()) {
final HomeController hc = Get.find();
hc.removeVipOrder();
}
}
appFunctions.startNotiSound();
appFunctions.showGetSnackbar(
message: AppStrings.vipTripCanceledByDriver, duration: 6);
}
// Admin Accept Cancel Trip
else if (signalRNotification.notificationType == 38) {
if (currentRoute.contains('VipActiveTripView'.toString())) {
Get.offAll(
() => const HiddenDrawerScreen(),
binding: HomeBinding(),
);
} else {
if (Get.isRegistered<HomeController>()) {
final HomeController hc = Get.find();
hc.removeVipOrder();
}
}
appFunctions.startNotiSound();
appFunctions.showGetSnackbar(
message: AppStrings.orderCanceledByAdmin, duration: 6);
}
// Users
else if (signalRNotification.notificationType == 21) {
// Update current user data
if (signalRNotification.toUserId == currentUser!.id) {
Get.find<UserController>().getAndSetUserData();
}
}
// Notifications
else if (signalRNotification.notificationType == 22) {
// Update notifications
if (signalRNotification.toUserId == currentUser!.id) {
Get.find<NotificationsController>()
.getNotifications(replace: true);
}
}
// Restaurants
else if (signalRNotification.notificationType == 23) {
if (currentRoute.contains('kitchen')) {
Get.find<KitchenController>().getCategories(replace: true);
Get.find<KitchenController>().getItems(replace: true);
}
}
// RestaurantItemsCategories
else if (signalRNotification.notificationType == 24) {
if (currentRoute.contains(Routes.KITCHEN)) {
Get.find<KitchenController>().getCategories(replace: true);
}
}
// RestaurantItems
else if (signalRNotification.notificationType == 25) {
if (currentRoute.contains(Routes.KITCHEN)) {
Get.find<KitchenController>().getItems(replace: true);
}
}
// RestaurantOrders
else if (signalRNotification.notificationType == 52) {
// Get.find<HomeController>().getStatisticsOrders('11');
print(Get.find<HospitalityCurrentOrderController>()
.restaurantOrder
.id);
print(signalRNotification.transId);
if ((currentRoute.contains(Routes.HOSPITALITY_CURRENT_ORDER) ||
currentRoute.contains("HospitalityCurrentOrder")) &&
Get.find<HospitalityCurrentOrderController>()
.restaurantOrder
.id ==
signalRNotification.transId) {
Get.find<HospitalityCurrentOrderController>()
.updateOrderData();
}
} else if (signalRNotification.notificationType == 26) {
// Home
Get.find<HomeController>().getStatisticsOrders('11');
// Get.find<HomeController>().getLatestOrder();
// Order history
if (currentRoute.contains(Routes.ORDER_HISTORY)) {
Get.find<OrderHistoryController>().getAllOrders();
Get.find<OrdersController>().getOrders(replace: true);
}
// Rate order
// if (signalRNotification.message == "RequestRate" &&
// signalRNotification.transId != null &&
// signalRNotification.messageParameters != null &&
// signalRNotification.toUserId == currentUser?.id) {
// if (!currentRoute.contains(Routes.ORDER_HISTORY)) {
// Get.put(OrderHistoryController());
// }
// Get.find<OrderHistoryController>().rateOrder(
// orderId: signalRNotification.transId!,
// orderNumber:
// int.parse(signalRNotification.messageParameters!),
// );
// }
// Current order
if ((currentRoute.contains(Routes.HOSPITALITY_CURRENT_ORDER) ||
currentRoute.contains("HospitalityCurrentOrder")) &&
Get.find<HospitalityCurrentOrderController>()
.restaurantOrder
.id ==
signalRNotification.transId) {
Get.find<HospitalityCurrentOrderController>()
.updateOrderData();
}
// Teaboy
if (currentUser?.type == UserType.restaurantWaiter) {
Get.find<HomeController>().getAllOrders();
Get.find<HomeController>()
.getStatusOrders(replace: true, getStatusByIndex: true);
}
}
// Requests
else if (signalRNotification.notificationType == 27) {
if (signalRNotification.toUserId == currentUser!.id) {
Get.find<HomeController>().getRequests(replace: true);
Get.find<CalendarController>().getRequests(replace: true);
Get.find<MyRequestsController>().getRequests(replace: true);
}
}
}
}
},
);
}
}
static void startSignalRService() async {
if (signalR != null && currentUser?.id != null) {
await signalR!.start();
}
}
static void stopSignalRService() async {
if (signalR != null && currentUser?.id != null) {
await signalR!.stop();
}
}
}
Editor is loading...
Leave a Comment