📄 taolistenermanager.cpp
字号:
eventId = PtEvent::PHONE_BUTTON_REPEAT; break; case PsMsg::HOOKSW_STATE: case PsMsg::HOOKSW_SET_STATE: if(hookType == PsHookswTask::OFF_HOOK) { eventId = PtEvent::PHONE_HOOKSWITCH_OFFHOOK; } else if( hookType == PsHookswTask::ON_HOOK) { eventId = PtEvent::PHONE_HOOKSWITCH_ONHOOK; } break; case PsMsg::HANDSET_SET_VOLUME: eventId = PtEvent::PHONE_HANDSET_VOLUME_CHANGED; break; case PsMsg::RINGER_SET_VOLUME: eventId = PtEvent::PHONE_RINGER_VOLUME_CHANGED; break; case PsMsg::SPEAKER_SET_VOLUME: eventId = PtEvent::PHONE_SPEAKER_VOLUME_CHANGED; break; default: bValidEvent = FALSE; break; } if (bValidEvent) { UtlString arg; char buf[MAXIMUM_INTEGER_STRING_LENGTH]; sprintf(buf, "%d", hookType); arg = buf + TAOMESSAGE_DELIMITER; sprintf(buf, "%d", key); arg += buf + TAOMESSAGE_DELIMITER; arg += rTerminalName + TAOMESSAGE_DELIMITER + param; pMsg = new TaoMessage(TaoMessage::EVENT, 0, 0, eventId, hSocket, 4, arg); } } break; default: bValidEvent = FALSE; break; } if (bValidEvent) { pMsg->setMsgQueueHandle(mEventClient); if (mEventClient) ((TaoListenerClientTask*) mEventClient)->postMessage((TaoMessage&)(*pMsg)); else { assert(FALSE); mpSvrTransport->postMessage((TaoMessage&)(*pMsg)); } delete pMsg; } } rTerminalName.remove(0); } } } return(TRUE);}TaoStatus TaoListenerManager::addEventListener(const char* terminalName, UtlBoolean callListener){ if (terminalName) { OsWriteLock lock(mListenerRWLock); if (mListenerCnt > 0) // check if listener is already added. { for (int i = 0; i < mListenerCnt; i++) { if (mpListeners[i] && mpListeners[i]->mName.compareTo(terminalName) == 0) { mpListeners[i]->mRef++; return TAO_SUCCESS; } } } //create local event listener with proper terminal name TaoEventListener* pListener = new TaoEventListener(terminalName); if (pListener) { TaoObjHandle hSocket; if (TAO_NOT_FOUND == mpAgents->findValue(terminalName, hSocket)) { OsConnectionSocket* pConnectionSocket; pConnectionSocket = new OsConnectionSocket(DEF_TAO_EVENT_PORT, terminalName); mpConnectionSockets->insert(terminalName, (TaoObjHandle)pConnectionSocket); TaoTransportAgent *pAgent = new TaoTransportAgent(pConnectionSocket, this); mpAgents->insert(terminalName, (TaoObjHandle)pAgent); return TAO_SUCCESS; } // add to listenerDb TaoListenerDb *pListenerDb = new TaoListenerDb(); pListenerDb->mName = terminalName; pListenerDb->mpListenerPtr = (int) pListener; pListenerDb->mRef = 1; if (mListenerCnt == mMaxNumListeners) { osPrintf("***** INCREASING LISTENER COUNT in TaoListenerManager!\n"); //make more of em. mMaxNumListeners += 20; mpListeners = (TaoListenerDb **)realloc(mpListeners,sizeof(TaoListenerDb *)*mMaxNumListeners); for (int loop = mListenerCnt;loop < mMaxNumListeners;loop++) mpListeners[loop] = 0 ; } mpListeners[mListenerCnt++] = pListenerDb; if (!mListenerAdded && !callListener) { mpPhoneTask->addListener(this); mListenerAdded = true; } return(TAO_SUCCESS); } } return(TAO_FAILURE);}TaoStatus TaoListenerManager::addEventListener(TaoMessage& rMsg){ UtlString terminalName; TaoString str(rMsg.getArgList(), TAOMESSAGE_DELIMITER); terminalName = str[0]; if (terminalName.isNull() || 0 == terminalName.compareTo("0.0.0.0")) { if (mListenerCnt <= 0) { terminalName = "127.0.0.1"; osPrintf("WARNING - TaoListenerManager::addEventListener: using invalid host, replaced with %s\n", terminalName.data()); } else { osPrintf("WARNING - TaoListenerManager::addEventListener: using invalid host %s, listener not added.\n", terminalName.data()); return TAO_FAILURE; } } return addEventListener(terminalName.data(), FALSE);}TaoStatus TaoListenerManager::addCallListener(TaoMessage& rMsg){ TaoStatus ret = TAO_SUCCESS; UtlString terminalName; TaoString str(rMsg.getArgList(), TAOMESSAGE_DELIMITER); terminalName = str[0]; if (terminalName.isNull() || 0 == terminalName.compareTo("0.0.0.0")) { if (mListenerCnt <= 0) { terminalName = "127.0.0.1"; osPrintf("WARNING - TaoListenerManager::addCallListener: using invalid host, replaced with %s\n", terminalName.data()); } else { osPrintf("WARNING - TaoListenerManager::addCallListener: using invalid host %s, listener not added.\n", terminalName.data()); return TAO_FAILURE; } } mpCallMgr->addTaoListener(this); ret = addEventListener(terminalName.data(), TRUE); return ret;}TaoStatus TaoListenerManager::removeEventListener(TaoMessage& rMsg){ UtlString terminalName; TaoString str(rMsg.getArgList(), TAOMESSAGE_DELIMITER); terminalName = str[0]; if (terminalName.isNull() || 0 == terminalName.compareTo("0.0.0.0")) terminalName = "127.0.0.1";// OsWriteLock lock(mListenerRWLock); if (mListenerCnt > 0) // check if listener exists. { for (int i = 0; i < mListenerCnt; i++) { if (mpListeners[i] && mpListeners[i]->mName.compareTo(terminalName) == 0) { mpListeners[i]->mRef--; if (mpListeners[i]->mRef <= 0) { osPrintf("*** TaoListenerManager::removeEventListener %s 0x%08x %d\n", terminalName.data(), (int)mpListeners[i], mpListeners[i]->mRef); if (mpListeners[i]->mpListenerPtr) { TaoEventListener* pListener = (TaoEventListener*) mpListeners[i]->mpListenerPtr; delete pListener; } delete mpListeners[i]; mpListeners[i] = 0; mListenerCnt--; // find and delete the TaoTransportAgent TaoObjHandle object; if (TAO_SUCCESS == mpAgents->findValue(terminalName.data(), object)) { if (object) { osPrintf("TaoListenerManager removeEventListener TaoTransportAgent = %d\n", (int)object); TaoTransportAgent *pAgent = (TaoTransportAgent *)object; delete pAgent; } } else osPrintf("TaoListenerManager removeEventListener Failure! did not find socket %s\n", terminalName.data()); if (TAO_SUCCESS == mpAgents->remove(terminalName.data())) { osPrintf(" **** TaoListenerManager removeEventListener socket removed %s ****\n", terminalName.data()); } else osPrintf("TaoListenerManager removeEventListener Failure! did not remove socket %s\n", terminalName.data()); } } } } return TAO_SUCCESS;}/* ============================ ACCESSORS ================================= *//* ============================ INQUIRY =================================== *//* //////////////////////////// PROTECTED ///////////////////////////////// *//* //////////////////////////// PRIVATE /////////////////////////////////// *//* ============================ FUNCTIONS ================================= */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -