-
Notifications
You must be signed in to change notification settings - Fork 130
代码说明: 非 UI 部分
非 UI 部分的核心是 CoreThread
类,CoreThread 类是整个 iptux 底层服务的入口,包括启动,产生事件并回调,发送消息/文件,关闭等。
启动的代码位于 CoreThread::start
, 主要包括启动 UDP 监听线程,TCP监听线程,并且发出广播通知好友你已上线。
这部分还在重构中,部分代码的行为跟描述不符
事件分为UDP事件和TCP事件,UDP和TCP端口收到包后会发出一个 Event
, 希望监听事件的服务可以通过 CoreThread::registerCallback
来接收事件。
UDP 事件的入口在 CoreThread::RecvUdpData
, 每收到一个 UDP 包,都通过 UdpData::UdpDataEntry
来创建一个新的 UdpData
实例来处理收到的 UDP 包,在处理 UDP 包的过程中会产生0-N个Event
, 通过 CoreThread::emitEvent
接口将事件发出,在 CoreThread::emitEvent
中,有具体调用回调接口的办法。(注意,所有的回调是同步的)
TCP事件的入口在 CoreThread::RecvTcpData
,每接收到一个新的 TCP 连接时,都创建一个新线程,运行 TcpData::TcpDataEntry
来进行后续的处理。
Event
由于需要被多个 viewer 接收,所以他应该是可以被 clone
的,现在的设计有一点小问题,包含了 PalInfo*
, 这个会尽快改掉,改为只包含 PalInfoKey
(即 IP+Port)
这部分还在重构中,部分代码的行为跟描述不符
发送消息主要通过 Command
类来实现,大部分控制消息是同步发送的,只有 Command::SendMessage
是异步发送(通过外部起一个新的发送线程来实现)。
大部分消息是通过 UDP 来发送,只有图片(通过 Command::SendSublayer
), 文件和目录通过 TCP 来发送。
关闭的代码位于 CoreThread::stop
, 主要包括关闭 UDP 端口,关闭 TCP 端口等。