7.2.3 P2P工作流程

P2P规范中附录A[9]通过定义一个状态机介绍了P2P的整体工作流程,笔者觉得以此作为本章P2P理论知识的总结是最好不过了。该状态机的状态定义及切换如图7-22所示。

7.2.3 P2P工作流程 - 图1

图7-22 P2P状态机

图7-22中,三个黑虚线框分别是Find Phase、Group Formation Procedure和Operational Phase,这三个Phase描述的是P2P工作流程中的一个阶段,每个阶段可包含一个或多个状态。例如Group Formation Procedure阶段包含GON、WSC Provisioning Registrar和WSC Provisioning Enrollee三个状态。

每个状态对应的状态名位于状态框顶部,其字体格式为加粗并带下划线。注意,图中Search状态包含两个子状态,分别是Search子状态以及Service Discovery子状态。由于P2P Device并不都支持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中的数字)。

7.2.3 P2P工作流程 - 图2

接着来看Find Phase,它包括Listen和Search两个状态。其中,Listen状态如下。

7.2.3 P2P工作流程 - 图3

Find Phase中另外一个状态是Search状态。它包含Search子状态和Service Discovery子状态。先来看Search子状态。

7.2.3 P2P工作流程 - 图4

再来看Service Discovery子状态。

7.2.3 P2P工作流程 - 图5

Search状态(包括Search子状态和Service Discovery子状态)的Transition情况如下。

7.2.3 P2P工作流程 - 图6

接着来看Group Formation Procedure,该阶段包含三个状态,首先是GON。

7.2.3 P2P工作流程 - 图7

Group Formation Procedure另外两个状态WSC Provisioning Registrar和WSC Provisioning Enrollee比较简单,请读者根据图7-22自行总结。

最后,来看看Operational Phase,它包含P2P GO和P2P Client两个状态,首先是P2P GO状态。

7.2.3 P2P工作流程 - 图8

再来看P2P Client状态,它没有EA和EXA。

7.2.3 P2P工作流程 - 图9

图7-22对掌握P2P整体工作流程有重要意义,读者不妨仔细阅读。从下一节开始,将分析Android平台中P2P的代码实现。和WSC一样,首先分析的是Java层中的WifiP2pSettings以及WifiP2pService。