JUINT32 JPhoneAgent::GetDaemonCfgRsp(JDaemonCfg* pDaemonCfg) { JUINT32 uiRet = JFAILURE; JEvent* pEvent = JNULL; JSOCKADDR_IN stAddr; JEVT_TYPE pType = JEVT_NONE; JDaemonCfg* pDaemonCfgBody = JNULL; JUINT32 uiInterval = 0; JCHAR pBuf[JCOMM_MSG_BUF_LEN] = {0}; JCommEngine* pCommEngine = JNULL; JListItem<JEvent>* pListItem = JNULL; JLogAutoPtr clsLogAutoPtr(JSingleton<JLog>::instance(), JLOG_MOD_PHONE_AGENT, "JPhoneAgent::GetDaemonCfgRsp"); if (!pDaemonCfg) { return JFAILURE; } else { pDaemonCfg->Clear(); } while(1) { //first select time is 500ms, the second is 100ms, because normally the response //be received in the 500ms after request be sent, so it will make it more likely to //receive response at the first select loop. if (!uiInterval) { uiInterval = JPHONE_AGENT_SELECT_TIME; } else { uiInterval = JPHONE_AGENT_SELECT_TIME2; } //if response event be received, first a notify message "1" be received //the get event for the thread queue, because it's through queue read/write //while communication happens between two threads of one process. pCommEngine = m_pAgentThread->GetCommEngineGroup().HasMessage(uiInterval); if (pCommEngine && pCommEngine == m_pAgentThread->GetNotifyCommEngine()) { uiRet = pCommEngine->RecvMessage(pBuf, JCOMM_MSG_BUF_LEN, &stAddr); if (uiRet == 1 && SafeStrcmp(pBuf, "1") ==0) { pListItem = m_pAgentThread->DeQueueEvent(); if (pListItem) { pEvent = pListItem->GetData(); if (pEvent) { pType = pEvent->GetEventType(); pDaemonCfgBody = dynamic_cast<JDaemonCfg*>(pEvent->GetBody()); //check the response and save the data if (pType == JEVT_DAEMON_GET_CFG_RSP && pDaemonCfgBody) { pDaemonCfg->SetSaveMethod(pDaemonCfgBody->GetSaveMethod()); } } delete pListItem; } } } else { break; } } return JSUCCESS; }
JUINT32 JPhoneAgent::GetDaemonCfgRsp(JDaemonCfg* pDaemonCfg) { JUINT32 uiRet = JFAILURE; JEvent* pEvent = JNULL; JSOCKADDR_IN stAddr; JEVT_TYPE pType = JEVT_NONE; JDaemonCfg* pDaemonCfgBody = JNULL; JUINT32 uiInterval = 0; JCHAR pBuf[JCOMM_MSG_BUF_LEN] = {0}; JCommEngine* pCommEngine = JNULL; JListItem<JEvent>* pListItem = JNULL; JLogAutoPtr clsLogAutoPtr(JSingleton<JLog>::instance(), JLOG_MOD_PHONE_AGENT, "JPhoneAgent::GetDaemonCfgRsp"); if (!pDaemonCfg) { return JFAILURE; } else { pDaemonCfg->Clear(); } while(1) { if (!uiInterval) { uiInterval = JPHONE_AGENT_SELECT_TIME; } else { uiInterval = JPHONE_AGENT_SELECT_TIME2; } pCommEngine = m_pAgentThread->GetCommEngineGroup().HasMessage(uiInterval); if (pCommEngine && pCommEngine == m_pAgentThread->GetNotifyCommEngine()) { uiRet = pCommEngine->RecvMessage(pBuf, JCOMM_MSG_BUF_LEN, &stAddr); if (uiRet == 1 && SafeStrcmp(pBuf, "1") ==0) { pListItem = m_pAgentThread->DeQueueEvent(); if (pListItem) { pEvent = pListItem->GetData(); if (pEvent) { pType = pEvent->GetEventType(); pDaemonCfgBody = dynamic_cast<JDaemonCfg*>(pEvent->GetBody()); if (pType == JEVT_DAEMON_GET_CFG_RSP && pDaemonCfgBody) { pDaemonCfg->SetSaveMethod(pDaemonCfgBody->GetSaveMethod()); } } delete pListItem; } } } else { break; } } return JSUCCESS; }