public override IEnumerator Init() { App.On(ApplicationEvents.OnStartComplete, (sender, e) => { var filters = new FilterChain <string>(); bool isCall = true; filters.Add((data, next) => { //这里模拟一个递归调用 if (isCall) { isCall = false; filters.Do("sub", (d) => UnityEngine.Debug.Log("filter end , " + d)); } UnityEngine.Debug.Log("hello this is filter chain 1 , " + data); next(data); UnityEngine.Debug.Log("back filter chain 1"); }); filters.Add((data, next) => { UnityEngine.Debug.Log("hello this is filter chain 2 , " + data); next(data); UnityEngine.Debug.Log("back filter chain 2"); }); filters.Do("hello world", (data) => UnityEngine.Debug.Log("filter end , " + data)); }); yield return(base.Init()); }
public void TestNullThen() { var chain1 = new FilterChain <string>(); chain1.Add((str, next) => { }); chain1.Add((str, next) => { }); ExceptionAssert.DoesNotThrow(() => { chain1.Do(null); }); var chain2 = new FilterChain <string, string>(); chain2.Add((str, str1, next) => { }); chain2.Add((str, str1, next) => { }); ExceptionAssert.DoesNotThrow(() => { chain2.Do(null, null); }); var chain3 = new FilterChain <string, string, string>(); chain3.Add((str, str1, str2, next) => { }); chain3.Add((str, str1, str2, next) => { }); ExceptionAssert.DoesNotThrow(() => { chain3.Do(null, null, null); }); }
public void TestFilterChainT1() { var chain = new FilterChain <string>(); var data = "123"; var isCall = false; chain.Add((inData, next) => { if (inData == data) { isCall = true; } next(inData); }); chain.Add((in1Data, next) => { next(in1Data); }); var completeCall = false; chain.Do(data, (in1) => { completeCall = true; }); Assert.AreEqual(2, chain.FilterList.Length); Assert.AreEqual(true, isCall); Assert.AreEqual(true, completeCall); }
public void TestFilterChainT1T2T3() { var chain = new FilterChain <string, string, string>(); var data1 = "123"; var data2 = "222"; var data3 = "333"; var isCall = false; chain.Add((in1Data, in2Data, in3Data, next) => { if (in1Data == data1 && in2Data == data2 && in3Data == data3) { isCall = true; } next(in1Data, in2Data, in3Data); }); chain.Add((in1Data, in2Data, in3Data, next) => { next(in1Data, in2Data, in3Data); }); var completeCall = false; chain.Do(data1, data2, data3, (in1, in2, in3) => { completeCall = true; }); Assert.AreEqual(2, chain.FilterList.Length); Assert.AreEqual(true, isCall); Assert.AreEqual(true, completeCall); }
/// <summary> /// 初始化 /// </summary> public void Init() { App.On(ApplicationEvents.OnStartCompleted, (payload) => { var filters = new FilterChain <string>(); var isCall = true; filters.Add((data, next) => { if (isCall) { isCall = false; filters.Do("sub", (d) => UnityEngine.Debug.Log("filter end , " + d)); } UnityEngine.Debug.Log("hello this is filter chain 1 , " + data); next(data); UnityEngine.Debug.Log("back filter chain 1"); }); filters.Add((data, next) => { UnityEngine.Debug.Log("hello this is filter chain 2 , " + data); next(data); UnityEngine.Debug.Log("back filter chain 2"); }); filters.Do("hello world", (data) => UnityEngine.Debug.Log("filter end , " + data)); }); }
private static (FilterChain, List <string>) RecursiveParseFilterArgs(string[] args, int index = 0, FilterChain filters = null, List <string> remainingArgs = null) { filters = filters ?? new FilterChain(); remainingArgs = remainingArgs ?? new List <string>(); if (args.Length < index + 1) { return(filters, remainingArgs); } string arg = args[index++]; (FilterDelegate filterDelegate, var colorRange, double[] filterParams) = CliArgs.GetDelegateAndData(arg); if (filterDelegate is FilterDelegate func) { filters.Add(func, colorRange, filterParams); } else { remainingArgs.Add(arg); } (filters, remainingArgs) = RecursiveParseFilterArgs(args, index, filters, remainingArgs); // recurse return(filters, remainingArgs); }
static void Main(string[] args) { /* * PurchaseRequest request = new PurchaseRequest { Amount = 20000 }; * Handler zuzhang = new ZuZhang("张三"); * Handler zongjian = new ZongJian("李四"); * Handler zongjingli = new ZongJingLi("王五"); * * zuzhang.Next(zongjian); * zongjian.Next(zongjingli); * * zuzhang.HandleRequest(request); */ Request request = new Request(); Response response = new Response(); var chain = new FilterChain(); chain.Add(new ActionExecutingFilter()).Add(new ActionExecutedFilter()).Add(new ExceptionFilter()); chain.DoFilter(request, response); Console.WriteLine(request.Header); Console.WriteLine(response.Data); Console.ReadKey(); }
public void RecursiveCallChain() { var chain = new FilterChain <string>(); var data = "123"; var isCall = false; chain.Add((inData, next) => { if (inData == data) { isCall = !isCall; } if (isCall) { chain.Do(data, (in1) => { }); } next(inData); }); chain.Add((in1Data, next) => { next(in1Data); }); var completeCall = false; chain.Do(data, (in1) => { completeCall = true; }); Assert.AreEqual(false, isCall); Assert.AreEqual(true, completeCall); }