⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 taolistenermanager.cpp

📁 基于sipfoundy 公司开发的sipx协议API
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                                                                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 + -