public void Test() { // 生成操作对象实例 IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); // 组装链式的结构 internal-> mail-> discount-> regular-> null handler1.Successor = handler3; handler3.Successor = handler2; handler2.Successor = handler4; IHandler head = handler1; Request request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Assert.AreEqual <double>(20 * 1.3, request.Price); // 重新组织链表结构 handler1.Successor = handler1.Successor.Successor; // 短路掉Discount request = new Request(20, PurchaseType.Discount); head.HandleRequest(new Request(20, PurchaseType.Discount)); Assert.AreEqual <double>(20, request.Price); // 确认被短路的部分无法生效 }
private void RemoveHandler(InternalHandler handler) { Handlers.Remove(handler); if (Handlers.Count < 2) { RegisterEvent(); } }
private void AddHandler(InternalHandler handler) { Handlers.Add(handler); if (Handlers.Count <= 2) { RegisterEvent(); } }
static void Main(string[] args) { // internal call // the pipeline (delegate) dumps its data to a an "event handler" DelegateMethod InternalHandler delInternal = new InternalHandler(DelegateMethod); delInternal(2); // external call DelegateTest delExternal = new DelegateTest(); DelegateTest.ExternalHandler externalHandler = DelegateMethod; delExternal.MyHelperMethod(externalHandler); }
public void Register(string @event, Action action, int filterId) { var handler = Handlers.FirstOrDefault(x => x.Identifier == @event); if (handler != null) { handler.ActionsByType.Add(filterId, action); } else { handler = new InternalHandler(@event); handler.ActionsByType.Add(filterId, action); AddHandler(handler); } }
public void Test() { Trace.WriteLine("Process via whole CoR"); // 生成并组装链式的结构 internal-> discount-> mail-> regular-> null var head = new InternalHandler() { Successor = new DiscountHandler() { Successor = new MailHandler() { Successor = new RegularHandler() } } }; var request = new Request() { Price = 20, Type = PurchaseType.Mail }; head.HandleRequest(request); Assert.AreEqual <double>(20 * 1.3, request.Price); request = new Request() { Price = 20, Type = PurchaseType.Discount }; head.HandleRequest(request); Assert.AreEqual <double>(20 * 0.9, request.Price); Trace.WriteLine("\n\nProcess via rearranged CoR"); // 重新组织链表结构, 新链表为internal-> mail-> regular-> null // 此时,head指向internal var discountHandler = head.Successor; head.Successor = head.Successor.Successor; // 短路掉Discount Handler discountHandler = null; request = new Request() { Price = 20, Type = PurchaseType.Discount }; head.HandleRequest(request); // 价格没有折扣打折,确认被短路的部分无法生效 // 验证CoR可以通过动态维护链表调整处理对象(Handler)的组织结构 Assert.AreEqual <double>(20, request.Price); }
public void Test() { // 生成操作对象实例 IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); //// 组装链式的结构 internal-> mail-> discount-> regular-> null handler1.AddSuccessor(handler2); handler2.AddSuccessor(handler3); handler2.AddSuccessor(handler4); IHandler head = handler1; Request request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Assert.AreEqual <double>(20 * 1.3, request.Price); }
public void Test() { var head = new InternalHandler { Successor = new DiscountHandler { Successor = new MailHandler { Successor = new RegularHandler() } } }; var request = new Request { Price = 20, Type = PurchaseType.Mail }; head.HandleRequest(request); Assert.AreEqual(20 * 1.3, request.Price); request = null; //重新组织链表结构 //此时,head指向internal var discountHandler = head.Successor; //短路掉Discount Handler head.Successor = head.Successor.Successor; discountHandler = null; request = new Request { Price = 20, Type = PurchaseType.Discount }; head.HandleRequest(request); //价格没有折扣打折,确认被短路的部分无法生效 //验证CoR可以通过动态维护链表调整操作对象(Handler)的组织结构 Assert.AreEqual(20, request.Price); }
public void Test() { Trace.WriteLine("Process via whole CoR"); // 生成并组装链式的结构 internal->discount->mail->regular->null var head = new InternalHandler() { Successor = new DiscountHandler() { Successor = new MailHandler() { Successor = new RegularHandler() } } }; var request = new Request { Price = 20, Type = PurchaseType.Mail }; head.HandleRequest(request); Assert.AreEqual <double>(20 * 1.3, request.Price); request = new Request() { Price = 20, Type = PurchaseType.Discount }; head.HandleRequest(request); Assert.AreEqual <double>(20 * 0.9, request.Price); Trace.WriteLine("\n\nProcess via rearranged CoR"); var discountHandler = head.Successor; head.Successor = head.Successor.Successor; discountHandler = null; request = new Request() { Price = 20, Type = PurchaseType.Discount }; head.HandleRequest(request); Assert.AreEqual <double>(20, request.Price); }
static void Main(string[] args) { IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); handler1.Next = handler3; handler3.Next = handler2; handler2.Next = handler4; IHandler head = handler1; Request request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Console.Write(request.Price); //26 //将MailHandler短路 handler1.Next = handler1.Next.Next; request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Console.Write(request.Price); //20 }
/// <summary> /// 处理内部消息 /// </summary> /// <param name="Param"></param> public static void ExecuteInternalInfo(PacketDecodeCompletedEventArgs Event, SocketMiddleData Param) { switch (Param.SendType) { case SendTypeEnum.Init: InitHandler.ExecuteSocketApiJson(Param.MiddleResult); break; case SendTypeEnum.InternalInfo: InternalHandler.ExecuteSocketIniternalInfo(Param, PacketCache); break; case SendTypeEnum.RequestInfo: RequestHandler.ExecuteSocketRequest(Event, Param); break; case SendTypeEnum.CallBack: CallHandler.ExecuteSocketCallBack(PacketCache.Values.ToList(), Param); break; default: break; } }
public void Test() { // 生成操作对象实例、组装链式结构 IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); handler1.Successor = handler3; handler3.Successor = handler2; handler2.Successor = handler4; IHandler head = handler1; handler1.HasBreakPoint = true; handler1.Break += this.Break; handler3.HasBreakPoint = true; handler3.Break += this.Break; Request request = new Request(20, PurchaseType.Regular); head.HandleRequest(request); currentType = PurchaseType.Internal; // 为第一个断点做的准备 Assert.AreEqual <double>(20, request.Price); }
internal static extern IntPtr MakeCallResult(int callbackID, CallResultFlags flags, ulong apiCallHandle, int size, InternalHandler handler);
private async void RetrieveData() { try { internalhandler = new InternalHandler(); RAM.Text = internalhandler.RAM; Build.Text = internalhandler.FirmwareBuild; } catch { } try { modemhandler = await ModemHandler.LoadHandlerAsync(); PhoneListView.ItemsSource = modemhandler.ModemInformation; } catch { } try { reghandler = new RegistryHandler(); OEM.Text = reghandler.ProductCode; MO.Text = reghandler.MobileOperator; SP.Text = reghandler.ServiceProvider; CSV.Text = reghandler.SOC; TitleBlock.Text = reghandler.Manufacturer + " " + reghandler.ModelName; SubtitleBlock.Text = reghandler.ProductCodeCleaned; if (reghandler.ReleaseName != null) { VersionNameText.Text = VersionNameText.Text.Replace("XXXX", reghandler.ReleaseName); } } catch { } try { dpphandler = await DPPHandler.LoadHandlerAsync(); IMEI.Text = dpphandler.IMEI; ManufactureCountry.Text = dpphandler.COO; RegulatoryImage.Source = IsDarkTheme ? dpphandler.RegulatoryBlack : dpphandler.RegulatoryWhite; foreach (string Line in dpphandler.Product.Split('\n')) { if (Line.StartsWith("HWID")) { HR.Text = string.Join(".", Line.Split(":").Last().ToCharArray()); } else if (Line.StartsWith("CTR")) { PC.Text = Line.Split(":").Last(); } } } catch { await new NotEnoughRights().ShowAsync(); } StorageFolder local = ApplicationData.Current.LocalFolder; var retrivedProperties = await local.Properties.RetrievePropertiesAsync(new string[] { "System.FreeSpace" }); var freeSpace = (UInt64)retrivedProperties["System.FreeSpace"]; retrivedProperties = await local.Properties.RetrievePropertiesAsync(new string[] { "System.Capacity" }); var totalSpace = (UInt64)retrivedProperties["System.Capacity"]; var usedSpace = totalSpace - freeSpace; InternalStorageUsage.Maximum = totalSpace; InternalStorageUsage.Value = usedSpace; UsageDesc.Text = FormatBytes(freeSpace) + " free out of " + FormatBytes(totalSpace); }
public void handle(Command command, StreamWriter writer, StreamReader reader, NetworkStream stream) { InternalHandler handler = new InternalHandler(command, writer, reader, stream); handler.run(); }