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

📄 stafsemservice.h

📁 Software Testing Automation Framework (STAF)的开发代码
💻 H
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF)                              *//* (C) Copyright IBM Corp. 2001, 2004                                        *//*                                                                           *//* This software is licensed under the Common Public License (CPL) V1.0.     *//*****************************************************************************/#ifndef STAF_SemService#define STAF_SemService#include <map>#include <list>#include "STAFTimestamp.h"#include "STAFMutexSem.h"#include "STAFEventSem.h"#include "STAFProc.h"#include "STAFProcUtil.h"#include "STAFService.h"#include "STAFRefPtr.h"// STAFSemService - Handles manipulating a handle's Semclass STAFSemService : public STAFService{public:    STAFSemService();    virtual STAFServiceResult acceptRequest(                              const STAFServiceRequest &requestInfo);    virtual STAFString info(unsigned int raw = 0) const;    virtual ~STAFSemService();    struct MutexRequest    {        MutexRequest(STAFString aSTAFInstanceUUID = "",                     STAFString aMachine = "",                     STAFString aHandleName = "", STAFHandle_t aHandle = 0,                     STAFString aUser = gUnauthenticatedUser,                     STAFString aEndpoint = "")            : stafInstanceUUID(aSTAFInstanceUUID), machine(aMachine),              handleName(aHandleName), handle(aHandle),              user(aUser), endpoint(aEndpoint), timeDate(STAFTimestamp::now()),              avail(new STAFEventSem(), STAFEventSemPtr::INIT),              garbageCollectedPtr(new bool, STAFRefPtr<bool>::INIT)        { *garbageCollectedPtr = false; }        STAFString      stafInstanceUUID;        STAFString      machine;        STAFString      handleName;        STAFHandle_t    handle;        STAFString      user;        STAFString      endpoint;        STAFTimestamp   timeDate;        STAFEventSemPtr avail;        STAFRefPtr<bool> garbageCollectedPtr;    };    typedef std::list<MutexRequest> MutexRequestList;    struct MutexSem    {        // Note: we have 2 constructors here due to a GNU C++        //       compiler internal error when we actually a-        //       ssign a default MutexRequest to owner        MutexSem(STAFString aName = "", unsigned int owned = 0)            : name(aName), uppercaseName(aName.toUpperCase()),              isOwned(owned), acquireTimeDate(STAFTimestamp::now()),              lockPtr(new STAFMutexSem(), STAFMutexSemPtr::INIT)        {  /* Do Nothing */  }        MutexSem(STAFString aName, unsigned int owned,                 const MutexRequest &anOwner)            : name(aName), uppercaseName(aName.toUpperCase()),              isOwned(owned), owner(anOwner),               acquireTimeDate(STAFTimestamp::now()),              lockPtr(new STAFMutexSem(), STAFMutexSemPtr::INIT)        {  /* Do Nothing */ }        STAFString name;        STAFString uppercaseName;        unsigned int isOwned;        MutexRequest owner;        STAFTimestamp acquireTimeDate;        STAFMutexSemPtr lockPtr;        MutexRequestList requestList;    };    typedef STAFRefPtr<MutexSem> MutexSemPtr;    typedef std::map<STAFString, MutexSemPtr> MutexSemList;    struct EventUnit    {        EventUnit(STAFString aMachine = "", STAFString aHandleName = "",                  STAFHandle_t aHandle = 0,                  STAFString aUser = gUnauthenticatedUser,                  STAFString aEndpoint = "")            : machine(aMachine), handleName(aHandleName), handle(aHandle),              user(aUser), endpoint(aEndpoint), timeDate(STAFTimestamp::now())        { /* Do Nothing */ }        STAFString machine;        STAFString handleName;        STAFHandle_t handle;        STAFString user;        STAFString endpoint;        STAFTimestamp timeDate;    };    typedef std::list<EventUnit> EventWaiterList;    struct EventSem    {        EventSem(STAFString aName = "") : name(aName),            uppercaseName(aName.toUpperCase()),            eventSem(new STAFEventSem(), STAFEventSemPtr::INIT),            lastPost(*gMachinePtr, "STAF_Process", gSTAFProcHandle,                     gUnauthenticatedUser, "local://local"),            lastReset(*gMachinePtr, "STAF_Process", gSTAFProcHandle,                      gUnauthenticatedUser, "local://local"),            lockPtr(new STAFMutexSem(), STAFMutexSemPtr::INIT)        { /* Do Nothing */ }        STAFString name;        STAFString uppercaseName;        STAFEventSemPtr eventSem;        EventUnit lastPost;        EventUnit lastReset;        STAFMutexSemPtr lockPtr;        EventWaiterList waiterList;    };    typedef STAFRefPtr<EventSem> EventSemPtr;    typedef std::map<STAFString, EventSemPtr> EventSemList;private:    // Don't allow copy construction or assignment    STAFSemService(const STAFSemService &);    STAFSemService &operator=(const STAFSemService &);    STAFServiceResult handleRequest(const STAFServiceRequest &requestInfo);    STAFServiceResult handleRelease(const STAFServiceRequest &requestInfo);    STAFServiceResult handlePostPulse(const STAFServiceRequest &requestInfo);    STAFServiceResult handleReset(const STAFServiceRequest &requestInfo);    STAFServiceResult handleWait(const STAFServiceRequest &requestInfo);    STAFServiceResult handleDelete(const STAFServiceRequest &requestInfo);    STAFServiceResult handleQuery(const STAFServiceRequest &requestInfo);    STAFServiceResult handleList(const STAFServiceRequest &requestInfo);    STAFServiceResult handleSTAFCallback(        const STAFServiceRequest &requestInfo);    STAFServiceResult handleHelp(const STAFServiceRequest &requestInfo);    MutexSemList fMutexSemList;    STAFMutexSem fMutexSemListSem;    EventSemList fEventSemList;    STAFMutexSem fEventSemListSem;    STAFCommandParser fRequestParser;    STAFCommandParser fReleaseParser;    STAFCommandParser fPostPulseParser;    STAFCommandParser fResetParser;    STAFCommandParser fWaitParser;    STAFCommandParser fDeleteParser;    STAFCommandParser fQueryParser;    STAFCommandParser fListParser;    STAFCommandParser fSTAFCallbackParser;        STAFMapClassDefinitionPtr fMutexInfoClass;    STAFMapClassDefinitionPtr fEventInfoClass;    STAFMapClassDefinitionPtr fQueryMutexClass;    STAFMapClassDefinitionPtr fQueryEventClass;    STAFMapClassDefinitionPtr fEventRequesterClass;    STAFMapClassDefinitionPtr fMutexOwnerClass;    STAFMapClassDefinitionPtr fPendingRequestClass;};#endif

⌨️ 快捷键说明

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