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}"); }
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(); }