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

📄 deviceservice.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        // Parse the request    STAFCommandParseResultPtr parsedResult =         pData->fDeleteParser->parse(pInfo->request);    if (parsedResult->rc != kSTAFOk)    {        return STAFResultPtr(new STAFResult(kSTAFInvalidRequestString,                             parsedResult->errorBuffer), STAFResultPtr::INIT);    }       // Resolve any STAF variables in the print option's value    STAFResultPtr resultPtr = resolveOp(pInfo, pData, parsedResult, "PRINTER");    if (resultPtr->rc != 0) return resultPtr;    STAFString printer = resultPtr->result;        // Resolve any STAF variables in the modem option's value    resultPtr = resolveOp(pInfo, pData, parsedResult, "MODEM");    if (resultPtr->rc != 0) return resultPtr;    STAFString modem = resultPtr->result;    // Find the device in the printer or modem map and remove it    if (printer != "")    {        STAFMutexSemLock lock(*pData->fPrinterMapSem);                pData->fPrinterMap.erase(printer);    }    else if (modem != "")    {        STAFMutexSemLock lock(*pData->fModemMapSem);                pData->fModemMap.erase(modem);    }        // Return an Ok result    return STAFResultPtr(new STAFResult(kSTAFOk), STAFResultPtr::INIT);}// Handles device list requestsSTAFResultPtr handleList(STAFServiceRequestLevel30 *pInfo,                          DeviceServiceData *pData){    STAFString result;    STAFRC_t rc = kSTAFOk;    // Verify the requester has at least trust level 2    VALIDATE_TRUST(2, pData->fShortName, "LIST", pData->fLocalMachineName);        // Parse the request    STAFCommandParseResultPtr parsedResult =         pData->fListParser->parse(pInfo->request);    if (parsedResult->rc != kSTAFOk)    {        return STAFResultPtr(new STAFResult(kSTAFInvalidRequestString,                             parsedResult->errorBuffer), STAFResultPtr::INIT);    }        // Check if specified printers or modems    bool all = false;    bool printers = false;    bool modems = false;    if (!(parsedResult->optionTimes("PRINTERS")) &&        !(parsedResult->optionTimes("MODEMS")))    {        all = true;    }        if (parsedResult->optionTimes("PRINTERS"))    {        printers = true;    }        if (parsedResult->optionTimes("MODEMS"))    {        modems = true;    }        // Create a marshalling context and set any map classes (if any).    STAFObjectPtr mc = STAFObject::createMarshallingContext();    mc->setMapClassDefinition(pData->fListDeviceMapClass->reference());    // Create an empty result list to contain the result    STAFObjectPtr resultList = STAFObject::createList();    // Add printer entries to the result list    if (printers || all)    {        STAFMutexSemLock lock(*pData->fPrinterMapSem);                DeviceMap::iterator iter;        for (iter = pData->fPrinterMap.begin();              iter != pData->fPrinterMap.end(); ++iter)        {            STAFObjectPtr resultMap = pData->fListDeviceMapClass->createInstance();            resultMap->put("name",    iter->second->name);            resultMap->put("type",    "Printer");            resultMap->put("model",   iter->second->model);            resultMap->put("serial#", iter->second->serialNumber);            resultList->append(resultMap);        }    }        // Add modem entries to the result list    if (modems || all)    {        STAFMutexSemLock lock(*pData->fModemMapSem);                DeviceMap::iterator iter;        for (iter = pData->fModemMap.begin();             iter != pData->fModemMap.end(); ++iter)        {            STAFObjectPtr resultMap = pData->fListDeviceMapClass->createInstance();            resultMap->put("name",    iter->second->name);            resultMap->put("type",    "Modem");            resultMap->put("model",   iter->second->model);            resultMap->put("serial#", iter->second->serialNumber);            resultList->append(resultMap);        }    }        // Set the result list as the root object for the marshalling context    // and return the marshalled result    mc->setRootObject(resultList);    return STAFResultPtr(new STAFResult(kSTAFOk, mc->marshall()),                         STAFResultPtr::INIT);}// Handles device query requestsSTAFResultPtr handleQuery(STAFServiceRequestLevel30 *pInfo,                           DeviceServiceData *pData){    STAFString result;    STAFRC_t rc = kSTAFOk;        // Verify the requester has at least trust level 2    VALIDATE_TRUST(2, pData->fShortName, "QUERY", pData->fLocalMachineName);        // Parse the request    STAFCommandParseResultPtr parsedResult =         pData->fQueryParser->parse(pInfo->request);    if (parsedResult->rc != kSTAFOk)    {        return STAFResultPtr(new STAFResult(kSTAFInvalidRequestString,                             parsedResult->errorBuffer), STAFResultPtr::INIT);    }        // Resolve any STAF variables in the printer option's value    STAFResultPtr resultPtr = resolveOp(pInfo, pData, parsedResult, "PRINTER");    if (resultPtr->rc != 0) return resultPtr;    STAFString printer = resultPtr->result;        // Resolve any STAF variables in the modem option's value    resultPtr = resolveOp(pInfo, pData, parsedResult, "MODEM");    if (resultPtr->rc != 0) return resultPtr;    STAFString modem = resultPtr->result;        // Create a marshalling context and set any map classes (if any).    STAFObjectPtr mc = STAFObject::createMarshallingContext();    mc->setMapClassDefinition(pData->fQueryDeviceMapClass->reference());    // Create an empty result map to contain the result    STAFObjectPtr resultMap = pData->fQueryDeviceMapClass->createInstance();    // Find the specified printer/modem and add its info to the result map    if (printer != "")    {        STAFMutexSemLock lock(*pData->fPrinterMapSem);                DeviceMap::iterator iter = pData->fPrinterMap.find(printer);                 if (iter == pData->fPrinterMap.end())        {            return STAFResultPtr(new STAFResult(kSTAFDoesNotExist, printer),                                 STAFResultPtr::INIT);        }                resultMap->put("model",   iter->second->model);        resultMap->put("serial#", iter->second->serialNumber);    }    else if (modem != "")    {        STAFMutexSemLock lock(*pData->fModemMapSem);                DeviceMap::iterator iter = pData->fModemMap.find(modem);        if (iter == pData->fModemMap.end())        {            return STAFResultPtr(new STAFResult(kSTAFDoesNotExist, modem),                                 STAFResultPtr::INIT);        }        resultMap->put("model",   iter->second->model);        resultMap->put("serial#", iter->second->serialNumber);    }    // Set the result map as the root object for the marshalling context    // and return the marshalled result    mc->setRootObject(resultMap);    return STAFResultPtr(new STAFResult(kSTAFOk, mc->marshall()),                          STAFResultPtr::INIT);}STAFResultPtr handleHelp(STAFServiceRequestLevel30 *pInfo,                          DeviceServiceData *pData){        // Verify the requester has at least trust level 1    VALIDATE_TRUST(1, pData->fShortName, "HELP", pData->fLocalMachineName);        // Return help text for the service    STAFString help("DEVICE Service Help" + sLineSep + sLineSep);            help += "ADD     (PRINTER <printerName> | MODEM <modemName>)";    help += " MODEL <model> SN <serial#>";    help += sLineSep;    help += "DELETE  (PRINTER <printerName> | MODEM <modemName>) CONFIRM";    help += sLineSep;    help += "LIST    [PRINTERS] [MODEMS]" + sLineSep;    help += "QUERY   PRINTER <printerName> | MODEM <modemName>";    help += sLineSep;    help += "VERSION" + sLineSep;    help += "HELP" + sLineSep;    return STAFResultPtr(new STAFResult(kSTAFOk, help), STAFResultPtr::INIT);}STAFResultPtr handleVersion(STAFServiceRequestLevel30 *pInfo,                             DeviceServiceData *pData){        // Verify the requester has at least trust level 1    VALIDATE_TRUST(1, pData->fShortName, "VERSION", pData->fLocalMachineName);        // Return the version of the service    return STAFResultPtr(new STAFResult(kSTAFOk, sVersionInfo),                          STAFResultPtr::INIT);}STAFResultPtr resolveOp(STAFServiceRequestLevel30 *pInfo,                         DeviceServiceData *pData,                        STAFCommandParseResultPtr &parsedResult,                        const STAFString &fOption, unsigned int optionIndex){    STAFString optionValue = parsedResult->optionValue(fOption, optionIndex);    if (optionValue.find(sLeftCurlyBrace) == STAFString::kNPos)    {        return STAFResultPtr(new STAFResult(kSTAFOk, optionValue),                             STAFResultPtr::INIT);    }    return resolveStr(pInfo, pData, optionValue);}STAFResultPtr resolveStr(STAFServiceRequestLevel30 *pInfo,                         DeviceServiceData *pData,                          const STAFString &theString){    return pData->fHandlePtr->submit(sLocal, sVar, sResStrResolve +                                     STAFString(pInfo->requestNumber) +                                     sString +                                     pData->fHandlePtr->wrapData(theString));}void registerHelpData(DeviceServiceData *pData, unsigned int errorNumber,                      const STAFString &shortInfo, const STAFString &longInfo){    static STAFString regString("REGISTER SERVICE %C ERROR %d INFO %C "                                "DESCRIPTION %C");    pData->fHandlePtr->submit(sLocal, sHelp, STAFHandle::formatString(        regString.getImpl(), pData->fShortName.getImpl(), errorNumber,        shortInfo.getImpl(), longInfo.getImpl()));}void unregisterHelpData(DeviceServiceData *pData, unsigned int errorNumber){    static STAFString regString("UNREGISTER SERVICE %C ERROR %d");    pData->fHandlePtr->submit(sLocal, sHelp, STAFHandle::formatString(        regString.getImpl(), pData->fShortName.getImpl(), errorNumber));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -