예제 #1
0
        private static async Task Run()
        {
            var sharedState = SharedState.GlobalState;

            sharedState.Configuration.EnforceActions         = EnforceAction.Never;
            sharedState.Configuration.SynchronizationContext = SynchronizationContext.Current;

            sharedState.SpyEvent += SharedState_SpyEvent;


            var timer = Observable.Interval(TimeSpan.FromSeconds(1));

            var rx = sharedState.FromObservable(timer.ObserveOn(sharedState.Configuration.SynchronizationContext), 0);

            var d100 = sharedState.Autorun(r => Console.WriteLine($"Counter: {rx.Value}"));

            var person = new Person(sharedState);

            var d = sharedState.Reaction <string>(r => person.FullName3, (s, r) =>
            {
                r.Trace(TraceMode.Log);
                Console.WriteLine($"Fullname Changed: {s}");
            });

            var d3 = sharedState.Autorun(r => Console.WriteLine($"Autorun Fullname: {person.FullName3}"));

            person.ChangeBothNames("Eddy", "Tick");
            Console.WriteLine(person.FullName3);
            person.ChangeBothNames("Eddy", "Tickie");
            Console.WriteLine(person.FullName3);

            var personWeave = new PersonWeave(sharedState)
            {
                Age = 30
            };

            var d2 = sharedState.Reaction <string>(r => personWeave.FullName, (s, r) =>
            {
                r.Trace(TraceMode.Log);
                Console.WriteLine($"Weaved: FullName Changed: {s}");
            }, new ReactionOptions <string>()
            {
                Delay = 10,
            });

            var test = sharedState.When(
                () => personWeave.FullName == "Dikkertje Dap",
                new WhenOptions()
            {
                TimeOut = 1000
            });

            var d4 = sharedState.Autorun(r =>
            {
                Console.WriteLine($"Autorun Fullname weaved: {personWeave.FullName}");
                r.Trace(TraceMode.Log);
            });

            personWeave.Trace(x => x.FullName2());

            personWeave.ChangeBothNames("Jan-Willem", "Spuij");
            Console.WriteLine(personWeave.FullName);
            personWeave.ChangeBothNames("Jan-Willem", "Spuijtje");
            Console.WriteLine(personWeave.FullName);
            personWeave.ChangeFullNameToBirdseyeview();
            Console.WriteLine(personWeave.FullName);

            await test;

            personWeave.ChangeBothNames("Dikkertje", "Dap");

            await Task.Delay(1000);

            var group = new Group();

            var d5 = sharedState.Autorun(r =>
            {
                Console.WriteLine($"Autorun Average: {group.Average}");
                r.Trace(TraceMode.Log);
            });

            var person2 = new PersonWeave(sharedState);

            person2.ChangeBothNames("Claudia", "Pietryga");
            person2.Age = 20;

            group.People.Add(personWeave);
            group.People.Add(person2);

            var program = new Program();
            var task    = program.WriteToFileAsync(group, sharedState, new Random().Next(0, 200));

            personWeave.ChangeBothNames("Jan-Willem", "Spuij2");
            await task;

            d100.Dispose();
            rx.Dispose();

            Console.WriteLine($"Completed: {task.Result}");
        }
예제 #2
0
        public static void Main(string[] args)
        {
            var sharedState = new SharedState(new CortexConfiguration()
            {
                EnforceActions = EnforceAction.Never,
            });

            sharedState.SpyEvent += SharedState_SpyEvent;

            var person = new Person(sharedState);

            var d = sharedState.Reaction <string>(r => person.FullName3, (s, r) =>
            {
                r.Trace(TraceMode.Log);
                Console.WriteLine($"Fullname Changed: {s}");
            });

            var d3 = sharedState.Autorun(r => Console.WriteLine($"Autorun Fullname: {person.FullName3}"));

            person.ChangeBothNames("Eddy", "Tick");
            Console.WriteLine(person.FullName3);
            person.ChangeBothNames("Eddy", "Tickie");
            Console.WriteLine(person.FullName3);

            var personWeave = new PersonWeave();

            ((IReactiveObject)personWeave).SharedState = sharedState;
            personWeave.Age = 30;

            var d2 = sharedState.Reaction <string>(r => personWeave.FullName, (s, r) =>
            {
                r.Trace(TraceMode.Log);
                Console.WriteLine($"Weaved: FullName Changed: {s}");
            });

            var d4 = sharedState.Autorun(r =>
            {
                Console.WriteLine($"Autorun Fullname weaved: {personWeave.FullName}");
                r.Trace(TraceMode.Log);
            });

            personWeave.Trace(x => x.FullName2());

            personWeave.ChangeBothNames("Jan-Willem", "Spuij");
            personWeave.ChangeBothNames("Jan-Willem", "Spuijtje");
            personWeave.ChangeFullNameToBirdseyeview();

            var group = new Group();

            ((IReactiveObject)group).SharedState = sharedState;

            var d5 = sharedState.Autorun(r =>
            {
                Console.WriteLine($"Autorun Average: {group.Average}");
                r.Trace(TraceMode.Log);
            });

            var person2 = new PersonWeave();

            ((IReactiveObject)person2).SharedState = sharedState;
            person2.ChangeBothNames("Claudia", "Pietryga");
            person2.Age = 20;

            group.People.Add(personWeave);
            group.People.Add(person2);

            d.Dispose();
            d2.Dispose();
        }