int MsgProxy::StartNotify() { #ifndef GTEST_UT std::lock_guard<std::mutex> _start_lock(start_mutex); int result = 0; if( NULL != mpClient ) { mSubscribeList.subscribe_tbl().clear(); for( const auto& tmpNotify : mNotifyList ) { if( tmpNotify.first < E_NID_MSG_PROXY_READY ) { mpClient->addNotifyItem( mSubscribeList, tmpNotify.first, mFilterList[tmpNotify.first] ); } } mpClient->subscribe( mSubscribeList ); if( ( mNotifyList.count( E_NID_MSG_PROXY_READY ) != 0 ) && mbProxyIsReady && !mbReadyNotified ) { mbReadyNotified = true; mNotifyList[ E_NID_MSG_PROXY_READY ]->Notify( NULL ); } #ifdef DEBUG printf("\n[MsgProxy]proxy:%s\n",mMyName.c_str()); printf("[MsgProxy] -----------------------\n"); for( int i = 0; i < mSubscribeList.subscribe_tbl().size() ; i++ ) { printf("[MsgProxy] msg_code:%d\n", mSubscribeList.subscribe_tbl().pool()[i].msg_code() ); } printf("[MsgProxy] =======================\n"); #endif } else { result = -1; } return result; #else return 0; #endif }
时间: 2024-04-18 22:30:00 浏览: 50
BoniNotifySDK-iOS:适用于iOS设备的Boni Beacon通知SDK
这是一个名为MsgProxy的类中的StartNotify函数。
首先,函数使用#ifndef GTEST_UT条件编译指令,表示以下代码块在非GTest单元测试环境下执行。
函数中定义了一个std::lock_guard<std::mutex>对象_start_lock,使用start_mutex作为互斥锁。这是为了确保在多线程环境下,只有一个线程可以执行以下代码块。
接下来初始化result为0。
然后进行条件判断,如果mpClient不为空指针,则执行以下操作:
1. 清空mSubscribeList中的subscribe_tbl()。
2. 遍历mNotifyList中的每个元素,如果元素的first值小于E_NID_MSG_PROXY_READY,就调用mpClient的addNotifyItem函数,将元素的first值和mFilterList中对应的filter值添加到mSubscribeList中。
3. 调用mpClient的subscribe函数,订阅mSubscribeList中的消息。
4. 进一步判断条件,如果mNotifyList中存在E_NID_MSG_PROXY_READY的元素,并且mbProxyIsReady为true,并且mbReadyNotified为false,则将mbReadyNotified设置为true,并调用mNotifyList中E_NID_MSG_PROXY_READY对应的元素的Notify函数,传递NULL作为参数。
5. 在#ifdef DEBUG条件编译指令下,打印一些调试信息。
最后,如果mpClient为空指针,则将result设置为-1。
最后,函数返回result,表示启动通知过程的结果(0表示成功,-1表示mpClient为空指针)。在GTest单元测试环境下,直接返回0。
阅读全文