JUINT32 JPhoneAgent::SetDaemonCfg(JDaemonCfg* pDaemonCfg) { JEvent* pEvent = JNULL; JDaemonCfg* pDaemonCfgBody = JNULL; JCommEngine* pComEngine = JNULL; JThread* pThread = JNULL; JAgentThread* pAgentThread = JNULL; JLogAutoPtr clsLogAutoPtr(JSingleton<JLog>::instance(), JLOG_MOD_PHONE_AGENT, "JPhoneAgent::SetDaemonCfg"); pEvent = new JEvent(JEVT_DAEMON_SET_CFG); pDaemonCfgBody = new JDaemonCfg; if (pEvent && pDaemonCfg) { //set save methon into the body pDaemonCfgBody->SetSaveMethod(pDaemonCfg->GetSaveMethod()); pEvent->SetFromProc(JS_P_JMAINPROC); pEvent->SetFromThrd(JS_T_JPHONEAGENT); pEvent->SetFromMod(JNULL); pEvent->SetToProc(JS_P_JMAINPROC); pEvent->SetToThrd(JS_T_JMAINTHREAD); pEvent->SetToMod(JS_M_JDAEMON); pEvent->SetBody(pDaemonCfgBody); pThread = JSingleton<JThreadManager>::instance()->GetThread(JS_T_JPHONEAGENT); pAgentThread = dynamic_cast<JAgentThread*>(pThread); if (pAgentThread) { //get the communication engine to send the event pComEngine = pAgentThread->GetNotifyCommEngine(); if (pComEngine) { pComEngine->SendEvent(pEvent); } } } 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) { //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; }