mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
fix(action): fix unexpected scheduled action losing
This commit is contained in:
@@ -201,8 +201,13 @@ class ActionScheduler : AbstractAgentModule.Standalone() {
|
|||||||
val shouldBreak: Boolean
|
val shouldBreak: Boolean
|
||||||
)
|
)
|
||||||
|
|
||||||
fun collectToTrigger(tick: Int, previousTick: Int, triggerHour: Int): Set<Schedulable>? {
|
fun collectToTrigger(
|
||||||
if (tick > previousTick) {
|
tick: Int,
|
||||||
|
previousTick: Int,
|
||||||
|
triggerHour: Int,
|
||||||
|
includeRemainingHour: Boolean = false
|
||||||
|
): Set<Schedulable>? {
|
||||||
|
if (tick >= previousTick) {
|
||||||
val toTrigger = mutableSetOf<Schedulable>()
|
val toTrigger = mutableSetOf<Schedulable>()
|
||||||
for (i in previousTick..tick) {
|
for (i in previousTick..tick) {
|
||||||
val bucket = wheel[i]
|
val bucket = wheel[i]
|
||||||
@@ -213,6 +218,13 @@ class ActionScheduler : AbstractAgentModule.Standalone() {
|
|||||||
bucket.clear() // 避免重复触发
|
bucket.clear() // 避免重复触发
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (includeRemainingHour) {
|
||||||
|
val remainingHourBucket = schedulableGroupByHour[triggerHour]
|
||||||
|
if (remainingHourBucket.isNotEmpty()) {
|
||||||
|
toTrigger.addAll(remainingHourBucket.filter { it.enabled })
|
||||||
|
remainingHourBucket.clear()
|
||||||
|
}
|
||||||
|
}
|
||||||
return toTrigger
|
return toTrigger
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
@@ -261,7 +273,12 @@ class ActionScheduler : AbstractAgentModule.Standalone() {
|
|||||||
checkThenExecute(false) {
|
checkThenExecute(false) {
|
||||||
if (it.hour != launchingHour) {
|
if (it.hour != launchingHour) {
|
||||||
shouldBreak = true
|
shouldBreak = true
|
||||||
toTrigger = collectToTrigger(wheel.lastIndex, previousTick, launchingHour)
|
toTrigger = collectToTrigger(
|
||||||
|
wheel.lastIndex,
|
||||||
|
previousTick,
|
||||||
|
launchingHour,
|
||||||
|
includeRemainingHour = true
|
||||||
|
)
|
||||||
log.debug(
|
log.debug(
|
||||||
"Hour changed, previousTick: {}, tick: {}, toTriggerSize: {}",
|
"Hour changed, previousTick: {}, tick: {}, toTriggerSize: {}",
|
||||||
previousTick,
|
previousTick,
|
||||||
@@ -270,7 +287,12 @@ class ActionScheduler : AbstractAgentModule.Standalone() {
|
|||||||
)
|
)
|
||||||
return@checkThenExecute
|
return@checkThenExecute
|
||||||
}
|
}
|
||||||
toTrigger = collectToTrigger(tick, previousTick, launchingHour)
|
toTrigger = collectToTrigger(
|
||||||
|
tick,
|
||||||
|
previousTick,
|
||||||
|
launchingHour,
|
||||||
|
includeRemainingHour = tick >= wheel.lastIndex
|
||||||
|
)
|
||||||
if (tick >= wheel.lastIndex || schedulableGroupByHour[launchingHour].isEmpty()) {
|
if (tick >= wheel.lastIndex || schedulableGroupByHour[launchingHour].isEmpty()) {
|
||||||
state.value = WheelState.SLEEPING
|
state.value = WheelState.SLEEPING
|
||||||
shouldBreak = true
|
shouldBreak = true
|
||||||
|
|||||||
Reference in New Issue
Block a user