如果网络状态发生改变,通过BaseEvent.onNetworkChange通知native层。
mars/baseevent/jni/com_tencent_mars_BaseEvent.cc
1 | mars::baseevent::OnNetworkChange(); |
然后到达
mars/baseevent/src/baseprjevent.cc
信号响应:
mars/stn/stn_logic.cc
:
1 | static void onNetworkChange() { |
执行了一个唤醒的调用,通过宏STN_WEAK_CALL,具体的先不看吧,调用的是函数OnNetworkChange:
mars/stn/src/timing_sync.cc
:
1 | void TimingSync::OnNetworkChange() |
这里又引入了alarm这个东西,看起来是个警报器。重新启动了他,给定了一个时间 BaseEvent所触发的各个函数:
1 | static void onCreate() { |
实际上是new出了这个NetCore单例。这其中使用了大量的宏,配合智能指针处理
信号关联:
1 | static void __initbind_baseprjevent() { |
这里调用connect连接了onNetworkChange这个函数。我们先看下哪里调用这个BOOT_RUN_STARTUP初始化了:
mars/comm/bootrun.h
:
1 | #define BOOT_RUN_STARTUP(func) VARIABLE_IS_NOT_USED static int __anonymous_run_variable_startup_##func = boot_run_atstartup(func) |
是个静态变量,这里利用了c++的技巧,全局静态变量会在一开始就初始化,因此这里实际上在这里调用了__initbind_baseprjevent这个静态方法,然后实现了一开始信号与槽的连接。
stn_logic.cc 的onCreate中实例化ActiveLogic与NetCore