📄 stafrequestmanager.cpp
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF) *//* (C) Copyright IBM Corp. 2001 *//* *//* This software is licensed under the Common Public License (CPL) V1.0. *//*****************************************************************************/#include "STAFOSTypes.h"#include "STAFProc.h"#include "STAFRequestManager.h"#include "STAFService.h"#include "STAFString.h"#include "STAFError.h"static STAFRequestManager *pRequestManager = 0;STAFRequestManager::STAFRequestManager() : fNextRequest(0){ pRequestManager = this;}STAFServiceRequestPtr STAFRequestManager::getNewServiceRequest(){ STAFMutexSemLock requestLock(fRequestMapSem); STAFServiceRequest *serviceRequest = new STAFServiceRequest(); serviceRequest->fRequestNumber = ++fNextRequest; serviceRequest->fProcessingState = kSTAFServiceRequestPending; return STAFServiceRequestPtr(serviceRequest, STAFServiceRequestPtr::INIT);}STAFRC_t STAFRequestManager::add(STAFServiceRequestPtr &serviceRequest){ STAFMutexSemLock requestLock(fRequestMapSem); fRequestMap[serviceRequest->fRequestNumber] = serviceRequest; return kSTAFOk;}STAFRC_t STAFRequestManager::requestCompleted(STAFRequestNumber_t request, const STAFServiceResult &result) { STAFMutexSemLock requestLock(fRequestMapSem); RequestMap::iterator theIterator = fRequestMap.find(request); if (theIterator == fRequestMap.end()) return kSTAFRequestNumberNotFound; STAFServiceRequestPtr theRequest = (*theIterator).second; theRequest->fResult = result; theRequest->fProcessingState = kSTAFServiceRequestComplete; return kSTAFOk;}STAFRC_t STAFRequestManager::getResult(STAFRequestNumber_t request, STAFServiceResult *result){ STAFMutexSemLock requestLock(fRequestMapSem); return doGetResult(request, result);}STAFRC_t STAFRequestManager::freeRequest(STAFRequestNumber_t request, STAFServiceResult *result){ STAFMutexSemLock requestLock(fRequestMapSem); RequestMap::iterator theIterator = fRequestMap.find(request); if (theIterator == fRequestMap.end()) return kSTAFRequestNumberNotFound; STAFRC_t rc = doGetResult(request, result); if (rc == kSTAFOk) fRequestMap.erase(request); return rc;}STAFRC_t STAFRequestManager::deleteRequest(STAFRequestNumber_t request) { // This method will remove the request whether or not it is complete STAFMutexSemLock requestLock(fRequestMapSem); RequestMap::iterator theIterator = fRequestMap.find(request); if (theIterator == fRequestMap.end()) return kSTAFRequestNumberNotFound; fRequestMap.erase(request); return kSTAFOk;}STAFRC_t STAFRequestManager::getRequestData(STAFRequestNumber_t request, STAFServiceRequestPtr &reqData){ STAFMutexSemLock requestLock(fRequestMapSem); RequestMap::iterator theIterator = fRequestMap.find(request); if (theIterator == fRequestMap.end()) return kSTAFRequestNumberNotFound; reqData = (*theIterator).second; return kSTAFOk;}STAFRC_t STAFRequestManager::getStatus(STAFRequestNumber_t request, STAFServiceRequestState_t *status){ STAFMutexSemLock requestLock(fRequestMapSem); return doGetStatus(request, status);}bool STAFRequestManager::requestExists(STAFRequestNumber_t request){ STAFMutexSemLock requestLock(fRequestMapSem); RequestMap::iterator theIterator = fRequestMap.find(request); if (theIterator == fRequestMap.end()) return false; return true;}STAFRequestManager::RequestMap STAFRequestManager::getRequestMapCopy(){ STAFMutexSemLock requestLock(fRequestMapSem); return fRequestMap;}STAFRC_t STAFRequestManager::doGetStatus(STAFRequestNumber_t request, STAFServiceRequestState_t *status){ RequestMap::iterator theIterator = fRequestMap.find(request); if (theIterator == fRequestMap.end()) return kSTAFRequestNumberNotFound; *status = (*theIterator).second->fProcessingState; return kSTAFOk;}STAFRC_t STAFRequestManager::doGetResult(STAFRequestNumber_t request, STAFServiceResult *result){ RequestMap::iterator theIterator = fRequestMap.find(request); if (theIterator == fRequestMap.end()) return kSTAFRequestNumberNotFound; STAFServiceRequestState_t reqStatus; STAFRC_t rc = doGetStatus(request, &reqStatus); if (rc != kSTAFOk) return rc; if (reqStatus != kSTAFServiceRequestComplete) return kSTAFRequestNotComplete; STAFServiceRequestPtr theRequest = (*theIterator).second; *result = theRequest->fResult; return kSTAFOk;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -