Esempio n. 1
0
        public static FTConnectionController CreateStatelessSession(
            ITransportationStateProvider transportationStateProvider,
            int heartBeatTimeInterval,
            int silenceTimeLimit)
        {
            FTConnectionController controller = new FTStatelessConnectionController();

            controller.Init(transportationStateProvider, heartBeatTimeInterval, silenceTimeLimit);
            return(controller);
        }
Esempio n. 2
0
        /*
         *  | 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();
        }