https://mp.weixin.qq.com/s/UYVSO3XFJmhe5bUD_XbMLg

 
先介绍如何使用AddressAdjuster,然后分析UI参数的生成及使用。
 
 
1. AddressAdjuster的使用
 
a. 创建AddressAdjuster实例
 
注意usage()方法有一个implicit Parameters参数,在方法范围内引入了一个隐式参数对象,在new AddressAdjuster的时候会使用。
 
b. 关联node的上下游节点
 
 
c. 关联chip_id的上游节点
 
 
d. 引用module构建硬件模块
 
 
2. UI生成
 
UI是指Node的DUEB参数中的UI。
 
引用adjuster.module后会执行module定义的代码,其中:
 
会调用node.in方法:
 
bundulesIn和edgesIn都是lazy变量:
 
并且bundlesIn依赖于edgesIn,这里主要关注edgesIn:
 
edgesIn依赖于iPorts和uiParams:
 
这里的iPorts为输入口,即与parent的连接口,iPorts.size = 1。
 
uiParams用到了uoParams:
 
这里oPorts为输出口,即与local和remote相连的连接口。n分别为local和remote节点。
 
所以uiParams中的:
a. iPorts.size = 1;
b. uoParams为local和remote节点向上传播的TLManagerPortParameters参数,uoParams.size = 2;
 
mapParamsU的实现为:
把uoParams传递给uFn()方法,返回一个UI;然后把这个UI复制成n(=1)份。
 
uFn()的实现为:
 
返回的一个UI为:
 
3. UI使用
 
a. edgesIn
 
edgesIn通过调用edgeI方法生成:
其中i为生成的UI。
 
edgeI方法的实现为:
 
其中,pu为UI,即TLManagerPortParameters:
 
b. bundlesIn
 
bundlesIn通过edgesIn和bundleI方法生成:
 
bundleI方法的实现如下:
 
ei.bundle的实现如下:
 
TLEdgeParameters是TLEdgeIn的父类:
所以TLEdgeParameters中的manager参数,即是传入的UI参数。
 
TLBundleParameters()伴生方法的实现如下:
 
可以看到其中并没有使用UI,亦即manager参数中的实际地址集合。
 
c. parentEdge的使用
 
所以不需要关注parent,只需要关注parentEdge的使用,以坚持是否用到其中的地址集合即可:
 
parentEdge的使用如下:
TLArbiter.robin中也没有实际使用到manager的地址集合。
 
所以managerFn的实现中,废了大力气生成的地址集合,目前来看并没有实际用处。
 

最新文章

  1. CentOS7 NTP 安装配置
  2. sharepoint 提升权限报错
  3. 基于Batcher比较器的双调排序网络
  4. 向nginx发送reopen信号以重新打开日志文件
  5. IntelliJ IDEA 自动化工具安装并添加自动化测试框架
  6. Mustache.js前端模板引擎源码解读
  7. 如何查看与刷新DNS本地缓存
  8. (window)Android Studio安装以及Fetching android sdk component information超时的解决方案
  9. C 的 coroutine 库 via 云风的 BLOG
  10. bzoj 3732 Network(最短路+倍增 | LCT)
  11. StandardServiceRegistryBuilder
  12. struct2-json
  13. 重复弹Toast的解决方案
  14. Android本地化资源目录详解
  15. python算法(一)
  16. 仿腾讯课堂固定滚动列表ReactNative组件
  17. linux根据端口号查询来源程序
  18. 重学前端 --- Promise里的代码为什么比setTimeout先执行?
  19. CDI services--Event(事件)
  20. Android-PullToRefresh 下拉刷新增加setOnItemLongClickListener

热门文章

  1. Uncaught DOMException: Failed to set the 'value' property on 'HTMLInputElement': This input element accepts a filename, which may only be programmatically set to the empty string.
  2. Spring Cloud学习 之 Spring Cloud Hystrix(断路器原理)
  3. STM32 CubeIDE快速创建工程(图文详解)
  4. [hdu5348]图上找环,删环
  5. 解决:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure(真实有效)
  6. webpack3 项目升级 webpack4
  7. Linux常用命令~新手必知
  8. Linux基本命令(文件基操)
  9. 如何搭建一个WEB服务器项目(五)—— Controller返回JSON字符串
  10. python Lambda, filter, reduce and map