Loading go-apps/meep-loc-serv/server/loc-serv.go +111 −35 Original line number Diff line number Diff line Loading @@ -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 } Loading Loading @@ -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) Loading @@ -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 = ×tamp // 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() { Loading Loading @@ -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 } Loading Loading
go-apps/meep-loc-serv/server/loc-serv.go +111 −35 Original line number Diff line number Diff line Loading @@ -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 } Loading Loading @@ -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) Loading @@ -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 = ×tamp // 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() { Loading Loading @@ -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 } Loading