Пример #1
0
        static void Main(string[] args)
        {
            var reservationContext = new ReservationContext();
            var state = (ReservationState)reservationContext.State;

            state.AuthorizationProcess = new AuthorizationProcess
            {
                Id = 10000,
                MasterLocatorId = 393875,
                AuthFlowType    = AuthFlowType.ByCorporate
            };

            reservationContext.StateSubject.Subscribe(rs =>
            {
                Console.WriteLine("OnNext: " + rs.Name);
            },
                                                      ex => Console.WriteLine("OnError: " + ex),
                                                      () => Console.WriteLine("OnComplete"));

            reservationContext.StateSubject
            .Where(rs => rs.StateInfo != null && rs.StateInfo.StateHook == StateHook.OnEntry)
            .Subscribe(rs =>
            {
                Console.WriteLine("OnNext: " + rs.Name);
                Console.WriteLine("OnNext Hook: " + rs.StateInfo.StateHook);
            },
                       ex => Console.WriteLine("OnError: " + ex),
                       () => Console.WriteLine("OnComplete"));

            reservationContext.StateSubject
            .Where(rs => rs.StateInfo != null && rs.StateInfo.StateHook == StateHook.OnExit)
            .Subscribe(rs =>
            {
                Console.WriteLine("OnNext: " + rs.Name);
                Console.WriteLine("OnNext Hook: " + rs.StateInfo.StateHook);
            },
                       ex => Console.WriteLine("OnError: " + ex),
                       () => Console.WriteLine("OnComplete"));

            reservationContext.TransitionSubject.Subscribe(st =>
            {
                Console.WriteLine("current: {0}, new: {1}", st.From, st.To);
            });

            reservationContext.RequestReview();
            reservationContext.Approve();
            reservationContext.Approve();
            reservationContext.Cancel();
            reservationContext.Pay();
            //reservationContext.EmitTicket();
            Console.ReadKey();
        }