Loading go-apps/meep-loc-serv/server/loc-serv.go +43 −8 Original line number Diff line number Diff line Loading @@ -152,6 +152,9 @@ type AreaCircleCheck struct { AddrInArea map[string]bool NbNotificationsSent int32 NotificationCheckReady bool Reporting_amount int32 Reporting_interval int32 TimeStamp int64 Subscription *UserAreaSubscription } Loading Loading @@ -1351,6 +1354,7 @@ func checkNotificationAreaCircle(addressToCheck string) { //only check if there is at least one subscription mutex.Lock() defer mutex.Unlock() currentTime := time.Now().Unix() //check all that applies for subsId, areaCircleCheck := range areaCircleSubscriptionMap { if areaCircleCheck != nil && areaCircleCheck.Subscription != nil { Loading @@ -1360,6 +1364,16 @@ func checkNotificationAreaCircle(addressToCheck string) { // } //loop through every reference address if areaCircleCheck.Subscription.ExpiryDeadline != nil && time.Now().Unix() > int64(areaCircleSubscriptionMap[subsId].TimeStamp) { subsIdStr := strconv.Itoa(subsId) log.Info("Expiry deadline passed for subscription: ") // Optionally, you can remove the subscription from the map or perform other cleanup actions err := rc.JSONDelEntry(baseKey+typeAreaCircleSubscription+":"+subsIdStr, ".") if err != nil { log.Error(err.Error()) } continue } for _, addr := range areaCircleCheck.Subscription.AddressList { if addr != addressToCheck { continue Loading Loading @@ -1429,7 +1443,25 @@ func checkNotificationAreaCircle(addressToCheck string) { var inlineCircleSubscriptionNotification InlineUserAreaNotification inlineCircleSubscriptionNotification.UserAreaNotification = &areaCircleNotif areaCircleCheck.NbNotificationsSent++ if areaCircleCheck.Subscription.ReportingCtrl != nil { // If NextTts has passed, send notification if currentTime >= int64(areaCircleCheck.NextTts) { // Update NextTts for the next notification areaCircleCheck.NextTts = int32(currentTime + int64(areaCircleCheck.Reporting_interval)) // Check if reporting amount is reached if areaCircleCheck.Reporting_amount <= 0 { // If reporting amount is zero, no more notifications should be sent continue } // Decrement reporting amount areaCircleCheck.Reporting_amount-- sendSubscriptionNotification5(areaCircleCheck.Subscription.CallbackReference, inlineCircleSubscriptionNotification) } } else { // If no reporting control parameters, send notification without conditions sendSubscriptionNotification5(areaCircleCheck.Subscription.CallbackReference, inlineCircleSubscriptionNotification) } log.Info("Area Circle Notification" + "(" + subsIdStr + ") For " + addr + " when " + " area") // areaCircleSubscriptionMap[subsId].NextTts = areaCircleCheck.Subscription.Frequency // areaCircleSubscriptionMap[subsId].NotificationCheckReady = false Loading Loading @@ -1721,19 +1753,22 @@ func registerAreaCircle(areaSub *UserAreaSubscription, subsIdStr string) { if err != nil { log.Error(err) } var expiryTime int64 if areaSub != nil && areaSub.ExpiryDeadline != nil { expiryTime = time.Now().Unix() + int64(areaSub.ExpiryDeadline.Seconds) } mutex.Lock() defer mutex.Unlock() var areaCircleCheck AreaCircleCheck areaCircleCheck.Subscription = areaSub areaCircleCheck.NbNotificationsSent = 0 areaCircleCheck.AddrInArea = map[string]bool{} //checkImmediate ignored, will be hit on next check anyway //if areaCircleSub.CheckImmediate { areaCircleCheck.NextTts = 0 //next time periodic trigger hits, will be forced to trigger //} else { // areaCircleCheck.NextTts = areaCircleSub.Frequency // } if areaSub != nil && areaSub.ReportingCtrl != nil { areaCircleCheck.Reporting_amount = areaSub.ReportingCtrl.MaximumCount areaCircleCheck.Reporting_interval = areaSub.ReportingCtrl.MinimumInterval } areaCircleCheck.TimeStamp = expiryTime areaCircleCheck.NextTts = 0 areaCircleSubscriptionMap[subsId] = &areaCircleCheck } Loading Loading
go-apps/meep-loc-serv/server/loc-serv.go +43 −8 Original line number Diff line number Diff line Loading @@ -152,6 +152,9 @@ type AreaCircleCheck struct { AddrInArea map[string]bool NbNotificationsSent int32 NotificationCheckReady bool Reporting_amount int32 Reporting_interval int32 TimeStamp int64 Subscription *UserAreaSubscription } Loading Loading @@ -1351,6 +1354,7 @@ func checkNotificationAreaCircle(addressToCheck string) { //only check if there is at least one subscription mutex.Lock() defer mutex.Unlock() currentTime := time.Now().Unix() //check all that applies for subsId, areaCircleCheck := range areaCircleSubscriptionMap { if areaCircleCheck != nil && areaCircleCheck.Subscription != nil { Loading @@ -1360,6 +1364,16 @@ func checkNotificationAreaCircle(addressToCheck string) { // } //loop through every reference address if areaCircleCheck.Subscription.ExpiryDeadline != nil && time.Now().Unix() > int64(areaCircleSubscriptionMap[subsId].TimeStamp) { subsIdStr := strconv.Itoa(subsId) log.Info("Expiry deadline passed for subscription: ") // Optionally, you can remove the subscription from the map or perform other cleanup actions err := rc.JSONDelEntry(baseKey+typeAreaCircleSubscription+":"+subsIdStr, ".") if err != nil { log.Error(err.Error()) } continue } for _, addr := range areaCircleCheck.Subscription.AddressList { if addr != addressToCheck { continue Loading Loading @@ -1429,7 +1443,25 @@ func checkNotificationAreaCircle(addressToCheck string) { var inlineCircleSubscriptionNotification InlineUserAreaNotification inlineCircleSubscriptionNotification.UserAreaNotification = &areaCircleNotif areaCircleCheck.NbNotificationsSent++ if areaCircleCheck.Subscription.ReportingCtrl != nil { // If NextTts has passed, send notification if currentTime >= int64(areaCircleCheck.NextTts) { // Update NextTts for the next notification areaCircleCheck.NextTts = int32(currentTime + int64(areaCircleCheck.Reporting_interval)) // Check if reporting amount is reached if areaCircleCheck.Reporting_amount <= 0 { // If reporting amount is zero, no more notifications should be sent continue } // Decrement reporting amount areaCircleCheck.Reporting_amount-- sendSubscriptionNotification5(areaCircleCheck.Subscription.CallbackReference, inlineCircleSubscriptionNotification) } } else { // If no reporting control parameters, send notification without conditions sendSubscriptionNotification5(areaCircleCheck.Subscription.CallbackReference, inlineCircleSubscriptionNotification) } log.Info("Area Circle Notification" + "(" + subsIdStr + ") For " + addr + " when " + " area") // areaCircleSubscriptionMap[subsId].NextTts = areaCircleCheck.Subscription.Frequency // areaCircleSubscriptionMap[subsId].NotificationCheckReady = false Loading Loading @@ -1721,19 +1753,22 @@ func registerAreaCircle(areaSub *UserAreaSubscription, subsIdStr string) { if err != nil { log.Error(err) } var expiryTime int64 if areaSub != nil && areaSub.ExpiryDeadline != nil { expiryTime = time.Now().Unix() + int64(areaSub.ExpiryDeadline.Seconds) } mutex.Lock() defer mutex.Unlock() var areaCircleCheck AreaCircleCheck areaCircleCheck.Subscription = areaSub areaCircleCheck.NbNotificationsSent = 0 areaCircleCheck.AddrInArea = map[string]bool{} //checkImmediate ignored, will be hit on next check anyway //if areaCircleSub.CheckImmediate { areaCircleCheck.NextTts = 0 //next time periodic trigger hits, will be forced to trigger //} else { // areaCircleCheck.NextTts = areaCircleSub.Frequency // } if areaSub != nil && areaSub.ReportingCtrl != nil { areaCircleCheck.Reporting_amount = areaSub.ReportingCtrl.MaximumCount areaCircleCheck.Reporting_interval = areaSub.ReportingCtrl.MinimumInterval } areaCircleCheck.TimeStamp = expiryTime areaCircleCheck.NextTts = 0 areaCircleSubscriptionMap[subsId] = &areaCircleCheck } Loading