Commit ae951390 authored by Ikram Haq's avatar Ikram Haq
Browse files

Implement logic to control the notification

parent 12709772
Loading
Loading
Loading
Loading
+111 −35
Original line number Diff line number Diff line
@@ -154,6 +154,8 @@ type PeriodicCheck struct {

type PeriodicCheck1 struct {
	NextTts            int32 //next time to send, derived from frequency
	Reporting_amount   float64
	Reporting_interval float64
	Subscription       *UserLocationPeriodicSubscription
}

@@ -1227,18 +1229,43 @@ func contains(s []LocationEventType, str LocationEventType) bool {
	return false
}
func checkNotificationPeriodicTrigger1() {
	//only check if there is at least one subscription
	mutex.Lock()
	defer mutex.Unlock()
	//check all that applies

	currentTime := time.Now().Unix()

	for subsId, periodicCheck := range periodicSubscriptionMap1 {
		if periodicCheck != nil && periodicCheck.Subscription != nil {
			var periodicNotif UserLocationPeriodicNotification
		if periodicCheck == nil || periodicCheck.Subscription == nil {
			continue
		}

		addr := periodicCheck.Subscription.Address

		if !addressConnectedMap[addr] {
			continue
		}

		// Check if it's time to send the next notification
		timeDifference := currentTime - int64(periodicCheck.NextTts)
		reportingIntervalInSeconds := int64(periodicCheck.Reporting_interval)

		if timeDifference >= reportingIntervalInSeconds {
			// Update NextTts for the next notification
			periodicCheck.NextTts = int32(currentTime + reportingIntervalInSeconds)

			// Prepare and send the notification
			sendNotification(subsId, periodicCheck)

			// Log the notification
			subsIdStr := strconv.Itoa(subsId)
			log.Info("Periodic Notification (" + subsIdStr + ") For " + addr)
		}
	}
}
func sendNotification(subsId int, periodicCheck *PeriodicCheck1) {
	var periodicNotif UserLocationPeriodicNotification
	addr := periodicCheck.Subscription.Address

	geoDataInfo, _, err := gisAppClient.GeospatialDataApi.GetGeoDataByName(context.TODO(), addr, nil)
	if err != nil {
		log.Error("Failed to communicate with gis engine: ", err)
@@ -1259,14 +1286,62 @@ func checkNotificationPeriodicTrigger1() {
	periodicNotif.IsFinalNotification = false
	periodicNotif.Links = periodicCheck.Subscription.Links
	periodicNotif.NotificationType = "userLocationPeriodicSubscription"
	result := new(NotificationResult)
	*result = SUCCESS
	periodicNotif.Result = result
	subsIdStr := strconv.Itoa(subsId)
	var inlinePeriodicSubscriptionNotification InlineUserLocationPeriodicNotification
	inlinePeriodicSubscriptionNotification.UserLocationPeriodicNotification = &periodicNotif
	sendSubscriptionNotification1(periodicCheck.Subscription.CallbackReference, inlinePeriodicSubscriptionNotification)
	log.Info("Periodic Notification"+"("+subsIdStr+") For ", periodicCheck.Subscription.Address)
}
	}
}

// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// func checkNotificationPeriodicTrigger1() {
// 	//only check if there is at least one subscription
// 	mutex.Lock()
// 	defer mutex.Unlock()
// 	//check all that applies
// 	for subsId, periodicCheck := range periodicSubscriptionMap1 {
// 		if periodicCheck != nil && periodicCheck.Subscription != nil {
// 			var periodicNotif UserLocationPeriodicNotification
// 			addr := periodicCheck.Subscription.Address

// 			if !addressConnectedMap[addr] {
// 				continue
// 			}
// 			geoDataInfo, _, err := gisAppClient.GeospatialDataApi.GetGeoDataByName(context.TODO(), addr, nil)
// 			if err != nil {
// 				log.Error("Failed to communicate with gis engine: ", err)
// 				return
// 			}
// 			periodicNotif.Address = addr
// 			var locationInfo LocationInfo
// 			locationInfo.Latitude = nil
// 			locationInfo.Latitude = append(locationInfo.Latitude, geoDataInfo.Location.Coordinates[1])
// 			locationInfo.Longitude = nil
// 			locationInfo.Longitude = append(locationInfo.Longitude, geoDataInfo.Location.Coordinates[0])
// 			locationInfo.Shape = 2
// 			seconds := time.Now().Unix()
// 			var timestamp TimeStamp
// 			timestamp.Seconds = int32(seconds)
// 			locationInfo.Timestamp = &timestamp
// 			periodicNotif.LocationInfo = &locationInfo
// 			periodicNotif.IsFinalNotification = false
// 			periodicNotif.Links = periodicCheck.Subscription.Links
// 			periodicNotif.NotificationType = "userLocationPeriodicSubscription"
// 			result := new(NotificationResult)
// 			*result = SUCCESS
// 			periodicNotif.Result = result
// 			subsIdStr := strconv.Itoa(subsId)
// 			var inlinePeriodicSubscriptionNotification InlineUserLocationPeriodicNotification
// 			inlinePeriodicSubscriptionNotification.UserLocationPeriodicNotification = &periodicNotif
// 			sendSubscriptionNotification1(periodicCheck.Subscription.CallbackReference, inlinePeriodicSubscriptionNotification)
// 			log.Info("Periodic Notification"+"("+subsIdStr+") For ", periodicCheck.Subscription.Address)
// 		}
// 	}
// }

func checkNotificationPeriodicTrigger() {

@@ -1442,7 +1517,8 @@ func registerPeriodic1(periodicSub *UserLocationPeriodicSubscription, subsIdStr
	defer mutex.Unlock()
	var periodicCheck PeriodicCheck1
	periodicCheck.Subscription = periodicSub
	// periodicCheck.NextTts = periodicSub.Frequency
	periodicCheck.Reporting_amount = periodicSub.PeriodicEventInfo.ReportingAmount
	periodicCheck.Reporting_interval = periodicSub.PeriodicEventInfo.ReportingInterval
	periodicSubscriptionMap1[subsId] = &periodicCheck
}