7.2.3 P2P工作流程
最后更新于:2022-04-02 06:04:56
P2P规范中附录A[9]通过定义一个状态机介绍了P2P的整体工作流程,笔者觉得以此作为本章P2P理论知识的总结是最好不过了。该状态机的状态定义及切换如图7-22所示。
:-: 
图7-22 P2P状态机
图7-22中,三个黑虚线框分别是Find Phase、Group Formation Procedure和OperationalPhase,这三个Phase描述的是P2P工作流程中的一个阶段,每个阶段可包含一个或多个状态。例如Group Formation Procedure阶段包含GON、WSC Provisioning Registrar和WSC ProvisioningEnrollee三个状态。
每个状态对应的状态名位于状态框顶部,其字体格式为加粗并带下划线。注意,图中Search状态包含两个子状态,分别是Search子状态以及Service Discovery子状态。由于P2PDevice并不都支持Service Discovery功能,所以Service Discovery子状态为可选(operational)状态。
每个状态都有对应的Entry Action、Exit Action和Internal Behavior。其中,EA和EXA位于状态框图的上半部分,而Internal Behavior位于状态框图的下半部分。状态之间的切换及切换条件由数字序号及箭头线表示。
下面介绍图7-22中P2P状态机的各个状态以及状态转换条件。对此,我们重点考察每个状态的EA(Entry Action)、EXA(Exit Action)、Internal Behavior以及Transition。
一个P2P Device最初的状态是Off,然后将进入Scan状态(括号中的数字对应图7-22中的数字)。
:-: 
接着来看Find Phase,它包括Listen和Search两个状态。其中,Listen状态如下。
:-: 
Find Phase中另外一个状态是Search状态。它包含Search子状态和Service Discovery子状态。先来看Search子状态。
:-: 
再来看Service Discovery子状态。
:-: 
Search状态(包括Search子状态和Service Discovery子状态)的Transition情况如下。
:-: 
接着来看Group Formation Procedure,该阶段包含三个状态,首先是GON。
:-: 
Group Formation Procedure另外两个状态WSC Provisioning Registrar和WSC Provisioning Enrollee比较简单,请读者根据图7-22自行总结。
最后,来看看Operational Phase,它包含P2P GO和P2P Client两个状态,首先是P2P GO状态。
:-: 
再来看P2P Client状态,它没有EA和EXA。
:-: 
图7-22对掌握P2P整体工作流程有重要意义,读者不妨仔细阅读。从下一节开始,将分析Android平台中P2P的代码实现。和WSC一样,首先分析的是Java层中的WifiP2pSettings以及WifiP2pService。
';