Skip to content

代码说明: 非 UI 部分

LI Daobing edited this page May 5, 2019 · 1 revision

非 UI 部分的核心是 CoreThread 类,CoreThread 类是整个 iptux 底层服务的入口,包括启动,产生事件并回调,发送消息/文件,关闭等。

启动

启动的代码位于 CoreThread::start, 主要包括启动 UDP 监听线程,TCP监听线程,并且发出广播通知好友你已上线。

产生事件

这部分还在重构中,部分代码的行为跟描述不符

事件分为UDP事件和TCP事件,UDP和TCP端口收到包后会发出一个 Event, 希望监听事件的服务可以通过 CoreThread::registerCallback 来接收事件。

UDP 事件

UDP 事件的入口在 CoreThread::RecvUdpData, 每收到一个 UDP 包,都通过 UdpData::UdpDataEntry 来创建一个新的 UdpData 实例来处理收到的 UDP 包,在处理 UDP 包的过程中会产生0-N个Event, 通过 CoreThread::emitEvent 接口将事件发出,在 CoreThread::emitEvent 中,有具体调用回调接口的办法。(注意,所有的回调是同步的)

TCP 事件

TCP事件的入口在 CoreThread::RecvTcpData,每接收到一个新的 TCP 连接时,都创建一个新线程,运行 TcpData::TcpDataEntry 来进行后续的处理。

Event 设计

Event 由于需要被多个 viewer 接收,所以他应该是可以被 clone 的,现在的设计有一点小问题,包含了 PalInfo*, 这个会尽快改掉,改为只包含 PalInfoKey (即 IP+Port)

发送消息

这部分还在重构中,部分代码的行为跟描述不符

发送消息主要通过 Command 类来实现,大部分控制消息是同步发送的,只有 Command::SendMessage 是异步发送(通过外部起一个新的发送线程来实现)。

大部分消息是通过 UDP 来发送,只有图片(通过 Command::SendSublayer), 文件和目录通过 TCP 来发送。

关闭

关闭的代码位于 CoreThread::stop, 主要包括关闭 UDP 端口,关闭 TCP 端口等。