From bbde9acf550c4148be26c0dda20e58967fe8bb59 Mon Sep 17 00:00:00 2001 From: SerLiunx-ctrl <17689543@qq.com> Date: Fri, 11 Apr 2025 09:16:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=8A=B6=E6=80=81=E6=9C=BA=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E7=8A=B6=E6=80=81=E9=80=BB=E8=BE=91=E5=A4=B1?= =?UTF-8?q?=E6=95=88.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../machine/DefaultConcurrentStateMachine.java | 10 ++++++++++ .../statemanagement/machine/StandardStateMachine.java | 5 +++++ .../statemanagement/manager/AbstractStateManager.java | 3 +++ .../java/com/serliunx/statemanagement/MachineTest.java | 4 ++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/serliunx/statemanagement/machine/DefaultConcurrentStateMachine.java b/src/main/java/com/serliunx/statemanagement/machine/DefaultConcurrentStateMachine.java index a10ad7f..66bdc8f 100644 --- a/src/main/java/com/serliunx/statemanagement/machine/DefaultConcurrentStateMachine.java +++ b/src/main/java/com/serliunx/statemanagement/machine/DefaultConcurrentStateMachine.java @@ -32,6 +32,11 @@ public class DefaultConcurrentStateMachine extends AbstractStateMachine im S initialState ) { super(stateList, new StateMachineContext<>(entryHandlers, leaveHandlers, exchangeHandlers, eventRegistries, executor, async, initialState)); + + final int initialIndex = indexOf(context.initialState); + if (initialIndex != -1) { + updateCurrentIndex(initialIndex); + } } @Override @@ -149,6 +154,11 @@ public class DefaultConcurrentStateMachine extends AbstractStateMachine im return get(index.get()); } + @Override + protected void updateCurrentIndex(int newIndex) { + this.index.set(newIndex); + } + /** * 是否为默认状态 */ diff --git a/src/main/java/com/serliunx/statemanagement/machine/StandardStateMachine.java b/src/main/java/com/serliunx/statemanagement/machine/StandardStateMachine.java index 59e1d50..e475758 100644 --- a/src/main/java/com/serliunx/statemanagement/machine/StandardStateMachine.java +++ b/src/main/java/com/serliunx/statemanagement/machine/StandardStateMachine.java @@ -36,5 +36,10 @@ public class StandardStateMachine extends AbstractStateMachine implements ) { super(stateList, new StateMachineContext<>(entryHandlers, leaveHandlers, exchangeHandlers, eventRegistries, executor, async, initialState)); + + final int initialIndex = indexOf(context.initialState); + if (initialIndex != -1) { + updateCurrentIndex(initialIndex); + } } } diff --git a/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java b/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java index 1187316..9dc273d 100644 --- a/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java +++ b/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java @@ -167,6 +167,9 @@ public abstract class AbstractStateManager implements StateManager { * @return 序号 {@link List#indexOf(Object)} */ protected int indexOf(S state) { + if (state == null) { + return -1; + } return stateList.indexOf(state); } diff --git a/src/test/java/com/serliunx/statemanagement/MachineTest.java b/src/test/java/com/serliunx/statemanagement/MachineTest.java index 94b2b05..7256e7c 100644 --- a/src/test/java/com/serliunx/statemanagement/MachineTest.java +++ b/src/test/java/com/serliunx/statemanagement/MachineTest.java @@ -42,8 +42,8 @@ public class MachineTest { .concurrent() .build(); - stateMachine.publish(PrinterEvent.TURN_OFF); - +// stateMachine.publish(PrinterEvent.TURN_OFF); + System.out.println(stateMachine.current()); stateMachine.close(); } }