mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-12-22 08:37:14 +00:00
cancel jobs of completed states in DefaultStatesMachine
This commit is contained in:
parent
8f928e16e1
commit
0a615e6d78
@ -5,6 +5,7 @@
|
|||||||
* `FSM`:
|
* `FSM`:
|
||||||
* Rename `DefaultUpdatableStatesMachine#compare` to `DefaultUpdatableStatesMachine#shouldReplaceJob`
|
* Rename `DefaultUpdatableStatesMachine#compare` to `DefaultUpdatableStatesMachine#shouldReplaceJob`
|
||||||
* `DefaultStatesManager` now is extendable
|
* `DefaultStatesManager` now is extendable
|
||||||
|
* `DefaultStatesMachine` will stop all jobs of states which was removed from `statesManager`
|
||||||
|
|
||||||
## 0.9.14
|
## 0.9.14
|
||||||
|
|
||||||
|
@ -105,6 +105,16 @@ open class DefaultStatesMachine <T: State>(
|
|||||||
statesManager.onChainStateUpdated.subscribeSafelyWithoutExceptions(this) {
|
statesManager.onChainStateUpdated.subscribeSafelyWithoutExceptions(this) {
|
||||||
launch { performStateUpdate(Optional.presented(it.first), it.second, scope.LinkedSupervisorScope()) }
|
launch { performStateUpdate(Optional.presented(it.first), it.second, scope.LinkedSupervisorScope()) }
|
||||||
}
|
}
|
||||||
|
statesManager.onEndChain.subscribeSafelyWithoutExceptions(this) { removedState ->
|
||||||
|
launch {
|
||||||
|
statesJobsMutex.withLock {
|
||||||
|
val stateInMap = statesJobs.keys.firstOrNull { stateInMap -> stateInMap == removedState }
|
||||||
|
if (stateInMap === removedState) {
|
||||||
|
statesJobs[stateInMap] ?.cancel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
statesManager.getActiveStates().forEach {
|
statesManager.getActiveStates().forEach {
|
||||||
launch { performStateUpdate(Optional.absent(), it, scope.LinkedSupervisorScope()) }
|
launch { performStateUpdate(Optional.absent(), it, scope.LinkedSupervisorScope()) }
|
||||||
|
@ -61,6 +61,7 @@ open class DefaultStatesManager<T : State>(
|
|||||||
when {
|
when {
|
||||||
stateByOldContext != old -> return@withLock
|
stateByOldContext != old -> return@withLock
|
||||||
stateByOldContext == null || old.context == new.context -> {
|
stateByOldContext == null || old.context == new.context -> {
|
||||||
|
repo.removeState(old)
|
||||||
repo.set(new)
|
repo.set(new)
|
||||||
_onChainStateUpdated.emit(old to new)
|
_onChainStateUpdated.emit(old to new)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user