mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-09-04 15:49:41 +00:00
fix of cancelling absence for subchains which become out of FSM
This commit is contained in:
@@ -144,10 +144,12 @@ class DefaultBehaviourContextWithFSM<T : State>(
|
|||||||
state.context
|
state.context
|
||||||
).apply {
|
).apply {
|
||||||
stateInitialAction(state)
|
stateInitialAction(state)
|
||||||
}.launchStateHandling(
|
}.run {
|
||||||
state,
|
launchStateHandling(
|
||||||
actualHandlersList
|
state,
|
||||||
)
|
actualHandlersList
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <I : T> add(kClass: KClass<I>, strict: Boolean, handler: BehaviourWithFSMStateHandler<I, T>) {
|
override fun <I : T> add(kClass: KClass<I>, strict: Boolean, handler: BehaviourWithFSMStateHandler<I, T>) {
|
||||||
@@ -188,7 +190,7 @@ class DefaultBehaviourContextWithFSM<T : State>(
|
|||||||
statesJobsMutex.withLock {
|
statesJobsMutex.withLock {
|
||||||
runCatchingSafely { statesJobs.remove(it) ?.cancel() }
|
runCatchingSafely { statesJobs.remove(it) ?.cancel() }
|
||||||
}
|
}
|
||||||
updatesFlows.remove(it.context)
|
updatesFlows.remove(it.context) ?.cancel()
|
||||||
}
|
}
|
||||||
statesManager.onChainStateUpdated.subscribeSafelyWithoutExceptions(this) { (old, new) ->
|
statesManager.onChainStateUpdated.subscribeSafelyWithoutExceptions(this) { (old, new) ->
|
||||||
statesJobsMutex.withLock {
|
statesJobsMutex.withLock {
|
||||||
@@ -197,7 +199,7 @@ class DefaultBehaviourContextWithFSM<T : State>(
|
|||||||
statesJobs[new] = launch { statePerformer(new) }.apply { enableRemoveOnCompletion(new) }
|
statesJobs[new] = launch { statePerformer(new) }.apply { enableRemoveOnCompletion(new) }
|
||||||
}
|
}
|
||||||
if (old.context != new.context) {
|
if (old.context != new.context) {
|
||||||
updatesFlows.remove(old.context)
|
updatesFlows.remove(old.context) ?.cancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user