本网络同步盘在工作时分为三个信道,分别为控制信道、上传信道和下载信道,每一个信道对应一个 TCP 长连接。一台客户机登陆时使用的是控制信道,登陆成功后客户机又建立两个 socket,发送 Tunnel 包提示服务器信道角色。此后的所有同步过程都发生在这两个信道中。
Client 负责处理新的连接,并根据客户机发来的第一个包决定信道类型。若发来的是 Tunnel包,则将这个信道的控制权转交给 Sender 或 ReceiverInit/ReceiverRecv 模块。其中 Sender 模块用于服务器给客户机发送文件,两个 Receiver 模块用于客户机上传。此处,ReceiverInit 模块与ReceiverRecv 模块唯一的不同在于,ReceiverInit 用于初次上传,遇到同一文件夹下的冲突文件会更名,而 ReceiverRecv 遇到冲突文件会选择保留修改时间较新的那一个。
服务器端的 Sender 逻辑较为简单。它首先将服务器上的文件信息打包成 DirInfo 包发送给客户机,并等待客户机发来的文件抓取(pull)请求,然后根据 pull 信息推送文