ptphonebutton.cpp
来自「基于sipfoundy 公司开发的sipx协议API」· C++ 代码 · 共 263 行
CPP
263 行
//// Copyright (C) 2004, 2005 Pingtel Corp.// //// $$//////////////////////////////////////////////////////////////////////////////// SYSTEM INCLUDES#include <assert.h>// APPLICATION INCLUDES#include "ptapi/PtComponent.h"#include "ptapi/PtPhoneButton.h"#include "ptapi/PtPhoneLamp.h"#include "os/OsUtil.h"#include "ps/PsButtonTask.h"#include "tao/TaoClientTask.h"#include "tao/TaoEvent.h"#include "tao/TaoString.h"// EXTERNAL FUNCTIONS// EXTERNAL VARIABLES// CONSTANTS// STATIC VARIABLE INITIALIZATIONS/* //////////////////////////// PUBLIC //////////////////////////////////// *//* ============================ CREATORS ================================== */// ConstructorPtPhoneButton::PtPhoneButton() :PtComponent(PtComponent::BUTTON){ memset(mpInfo, 0, MAX_NAME_LENGTH + 1); mpClient = 0; mpLamp = 0; mTimeOut = OsTime(PT_CONST_EVENT_WAIT_TIMEOUT, 0); mpEventMgr = OsProtectEventMgr::getEventMgr();}PtPhoneButton::PtPhoneButton(TaoClientTask *pClient, const char* name) :PtComponent(PtComponent::BUTTON){ mpEventMgr = OsProtectEventMgr::getEventMgr(); memset(mpInfo, 0, MAX_NAME_LENGTH + 1); if (name ) { int len = strlen(name); len = (len <= MAX_NAME_LENGTH) ? len : MAX_NAME_LENGTH; strncpy(mpInfo, name, len); } mpLamp = 0; mpClient = pClient; if (mpClient && !(mpClient->isStarted())) { mpClient->start(); } mTimeOut = OsTime(PT_CONST_EVENT_WAIT_TIMEOUT, 0);}// Copy constructorPtPhoneButton::PtPhoneButton(const PtPhoneButton& rPtPhoneButton) :PtComponent(rPtPhoneButton){ mpEventMgr = OsProtectEventMgr::getEventMgr(); if (rPtPhoneButton.mpLamp) mpLamp = new PtPhoneLamp(*(rPtPhoneButton.mpLamp)); else mpLamp = 0; memset(mpInfo, 0, MAX_NAME_LENGTH + 1); if (rPtPhoneButton.mpInfo[0]) { int len = strlen(rPtPhoneButton.mpInfo); if (len > MAX_NAME_LENGTH) len = MAX_NAME_LENGTH; strncpy(mpInfo, rPtPhoneButton.mpInfo, len); mpInfo[len] = 0; } mpClient = rPtPhoneButton.mpClient; if (mpClient && !(mpClient->isStarted())) { mpClient->start(); } mTimeOut = OsTime(PT_CONST_EVENT_WAIT_TIMEOUT, 0);}// DestructorPtPhoneButton::~PtPhoneButton(){ if (mpLamp) { delete mpLamp; mpLamp = 0; }}/* ============================ MANIPULATORS ============================== */// Assignment operatorPtPhoneButton&PtPhoneButton::operator=(const PtPhoneButton& rhs){ if (this == &rhs) // handle the assignment to self case return *this; memset(mpInfo, 0, MAX_NAME_LENGTH + 1); if (rhs.mpInfo[0]) { int len = strlen(rhs.mpInfo); if (len > MAX_NAME_LENGTH) len = MAX_NAME_LENGTH; strncpy(mpInfo, rhs.mpInfo, len); mpInfo[len] = 0; } if (mpLamp != NULL) { delete mpLamp ; } if (rhs.mpLamp) mpLamp = new PtPhoneLamp(*(rhs.mpLamp)); else mpLamp = 0; mpClient = rhs.mpClient; if (mpClient && !(mpClient->isStarted())) { mpClient->start(); } mTimeOut = rhs.mTimeOut; return *this;}PtStatus PtPhoneButton::buttonPress(void){ if (mpInfo[0]) { UtlString arg(mpInfo); OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_PHONECOMPONENT, TaoMessage::BUTTON_PRESS, 0, (TaoObjHandle)0, (TaoObjHandle)pe, 1, arg); mpClient->sendRequest(msg); int rc; if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; } pe->getEventData((int &)rc);#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::BUTTON_PRESS);#endif mpEventMgr->release(pe); return PT_SUCCESS; } return PT_RESOURCE_UNAVAILABLE;}PtStatus PtPhoneButton::setInfo(char* buttonInfo){ if (buttonInfo) { int len = strlen(buttonInfo); memset(mpInfo, 0, (len + 1)); strcpy(mpInfo, buttonInfo); return PT_SUCCESS; } return PT_RESOURCE_UNAVAILABLE;}// set button info locallyPtStatus PtPhoneButton::setInfo2(char* buttonInfo){ if (buttonInfo) { int len = strlen(buttonInfo); if (len > MAX_NAME_LENGTH) len = MAX_NAME_LENGTH; strncpy(mpInfo, buttonInfo, len); mpInfo[len] = 0; return PT_SUCCESS; } return PT_RESOURCE_UNAVAILABLE;}/* ============================ ACCESSORS ================================= */PtStatus PtPhoneButton::getAssociatedPhoneLamp(PtPhoneLamp& rLamp){ if (OsUtil::getPlatformType() < OsUtil::PLATFORM_TCAS4) return PT_RESOURCE_UNAVAILABLE; if (!mpLamp) { mpLamp = new PtPhoneLamp(mpClient); mpLamp->setAssociatedButton(this); } rLamp = PtPhoneLamp(*mpLamp); return PT_SUCCESS;}PtStatus PtPhoneButton::getInfo(char* rpInfo, int maxLen){ if (rpInfo && maxLen > 0) { if (mpInfo) { int bytes = strlen(mpInfo); bytes = (bytes > maxLen) ? maxLen : bytes; memset(rpInfo, 0, maxLen); strncpy (rpInfo, mpInfo, bytes); return PT_SUCCESS; } } return PT_RESOURCE_UNAVAILABLE;}/* ============================ INQUIRY =================================== *//* //////////////////////////// PROTECTED ///////////////////////////////// *//* //////////////////////////// PRIVATE /////////////////////////////////// *//* ============================ FUNCTIONS ================================= */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?