public static FTConnectionController CreateStatelessSession( ITransportationStateProvider transportationStateProvider, int heartBeatTimeInterval, int silenceTimeLimit) { FTConnectionController controller = new FTStatelessConnectionController(); controller.Init(transportationStateProvider, heartBeatTimeInterval, silenceTimeLimit); return(controller); }
/* * | state id | state name | * | 0 | unconnected | * | 1 | connected | * | 2 | recovery | */ private void BuildStateMachine(ITransportationStateProvider transportationStateProvider) { stateMachine.AddState(unconnectedState); stateMachine.AddState(connectedState); stateMachine.AddState(recoveryState); transportationStateProvider.ConnectionEstablished += () => transportationReadyTrigger.Fire(); transportationStateProvider.ConnectionLost += () => transportationLostTrigger.Fire(); unconnectedState.StateEnter += () => { if (!started) { started = true; return; } Logger.Log($"unconnectedState.StateEnter, stop timers, state={StateDescr()}", "FT"); silenceTimer.Stop(); heartBeatTimer.Stop(); Logger.Log($"invoking connection lost event, state={StateDescr()}", "FT"); ConnectionLost?.Invoke(); }; unconnectedState.StateLeave += () => { Logger.Log($"unconnectedState.StateLeave, start silence timer, state={StateDescr()}", "FT"); silenceTimer.Start(); }; connectedState.StateEnter += () => { Logger.Log($"connectedState.StateEnter, start heart beat, state={StateDescr()}", "FT"); heartBeatTimer.Start(); }; stateMachine.AddEntryTransition(0, null); stateMachine.AddTransition(1, 0, silenceTimeoutTrigger); stateMachine.AddTransition(1, 0, transportationLostTrigger); AddCustomTransitionsAndActions(); stateMachine.Run(); }