# Constants
Added 表示该地址是新的,在事件之前不存在。.
Maintained 表示该地址在当前和之前的状态之间没有改变。.
Removed 表示该地址已从主机中移除。.
Unknown 表示事件生产者无法确定地址处于当前状态的原因。.
# Variables
WildcardSubscription 是用于订阅事件总线上发出的所有事件的类型。.
# Structs
EvtLocalAddressesUpdated 应在本地主机的监听地址集发生变化时发出。 这可能由多种原因引起。例如,我们可能打开了新的中继连接、通过 UPnP 建立了新的 NAT 映射,或被其他对等节点告知了我们的观察地址。
EvtLocalAddressesUpdated 包含当前监听地址的快照,也可能包含当前状态和之前状态之间的差异。 如果事件生产者能够创建差异,则 Diffs 字段将为 true,事件消费者可以检查每个 UpdatedAddress 的 Action 字段以查看每个地址是如何被修改的。
例如,Action 将告诉你 Current 列表中的地址是被事件生产者 Added,还是未经更改而被 Maintained。 从主机中移除的地址将具有 Removed 的 AddrAction,并将出现在 Removed 列表中。
如果事件生产者无法生成差异,则 Diffs 字段将为 false,Removed 列表将始终为空,并且 Current 列表中每个 UpdatedAddress 的 Action 将为 Unknown。
除了上述内容外,EvtLocalAddressesUpdated 还包含当前监听地址集的更新后的 peer.PeerRecord,它被包装在 record.Envelope 中并由主机的私钥签名。 该记录可以以安全和认证的方式与其他对等节点共享,以告知它们我们认为可拨号的地址。.
EvtLocalProtocolsUpdated 应在本地主机添加或移除流处理器时发出。 对于使用匹配谓词(host.SetStreamHandlerMatch())附加的处理器,此事件中仅包含协议ID。.
EvtLocalReachabilityChanged 是一个事件结构体,当本地节点的可达性状态发生变化时会发出此事件。
此事件通常由 AutoNAT 子系统发出。.
EvtNATDeviceTypeChanged 是一个事件结构体,当传输协议的 NAT 设备类型发生变化时会发出此事件。
注意: 此事件仅在 AutoNAT 可达性为 Private 时才有意义。 此事件的消费者还应该同时消费 `EvtLocalReachabilityChanged` 事件,并且仅在 `EvtLocalReachabilityChanged` 的可达性为 Private 时才解释此事件。.
EvtPeerConnectednessChanged 应在每次与给定对等节点的"连接状态"发生变化时发出。具体来说,在以下情况下会发出此事件:
- Connectedness = Connected: 每当我们从与对等节点没有连接过渡到至少有一个连接时。 - Connectedness = NotConnected: 每当我们从与对等节点至少有一个连接过渡到没有连接时。
未来可能会添加其他连接状态。此列表不应被视为详尽无遗。
需要注意:
- 可以与给定对等节点建立多个连接。 - dep2p 和网络都是异步的。
这意味着以下所有情况都是可能的:
连接断开并重新建立:
- 对等节点 A 观察到从 Connected -> NotConnected -> Connected 的转换 - 对等节点 B 观察到从 Connected -> NotConnected -> Connected 的转换
解释: 两个对等节点都观察到连接断开。这是"理想"情况。
连接断开并重新建立:
- 对等节点 A 观察到从 Connected -> NotConnected -> Connected 的转换。 - 对等节点 B 没有观察到转换。
解释: 对等节点 A 重新建立了断开的连接。 对等节点 B 在观察到旧连接断开之前就观察到新连接形成。
连接断开:
- 对等节点 A 没有观察到转换。 - 对等节点 B 没有观察到转换。
解释: 原本有两个连接,其中一个断开了。 这个连接可能正在被使用,但两个对等节点都不会观察到"连接状态"的变化。 对等节点应始终确保重试网络请求。.
EvtPeerIdentificationCompleted 在对等节点的初始身份识别完成时发出。.
EvtPeerIdentificationFailed 在对等节点的初始身份识别失败时发出。.
EvtPeerProtocolsUpdated 应在我们连接的对等节点添加或移除其协议栈中的协议时发出。.
GenericDHTEvent 是一个通过携带原始 JSON 来封装实际 DHT 事件的类型
上下文: DHT 事件系统目前比较特殊且有点混乱,所以在我们统一/清理它之前,这个事件用于过渡。 它应该只用于信息展示目的。
实验性: 当 DHT 事件类型被提升到核心层,且 DHT 事件系统与事件总线统一后,这个类型可能会被移除。.
UpdatedAddress 用于在 EvtLocalAddressesUpdated 事件中传递地址变更信息。.
# Interfaces
Bus 是一个基于类型的事件传递系统的接口。.
Emitter 表示在事件总线上发出事件的参与者。.
Subscription 表示对一个或多个事件类型的订阅。.
# Type aliases
AddrAction 表示对主机监听地址执行的操作。 它用于在 EvtLocalAddressesUpdated 事件中为地址变更提供上下文。.
CancelFunc 用于关闭订阅者。.
EmitterOpt 表示发射器选项。使用所选实现提供的选项。.
RawJSON 是一个包含原始 JSON 字符串的类型.
SubscriptionOpt 表示订阅者选项。使用所选实现提供的选项。.