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

📄 deviceservice.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF)                              *//* (C) Copyright IBM Corp. 2001, 2004, 2005                                  *//*                                                                           *//* This software is licensed under the Common Public License (CPL) V1.0.     *//*****************************************************************************/#include "STAF.h"#include <deque>#include <map>#include "STAFMutexSem.h"#include "STAFCommandParser.h"#include "STAFServiceInterface.h"#include "STAFUtil.h"#include "DeviceService.h"// Device Data - contains data for a devicestruct DeviceData{    DeviceData()    { /* Do Nothing */ }    DeviceData(const STAFString &aName, const STAFString &aModel,               const STAFString &aSN) :         name(aName), model(aModel), serialNumber(aSN)    { /* Do Nothing */ }    STAFString   name;            // Device name    STAFString   model;           // Device model    STAFString   serialNumber;    // Device serial number};typedef std::deque<DeviceData> DeviceList;typedef STAFRefPtr<DeviceData> DeviceDataPtr;// DeviceMap -- KEY:   Device name,//              VALUE: Pointer to DeviceData informationtypedef std::map<STAFString, DeviceDataPtr> DeviceMap;// DEVICE Service Datastruct DeviceServiceData{    unsigned int  fDebugMode;              // Debug Mode flag    STAFString    fShortName;              // Short service name    STAFString    fName;                   // Registered service name        STAFHandlePtr fHandlePtr;              // Device service's STAF handle    STAFString    fLocalMachineName;       // Local machine name    STAFCommandParserPtr fAddParser;       // DEVICE ADD command parser    STAFCommandParserPtr fDeleteParser;    // DEVICE DELETE command parser    STAFCommandParserPtr fQueryParser;     // DEVICE QUERY command parser    STAFCommandParserPtr fListParser;      // DEVICE LIST command parser    STAFCommandParserPtr fHelpParser;      // DEVICE HELP command parser    STAFCommandParserPtr fVersionParser;   // DEVICE VERSION command parser    STAFCommandParserPtr fParmsParser;     // DEVIC PARMS command parser    // Map Class Definitions for marshalled results    STAFMapClassDefinitionPtr fListDeviceMapClass;     STAFMapClassDefinitionPtr fQueryDeviceMapClass;    STAFMutexSemPtr      fPrinterMapSem;   // Semaphore to control                                            //   access to the PrinterMap    STAFMutexSemPtr      fModemMapSem;     // Semaphore to control                                            //   access to the ModemMap    DeviceMap            fPrinterMap;      // Map of all printers    DeviceMap            fModemMap;        // Map of all modems};typedef STAFRefPtr<DeviceData> DeviceServiceDataPtr;// Static Variablesstatic STAFString sLineSep;static const STAFString sVersionInfo("3.0.1");static const STAFString sLocal("local");static const STAFString sHelp("help");static const STAFString sVar("var");static const STAFString sResStrResolve("RESOLVE REQUEST ");static const STAFString sString(" STRING ");static const STAFString sLeftCurlyBrace(kUTF8_LCURLY);// Prototypesstatic STAFResultPtr handleAdd(STAFServiceRequestLevel30 *,                               DeviceServiceData *);static STAFResultPtr handleDelete(STAFServiceRequestLevel30 *,                                  DeviceServiceData *);static STAFResultPtr handleQuery(STAFServiceRequestLevel30 *,                                 DeviceServiceData *);static STAFResultPtr handleRelease(STAFServiceRequestLevel30 *,                                   DeviceServiceData *);static STAFResultPtr handleList(STAFServiceRequestLevel30 *,                                DeviceServiceData *);static STAFResultPtr handleHelp(STAFServiceRequestLevel30 *,                                DeviceServiceData *);static STAFResultPtr handleVersion(STAFServiceRequestLevel30 *,                                   DeviceServiceData *);static STAFResultPtr resolveStr(STAFServiceRequestLevel30 *pInfo,                                 DeviceServiceData *pData,                                const STAFString &theString);static STAFResultPtr resolveOp(STAFServiceRequestLevel30 *pInfo,                                DeviceServiceData *pData,                               STAFCommandParseResultPtr &parsedResult,                               const STAFString &fOption,                               unsigned int optionIndex = 1);STAFResultPtr resolveOpLocal(DeviceServiceData *pData,                             STAFCommandParseResultPtr &parsedResult,                             const STAFString &fOption,                             unsigned int optionIndex = 1);static void registerHelpData(DeviceServiceData *pData,                             unsigned int errorNumber,                             const STAFString &shortInfo,                             const STAFString &longInfo);static void unregisterHelpData(DeviceServiceData *pData,                               unsigned int errorNumber);// Begin implementationSTAFRC_t STAFServiceGetLevelBounds(unsigned int levelID,                                   unsigned int *minimum,                                   unsigned int *maximum){    switch (levelID)    {        case kServiceInfo:        {            *minimum = 30;            *maximum = 30;            break;        }        case kServiceInit:        {            *minimum = 30;            *maximum = 30;            break;        }        case kServiceAcceptRequest:        {            *minimum = 30;            *maximum = 30;            break;        }        case kServiceTerm:        case kServiceDestruct:        {            *minimum = 0;            *maximum = 0;            break;        }        default:        {            return kSTAFInvalidAPILevel;        }    }    return kSTAFOk;}STAFRC_t STAFServiceConstruct(STAFServiceHandle_t *pServiceHandle,                              void *pServiceInfo, unsigned int infoLevel,                              STAFString_t *pErrorBuffer){    STAFRC_t rc = kSTAFUnknownError;    try    {        if (infoLevel != 30) return kSTAFInvalidAPILevel;        STAFServiceInfoLevel30 *pInfo =            reinterpret_cast<STAFServiceInfoLevel30 *>(pServiceInfo);        DeviceServiceData data;        data.fDebugMode = 0;        data.fShortName = pInfo->name;        data.fName = "STAF/Service/";        data.fName += pInfo->name;                for (unsigned int i = 0; i < pInfo->numOptions; ++i)        {                        if (STAFString(pInfo->pOptionName[i]).upperCase() == "DEBUG")            {                data.fDebugMode = 1;            }                       else            {                STAFString optionError(pInfo->pOptionName[i]);                *pErrorBuffer = optionError.adoptImpl();                return kSTAFServiceConfigurationError;            }        }                // Set service handle        *pServiceHandle = new DeviceServiceData(data);        return kSTAFOk;    }    catch (STAFException &e)    {        STAFString result;                result += STAFString("In DeviceService.cpp: STAFServiceConstruct")            + kUTF8_SCOLON;                    result += STAFString("Name: ") + e.getName() + kUTF8_SCOLON;        result += STAFString("Location: ") + e.getLocation() + kUTF8_SCOLON;        result += STAFString("Text: ") + e.getText() + kUTF8_SCOLON;        result += STAFString("Error code: ") + e.getErrorCode() + kUTF8_SCOLON;                *pErrorBuffer = result.adoptImpl();    }    catch (...)    {        STAFString error(                    "DeviceService.cpp: STAFServiceConstruct: Caught "                    "unknown exception in STAFServiceConstruct()");        *pErrorBuffer = error.adoptImpl();    }        return kSTAFUnknownError;}STAFRC_t STAFServiceInit(STAFServiceHandle_t serviceHandle,                         void *pInitInfo, unsigned int initLevel,                         STAFString_t *pErrorBuffer){    STAFRC_t retCode = kSTAFUnknownError;    try    {            if (initLevel != 30) return kSTAFInvalidAPILevel;        DeviceServiceData *pData =            reinterpret_cast<DeviceServiceData *>(serviceHandle);                STAFServiceInitLevel30 *pInfo =            reinterpret_cast<STAFServiceInitLevel30 *>(pInitInfo);                retCode = STAFHandle::create(pData->fName, pData->fHandlePtr);        if (retCode != kSTAFOk)            return retCode;                //ADD options        pData->fAddParser = STAFCommandParserPtr(new STAFCommandParser,                                                 STAFCommandParserPtr::INIT);        pData->fAddParser->addOption("ADD", 1,                                     STAFCommandParser::kValueNotAllowed);        pData->fAddParser->addOption("PRINTER", 1,                                     STAFCommandParser::kValueRequired);        pData->fAddParser->addOption("MODEM", 1,                                     STAFCommandParser::kValueRequired);        pData->fAddParser->addOption("MODEL", 1,                                     STAFCommandParser::kValueRequired);        pData->fAddParser->addOption("SN", 1,                                     STAFCommandParser::kValueRequired);        pData->fAddParser->addOptionNeed("PRINTER MODEM", "ADD");        pData->fAddParser->addOptionNeed("ADD", "PRINTER MODEM");        pData->fAddParser->addOptionNeed("ADD", "MODEL");        pData->fAddParser->addOptionNeed("ADD", "SN");        pData->fAddParser->addOptionGroup("PRINTER MODEM", 0, 1);                //DELETE options        pData->fDeleteParser = STAFCommandParserPtr(new STAFCommandParser,                                                 STAFCommandParserPtr::INIT);        pData->fDeleteParser->addOption("DELETE", 1,                                        STAFCommandParser::kValueNotAllowed);        pData->fDeleteParser->addOption("PRINTER", 1,                                        STAFCommandParser::kValueRequired);        pData->fDeleteParser->addOption("MODEM",  1,                                        STAFCommandParser::kValueRequired);        pData->fDeleteParser->addOption("CONFIRM", 1,                                        STAFCommandParser::kValueNotAllowed);        pData->fDeleteParser->addOptionGroup("PRINTER MODEM", 0, 1);        pData->fDeleteParser->addOptionNeed("PRINTER MODEM", "DELETE");        pData->fDeleteParser->addOptionNeed("DELETE", "PRINTER MODEM");        pData->fDeleteParser->addOptionNeed("DELETE", "CONFIRM");                //QUERY options        pData->fQueryParser = STAFCommandParserPtr(new STAFCommandParser,                                                 STAFCommandParserPtr::INIT);        pData->fQueryParser->addOption("QUERY", 1,                                       STAFCommandParser::kValueNotAllowed);        pData->fQueryParser->addOption("PRINTER", 1,                                       STAFCommandParser::kValueRequired);        pData->fQueryParser->addOption("MODEM", 1,                                       STAFCommandParser::kValueRequired);        pData->fQueryParser->addOptionGroup("PRINTER MODEM", 0, 1);        pData->fQueryParser->addOptionNeed("PRINTER MODEM", "QUERY");        pData->fQueryParser->addOptionNeed("QUERY", "PRINTER MODEM");        //LIST options        pData->fListParser = STAFCommandParserPtr(new STAFCommandParser,                                                  STAFCommandParserPtr::INIT);        pData->fListParser->addOption("LIST", 1,                                       STAFCommandParser::kValueNotAllowed);        pData->fListParser->addOption("PRINTERS", 1,                                      STAFCommandParser::kValueNotAllowed);        pData->fListParser->addOption("MODEMS", 1,                                      STAFCommandParser::kValueNotAllowed);        //HELP options        pData->fHelpParser = STAFCommandParserPtr(new STAFCommandParser,                                                  STAFCommandParserPtr::INIT);        pData->fHelpParser->addOption("HELP", 1,                                      STAFCommandParser::kValueNotAllowed);        //VERSION options        pData->fVersionParser = STAFCommandParserPtr(new STAFCommandParser,                                                  STAFCommandParserPtr::INIT);        pData->fVersionParser->addOption("VERSION", 1,                                         STAFCommandParser::kValueNotAllowed);        // Construct map class for the result from a LIST request.        pData->fListDeviceMapClass = STAFMapClassDefinition::create(            "STAF/Service/Device/ListDevice");        pData->fListDeviceMapClass->addKey("name",    "Name");

⌨️ 快捷键说明

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