예제 #1
0
        public void PersistInFile()
        {
            var stateMachine = new PersistableStateMachine();

            var invoker = new Invoker(stateMachine);

            invoker.Faulted += (sender, args) =>
            {
                this.SerializeToFile(stateMachine);
            };
            invoker.Completed += (sender, args) =>
            {
                Assert.Fail("1st run should result in an exception.");
            };
            invoker.Invoke().Wait();

            Thread.Sleep(1000);

            //2nd Run
            var sm = this.DeserializeFromFile();

            invoker          = new Invoker(sm);
            invoker.Faulted += (sender, args) =>
            {
                Assert.Fail("2nd run should not result in an exception.");
            };
            invoker.Completed += (sender, args) =>
            {
                //start state should only runned once
                Assert.AreEqual(1, ((PersistableStateMachine)args.StateMachine).InvokingCountOfState1);
            };
            invoker.Invoke().Wait();
        }
예제 #2
0
        private void SerializeToFile(PersistableStateMachine stateMachine)
        {
            var formatter = new BinaryFormatter();
            var stream    = new FileStream("temp.bin", FileMode.Create, FileAccess.Write, FileShare.None);

            formatter.Serialize(stream, stateMachine);
            stream.Close();
        }