本文共 1229 字,大约阅读时间需要 4 分钟。
先介绍如何使用AddressAdjuster,然后分析UI参数的生成及使用。 注意usage()方法有一个implicit Parameters参数,在方法范围内引入了一个隐式参数对象,在new AddressAdjuster的时候会使用。 引用adjuster.module后会执行module定义的代码,其中: bundulesIn和edgesIn都是lazy变量: 并且bundlesIn依赖于edgesIn,这里主要关注edgesIn: edgesIn依赖于iPorts和uiParams: 这里的iPorts为输入口,即与parent的连接口,iPorts.size = 1。 这里oPorts为输出口,即与local和remote相连的连接口。n分别为local和remote节点。 b. uoParams为local和remote节点向上传播的TLManagerPortParameters参数,uoParams.size = 2; 把uoParams传递给uFn()方法,返回一个UI;然后把这个UI复制成n(=1)份。 其中,pu为UI,即TLManagerPortParameters: bundlesIn通过edgesIn和bundleI方法生成: TLEdgeParameters是TLEdgeIn的父类: 所以TLEdgeParameters中的manager参数,即是传入的UI参数。 TLBundleParameters()伴生方法的实现如下: 可以看到其中并没有使用UI,亦即manager参数中的实际地址集合。 所以不需要关注parent,只需要关注parentEdge的使用,以坚持是否用到其中的地址集合即可: TLArbiter.robin中也没有实际使用到manager的地址集合。 所以managerFn的实现中,废了大力气生成的地址集合,目前来看并没有实际用处。 转载于:https://www.cnblogs.com/wjcdx/p/10835052.html