public void TestDuplicateBinding() { Binding binding = new Binding(); var equivalent = new EventEquivalent(); List <Handler> handlerChain = new List <Handler>(); // Method handler binding.Bind(new SampleEvent1 { Foo = 1 }, new MethodHandler <SampleEvent1>(OnSampleEvent1)); binding.Bind(new SampleEvent1 { Foo = 1 }, new MethodHandler <SampleEvent1>(OnSampleEvent1)); binding.Unbind(new SampleEvent1 { Foo = 1 }, new MethodHandler <SampleEvent1>(OnSampleEvent1)); Assert.Equal(0, binding.BuildHandlerChain(new SampleEvent1 { Foo = 1 }, equivalent, handlerChain)); // Coroutine method handler binding.Bind(new SampleEvent1 { Foo = 1 }, new CoroutineHandler <SampleEvent1>(OnSampleEvent1Coroutine)); binding.Bind(new SampleEvent1 { Foo = 1 }, new CoroutineHandler <SampleEvent1>(OnSampleEvent1Coroutine)); binding.Unbind(new SampleEvent1 { Foo = 1 }, new CoroutineHandler <SampleEvent1>(OnSampleEvent1Coroutine)); Assert.Equal(0, binding.BuildHandlerChain(new SampleEvent1 { Foo = 1 }, equivalent, handlerChain)); // with EventSink var sink = new SampleEventSink(); sink.Bind(new SampleEvent1 { Foo = 1 }, sink.OnSampleEvent1); sink.Bind(new SampleEvent1 { Foo = 1 }, sink.OnSampleEvent1); sink.Unbind(new SampleEvent1 { Foo = 1 }, sink.OnSampleEvent1); handlerChain.Clear(); Assert.Equal(0, binding.BuildHandlerChain(new SampleEvent1 { Foo = 1 }, equivalent, handlerChain)); }
private void Run() { currentFlow = this; equivalent = new EventEquivalent(); handlerChain = new List <Handler>(); while (true) { Event e = queue.Dequeue(); if (ReferenceEquals(e, null)) { break; } Dispatch(e); } handlerChain = null; equivalent = null; currentFlow = null; }
public override Flow Start() { lock (syncRoot) { if (!running) { SetupInternal(); caseStack.Setup(this); currentFlow = this; equivalent = new EventEquivalent(); handlerChain = new List <Handler>(); running = true; queue.Enqueue(new FlowStart()); } } return(this); }
public void TestBasicPerformance() { Binding binding = new Binding(); var equivalent = new EventEquivalent(); List <Handler> handlerChain = new List <Handler>(); binding.Bind(new SampleEvent1 { Foo = 1 }, new MethodHandler <SampleEvent1>(OnSampleEvent1)); // const int testCount = 1000000; const int testCount = 1; for (var i = 0; i < testCount; ++i) { binding.BuildHandlerChain(new SampleEvent1 { Foo = 1 }, equivalent, handlerChain); } // 1,000,000 counts in 342 ms in release mode }
public void TestBinding() { Binding binding = new Binding(); var equivalent = new EventEquivalent(); binding.Bind(new SampleEvent1(), new MethodHandler <SampleEvent1>(OnSampleEvent1)); var e1 = new SampleEvent1(); var e2 = new SampleEvent1 { Foo = 1 }; var e3 = new SampleEvent1 { Foo = 1, Bar = "bar" }; List <Handler> handlerChain = new List <Handler>(); handlerChain.Clear(); Assert.Equal(1, binding.BuildHandlerChain(e1, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); handlerChain.Clear(); Assert.Equal(1, binding.BuildHandlerChain(e2, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); handlerChain.Clear(); Assert.Equal(1, binding.BuildHandlerChain(e3, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); binding.Unbind(new SampleEvent1(), new MethodHandler <SampleEvent1>(OnSampleEvent1)); handlerChain.Clear(); Assert.Equal(0, binding.BuildHandlerChain(e1, equivalent, handlerChain)); handlerChain.Clear(); Assert.Equal(0, binding.BuildHandlerChain(e2, equivalent, handlerChain)); handlerChain.Clear(); Assert.Equal(0, binding.BuildHandlerChain(e3, equivalent, handlerChain)); }
public void TestHandlerChainBuilding() { Binding binding = new Binding(); var equivalent = new EventEquivalent(); binding.Bind(new SampleEvent1(), new MethodHandler <SampleEvent1>(OnSampleEvent1)); binding.Bind(new SampleEvent1 { Foo = 1 }, new MethodHandler <SampleEvent1>(OnSpecificSampleEvent1)); binding.Bind(new Event(), new MethodHandler <Event>(OnEvent)); var e1 = new SampleEvent1(); var e2 = new SampleEvent1 { Foo = 1 }; var e3 = new SampleEvent1 { Foo = 1, Bar = "bar" }; var e4 = new SampleEvent1 { Foo = 2 }; var e5 = new SampleEvent2 { Foo = 1, Bar = "bar" }; var e6 = new SampleEvent2 { Foo = 2, Bar = "bar" }; List <Handler> handlerChain = new List <Handler>(); handlerChain.Clear(); Assert.Equal(2, binding.BuildHandlerChain(e1, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); Assert.Equal(new MethodHandler <Event>(OnEvent), handlerChain[1]); handlerChain.Clear(); Assert.Equal(3, binding.BuildHandlerChain(e2, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); Assert.Equal(new MethodHandler <SampleEvent1>(OnSpecificSampleEvent1), handlerChain[1]); Assert.Equal(new MethodHandler <Event>(OnEvent), handlerChain[2]); handlerChain.Clear(); Assert.Equal(3, binding.BuildHandlerChain(e3, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); Assert.Equal(new MethodHandler <SampleEvent1>(OnSpecificSampleEvent1), handlerChain[1]); Assert.Equal(new MethodHandler <Event>(OnEvent), handlerChain[2]); handlerChain.Clear(); Assert.Equal(2, binding.BuildHandlerChain(e4, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); Assert.Equal(new MethodHandler <Event>(OnEvent), handlerChain[1]); handlerChain.Clear(); Assert.Equal(3, binding.BuildHandlerChain(e5, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); Assert.Equal(new MethodHandler <SampleEvent1>(OnSpecificSampleEvent1), handlerChain[1]); Assert.Equal(new MethodHandler <Event>(OnEvent), handlerChain[2]); handlerChain.Clear(); Assert.Equal(2, binding.BuildHandlerChain(e6, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSampleEvent1), handlerChain[0]); Assert.Equal(new MethodHandler <Event>(OnEvent), handlerChain[1]); binding.Unbind(new SampleEvent1(), new MethodHandler <SampleEvent1>(OnSampleEvent1)); handlerChain.Clear(); Assert.Equal(1, binding.BuildHandlerChain(e1, equivalent, handlerChain)); Assert.Equal(new MethodHandler <Event>(OnEvent), handlerChain[0]); binding.Unbind(new Event(), new MethodHandler <Event>(OnEvent)); handlerChain.Clear(); Assert.Equal(1, binding.BuildHandlerChain(e2, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSpecificSampleEvent1), handlerChain[0]); handlerChain.Clear(); Assert.Equal(1, binding.BuildHandlerChain(e3, equivalent, handlerChain)); Assert.Equal(new MethodHandler <SampleEvent1>(OnSpecificSampleEvent1), handlerChain[0]); handlerChain.Clear(); Assert.Equal(0, binding.BuildHandlerChain(e4, equivalent, handlerChain)); }