private
enum
State
{
PreInitCheckState,
InitializeAsync,
PreStartCheckState,
StartAsync,
CheckAsync,
PostCheckAsyncCheckState,
HaltAsync,
KillAsync
}
private
bool
StateCaseMachine()
{
State enmState = State.PreInitCheckState;
while
(
true
)
{
switch
( enmState )
{
case
State.PreInitCheckState:
switch
( CheckSystemState() )
{
case
SystemState.Stop:
return
false
;
case
SystemState.Pause:
Thread.Sleep( 500 );
break
;
case
SystemState.Run:
enmState = State.InitializeAsync;
break
;
}
break
;
case
State.InitializeAsync:
if
( InitializeAsyncAction() ==
false
)
{
return
false
;
}
enmState = State.PreStartCheckState;
break
;
case
State.PreStartCheckState:
switch
( CheckSystemState() )
{
case
SystemState.Stop:
return
false
;
case
SystemState.Pause:
Thread.Sleep( 500 );
enmState = State.PreInitCheckState;
break
;
case
SystemState.Run:
enmState = State.StartAsync;
break
;
}
break
;
case
State.StartAsync:
if
( StartAsyncAction() ==
false
)
{
return
false
;
}
enmState = State.CheckAsync;
break
;
case
State.CheckAsync:
switch
( CheckAsyncAction() )
{
case
AsyncActionStatus.Error:
enmState = State.KillAsync;
break
;
case
AsyncActionStatus.StillExecuting:
enmState = State.PostCheckAsyncCheckState;
break
;
case
AsyncActionStatus.Finished:
return
true
;
}
break
;
case
State.PostCheckAsyncCheckState:
switch
( CheckSystemState() )
{
case
SystemState.Stop:
enmState = State.KillAsync;
break
;
case
SystemState.Pause:
enmState = State.HaltAsync;
break
;
case
SystemState.Run:
Thread.Sleep( 500 );
enmState = State.CheckAsync;
break
;
}
break
;
case
State.HaltAsync:
if
( HaltAsyncAction() ==
false
)
{
enmState = State.KillAsync;
}
enmState = State.PreInitCheckState;
break
;
case
State.KillAsync:
KillAsyncAction();
return
false
;
}
}
}