From 530a96746b74ffcc18eb13bd5560cd9152ee43d9 Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Thu, 31 Oct 2013 06:23:33 -0400 Subject: [PATCH] CreateRequest no longer derives from Requester; In responseHandlers all destructors are virtual. --- pvAccessApp/client/pvAccess.h | 21 +++-- pvAccessApp/factory/CreateRequestFactory.cpp | 88 +++++++++++--------- pvAccessApp/server/responseHandlers.cpp | 8 +- pvAccessApp/server/responseHandlers.h | 29 ++++++- testApp/client/testCreateRequest.cpp | 49 ++++------- testApp/remote/eget.cpp | 9 +- testApp/remote/pvget.cpp | 4 +- testApp/remote/pvput.cpp | 2 +- testApp/remote/testGetPerformance.cpp | 2 +- testApp/remote/testRemoteClientImpl.cpp | 10 +-- 10 files changed, 124 insertions(+), 98 deletions(-) diff --git a/pvAccessApp/client/pvAccess.h b/pvAccessApp/client/pvAccess.h index c3dbbfc..fa9d247 100644 --- a/pvAccessApp/client/pvAccess.h +++ b/pvAccessApp/client/pvAccess.h @@ -793,7 +793,7 @@ namespace pvAccess { class CreateRequest { public: POINTER_DEFINITIONS(CreateRequest); - + static CreateRequest::shared_pointer create(); virtual ~CreateRequest() {}; /** @@ -801,16 +801,23 @@ namespace pvAccess { * See the package overview documentation for details. * @param request The field request. See the package overview documentation for details. * @param requester The requester; - * @return The request structure if an invalid request was given. + * @return The request PVStructure if a valid request was given. + * If a NULL PVStructure is returned then getMessage will return + * the reason. */ virtual epics::pvData::PVStructure::shared_pointer createRequest( - epics::pvData::String const & request, - epics::pvData::Requester::shared_pointer const & requester) = 0; + epics::pvData::String const & request) = 0; + /** + * Get the error message of createRequest returns NULL; + * @return the error message + */ + epics::pvData::String getMessage() {return message;} + protected: + CreateRequest() {} + epics::pvData::String message; + }; - extern CreateRequest::shared_pointer getCreateRequest(); - - }} #endif /* PVACCESS_H */ diff --git a/pvAccessApp/factory/CreateRequestFactory.cpp b/pvAccessApp/factory/CreateRequestFactory.cpp index e8f1d70..cf8213d 100644 --- a/pvAccessApp/factory/CreateRequestFactory.cpp +++ b/pvAccessApp/factory/CreateRequestFactory.cpp @@ -68,10 +68,9 @@ private: } - static bool createRequestOptions( + bool createRequestOptions( PVStructurePtr const & pvParent, - String request, - Requester::shared_pointer const & requester) + String request) { trim(request); if(request.length()<=1) return true; @@ -85,8 +84,7 @@ private: String item = items[j]; size_t equals = item.find('='); if(equals==String::npos || equals==0) { - requester->message(item + " illegal option", errorMessage); - + message = item + " illegal option"; return false; } String name = item.substr(0,equals); @@ -101,10 +99,9 @@ private: return true; } - static bool createFieldRequest( + bool createFieldRequest( PVStructurePtr const & pvParent, - String request, - Requester::shared_pointer const & requester) + String request) { static PVFieldPtrArray emptyFields; static StringArray emptyFieldNames; @@ -113,7 +110,7 @@ private: if(request.length()<=0) return true; size_t comma = request.find(','); if(comma==0) { - return createFieldRequest(pvParent,request.substr(1),requester); + return createFieldRequest(pvParent,request.substr(1)); } size_t openBrace = request.find('{'); size_t openBracket = request.find('['); @@ -124,7 +121,7 @@ private: String fieldName = request.substr(0,period); request = request.substr(period+1); pvParent->appendPVField(fieldName, pvStructure); - return createFieldRequest(pvStructure,request,requester); + return createFieldRequest(pvStructure,request); } pvParent->appendPVField(request, pvStructure); return true; @@ -139,18 +136,18 @@ private: String fieldName = nextFieldName.substr(0,period); PVStructurePtr xxx= pvDataCreate->createPVStructure(emptyFieldNames, emptyFields); String rest = nextFieldName.substr(period+1); - createFieldRequest(xxx,rest,requester); + createFieldRequest(xxx,rest); pvParent->appendPVField(fieldName, xxx); } else { pvParent->appendPVField(nextFieldName, pvStructure); } request = request.substr(end+1); - return createFieldRequest(pvParent,request,requester); + return createFieldRequest(pvParent,request); } if(end==openBracket) { size_t closeBracket = request.find(']'); if(closeBracket==String::npos || closeBracket==0) { - requester->message(request + " does not have matching ]", errorMessage); + message = request + " does not have matching ]"; return false; } String options = request.substr(openBracket+1, closeBracket-openBracket-1); @@ -158,30 +155,30 @@ private: if(period!=String::npos && period!=0) { String fieldName = nextFieldName.substr(0,period); PVStructurePtr xxx = pvDataCreate->createPVStructure(emptyFieldNames, emptyFields); - if(!createRequestOptions(xxx,options,requester)) return false; + if(!createRequestOptions(xxx,options)) return false; String rest = nextFieldName.substr(period+1); - createFieldRequest(xxx,rest,requester); + createFieldRequest(xxx,rest); pvParent->appendPVField(fieldName, xxx); } else { - if(!createRequestOptions(pvStructure,options,requester)) return false; + if(!createRequestOptions(pvStructure,options)) return false; pvParent->appendPVField(nextFieldName, pvStructure); } request = request.substr(end+1); - return createFieldRequest(pvParent,request,requester); + return createFieldRequest(pvParent,request); } // end== openBrace size_t closeBrace = findMatchingBrace(request,openBrace+1,1); if(closeBrace==String::npos || closeBrace==0) { - requester->message(request + " does not have matching }", errorMessage); + message = request + " does not have matching }"; return false; } String subFields = request.substr(openBrace+1, closeBrace-openBrace-1); - if(!createFieldRequest(pvStructure,subFields,requester)) return false; + if(!createFieldRequest(pvStructure,subFields)) return false; request = request.substr(closeBrace+1); size_t period = nextFieldName.find('.'); if(period==String::npos) { pvParent->appendPVField(nextFieldName,pvStructure); - return createFieldRequest(pvParent,request,requester); + return createFieldRequest(pvParent,request); } PVStructure::shared_pointer yyy = pvParent; while(period!=String::npos && period!=0) { @@ -196,14 +193,13 @@ private: } yyy = xxx; } - return createFieldRequest(pvParent,request,requester); + return createFieldRequest(pvParent,request); } public: virtual PVStructure::shared_pointer createRequest( - String const & crequest, - Requester::shared_pointer const & requester) + String const & crequest) { String request = crequest; PVFieldPtrArray pvFields; @@ -225,11 +221,15 @@ public: size_t offsetBegin = request.find('[', offsetRecord); size_t offsetEnd = request.find(']', offsetBegin); if(offsetEnd == String::npos) { - requester->message(request.substr(offsetRecord) + " record[ does not have matching ]", errorMessage); + message = request.substr(offsetRecord) + + " record[ does not have matching ]"; return nullStructure; } PVStructurePtr pvStruct = pvDataCreate->createPVStructure(emptyPVStructure); - if(!createRequestOptions(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),requester)) { + if(!createRequestOptions( + pvStruct,request.substr(offsetBegin+1, + offsetEnd-offsetBegin-1))) + { return nullStructure; } pvStructure->appendPVField("record", pvStruct); @@ -238,11 +238,15 @@ public: size_t offsetBegin = request.find('(', offsetField); size_t offsetEnd = request.find(')', offsetBegin); if(offsetEnd == String::npos) { - requester->message(request.substr(offsetField) + " field( does not have matching )", errorMessage); + message = request.substr(offsetField) + + " field( does not have matching )"; return nullStructure; } PVStructurePtr pvStruct = pvDataCreate->createPVStructure(emptyPVStructure); - if(!createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),requester)) { + if(!createFieldRequest( + pvStruct,request.substr(offsetBegin+1, + offsetEnd-offsetBegin-1))) + { return nullStructure; } pvStructure->appendPVField("field", pvStruct); @@ -251,11 +255,15 @@ public: size_t offsetBegin = request.find('(', offsetPutField); size_t offsetEnd = request.find(')', offsetBegin); if(offsetEnd == String::npos) { - requester->message(request.substr(offsetField) + " putField( does not have matching )", errorMessage); + message = request.substr(offsetField) + + " putField( does not have matching )"; return nullStructure; } PVStructurePtr pvStruct = pvDataCreate->createPVStructure(emptyPVStructure); - if(!createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),requester)) { + if(!createFieldRequest( + pvStruct,request.substr(offsetBegin+1, + offsetEnd-offsetBegin-1))) + { return nullStructure; } pvStructure->appendPVField("putField", pvStruct); @@ -264,32 +272,30 @@ public: size_t offsetBegin = request.find('(', offsetGetField); size_t offsetEnd = request.find(')', offsetBegin); if(offsetEnd == String::npos) { - requester->message(request.substr(offsetField) + " getField( does not have matching )", errorMessage); + message = request.substr(offsetField) + + " getField( does not have matching )"; return nullStructure; } PVStructurePtr pvStruct = pvDataCreate->createPVStructure(emptyPVStructure); - if(!createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),requester)) { + if(!createFieldRequest( + pvStruct,request.substr(offsetBegin+1, + offsetEnd-offsetBegin-1))) + { return nullStructure; } pvStructure->appendPVField("getField", pvStruct); } if (pvStructure.get()->getStructure()->getNumberFields()==0) { - if(!createFieldRequest(pvStructure,request,requester)) return nullStructure; + if(!createFieldRequest(pvStructure,request)) return nullStructure; } return pvStructure; } }; -static CreateRequest::shared_pointer createRequest; - -CreateRequest::shared_pointer getCreateRequest() { - static Mutex mutex; - Lock guard(mutex); - - if(createRequest.get()==0){ - createRequest.reset(new CreateRequestImpl()); - } +CreateRequest::shared_pointer CreateRequest::create() +{ + CreateRequest::shared_pointer createRequest(new CreateRequestImpl()); return createRequest; } diff --git a/pvAccessApp/server/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp index 3a526a5..9e20e9e 100644 --- a/pvAccessApp/server/responseHandlers.cpp +++ b/pvAccessApp/server/responseHandlers.cpp @@ -147,10 +147,6 @@ ServerSearchHandler::ServerSearchHandler(ServerContextImpl::shared_pointer const { } -ServerSearchHandler::~ServerSearchHandler() -{ -} - void ServerSearchHandler::handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, int8 version, int8 command, size_t payloadSize, ByteBuffer* payloadBuffer) @@ -1403,6 +1399,10 @@ void ServerMonitorRequesterImpl::send(ByteBuffer* buffer, TransportSendControl* else { Monitor::shared_pointer monitor = _channelMonitor; +if(monitor==NULL) { +std::cout << "ServerMonitorRequesterImpl::send monitor is NULL" << std::endl; +return; +} MonitorElement::shared_pointer element = monitor->poll(); if (element != NULL) { diff --git a/pvAccessApp/server/responseHandlers.h b/pvAccessApp/server/responseHandlers.h index 9cbe959..89db7ce 100644 --- a/pvAccessApp/server/responseHandlers.h +++ b/pvAccessApp/server/responseHandlers.h @@ -75,6 +75,7 @@ namespace pvAccess { ServerConnectionValidationHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Connection validation") { } + virtual ~ServerConnectionValidationHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -89,6 +90,7 @@ namespace pvAccess { ServerNoopResponse(ServerContextImpl::shared_pointer const & context, epics::pvData::String description) : AbstractServerResponseHandler(context, description) { } + virtual ~ServerNoopResponse(){} }; /** @@ -99,6 +101,7 @@ namespace pvAccess { ServerEchoHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Echo request") { } + virtual ~ServerEchoHandler(){} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -139,6 +142,7 @@ namespace pvAccess { ServerIntrospectionSearchHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Search request") { } + virtual ~ServerIntrospectionSearchHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -157,7 +161,7 @@ namespace pvAccess { static std::map > s_channelNameToProvider; ServerSearchHandler(ServerContextImpl::shared_pointer const & context); - virtual ~ServerSearchHandler(); + virtual ~ServerSearchHandler(){} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -175,6 +179,7 @@ namespace pvAccess { { public: ServerChannelFindRequesterImpl(ServerContextImpl::shared_pointer const & context, epics::pvData::int32 expectedResponseCount); + virtual ~ServerChannelFindRequesterImpl(){} void clear(); ServerChannelFindRequesterImpl* set(epics::pvData::String _name, epics::pvData::int32 searchSequenceId, epics::pvData::int32 cid, osiSockAddr* sendTo, bool responseRequired); void channelFindResult(const epics::pvData::Status& status, ChannelFind::shared_pointer const & channelFind, bool wasFound); @@ -205,6 +210,7 @@ namespace pvAccess { AbstractServerResponseHandler(context, "Create channel request") { _providers = context->getChannelProviders(); } + virtual ~ServerCreateChannelHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -226,6 +232,7 @@ namespace pvAccess { protected: ServerChannelRequesterImpl(Transport::shared_pointer const & transport, const epics::pvData::String channelName, const pvAccessID cid); public: + virtual ~ServerChannelRequesterImpl() {} static ChannelRequester::shared_pointer create(ChannelProvider::shared_pointer const & provider, Transport::shared_pointer const & transport, const epics::pvData::String channelName, const pvAccessID cid); void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel); void channelStateChange(Channel::shared_pointer const & c, const Channel::ConnectionState isConnected); @@ -254,6 +261,7 @@ namespace pvAccess { ServerDestroyChannelHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Destroy channel request") { } + virtual ~ServerDestroyChannelHandler(){} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -267,6 +275,7 @@ namespace pvAccess { ServerDestroyChannelHandlerTransportSender(pvAccessID cid, pvAccessID sid): _cid(cid), _sid(sid) { } + virtual ~ServerDestroyChannelHandlerTransportSender() {} void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control) { control->startMessage((epics::pvData::int8)CMD_DESTROY_CHANNEL, 2*sizeof(epics::pvData::int32)/sizeof(epics::pvData::int8)); buffer->putInt(_sid); @@ -296,6 +305,7 @@ namespace pvAccess { ServerGetHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Get request") { } + virtual ~ServerGetHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -321,6 +331,7 @@ namespace pvAccess { ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport, epics::pvData::PVStructure::shared_pointer const & pvRequest); + virtual ~ServerChannelGetRequesterImpl() {} void channelGetConnect(const epics::pvData::Status& status, ChannelGet::shared_pointer const & channelGet, epics::pvData::PVStructure::shared_pointer const & pvStructure, epics::pvData::BitSet::shared_pointer const & bitSet); void getDone(const epics::pvData::Status& status); @@ -349,6 +360,7 @@ namespace pvAccess { ServerPutHandler(ServerContextImpl::shared_pointer context) : AbstractServerResponseHandler(context, "Put request") { } + virtual ~ServerPutHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -374,6 +386,7 @@ namespace pvAccess { ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport,epics::pvData::PVStructure::shared_pointer const & pvRequest); + virtual ~ServerChannelPutRequesterImpl() {} void channelPutConnect(const epics::pvData::Status& status, ChannelPut::shared_pointer const & channelPut, epics::pvData::PVStructure::shared_pointer const & pvStructure, epics::pvData::BitSet::shared_pointer const & bitSet); void putDone(const epics::pvData::Status& status); void getDone(const epics::pvData::Status& status); @@ -403,6 +416,7 @@ namespace pvAccess { AbstractServerResponseHandler(context, "Put-get request") { } + virtual ~ServerPutGetHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer); @@ -426,6 +440,7 @@ namespace pvAccess { static ChannelPutGetRequester::shared_pointer create(ServerContextImpl::shared_pointer const & context, ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport,epics::pvData::PVStructure::shared_pointer const & pvRequest); + virtual ~ServerChannelPutGetRequesterImpl() {} void channelPutGetConnect(const epics::pvData::Status& status, ChannelPutGet::shared_pointer const & channelPutGet, epics::pvData::PVStructure::shared_pointer const & pvPutStructure, epics::pvData::PVStructure::shared_pointer const & pvGetStructure); void getGetDone(const epics::pvData::Status& status); @@ -456,6 +471,7 @@ namespace pvAccess { ServerMonitorHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Monitor request") { } + virtual ~ServerMonitorHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -481,6 +497,7 @@ namespace pvAccess { static epics::pvData::MonitorRequester::shared_pointer create(ServerContextImpl::shared_pointer const & context, ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport,epics::pvData::PVStructure::shared_pointer const & pvRequest); + virtual ~ServerMonitorRequesterImpl(){} void monitorConnect(const epics::pvData::Status& status, epics::pvData::Monitor::shared_pointer const & monitor, epics::pvData::StructureConstPtr const & structure); void unlisten(epics::pvData::Monitor::shared_pointer const & monitor); @@ -508,6 +525,7 @@ namespace pvAccess { ServerArrayHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Array request") { } + virtual ~ServerArrayHandler(){} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -532,6 +550,7 @@ namespace pvAccess { static ChannelArrayRequester::shared_pointer create(ServerContextImpl::shared_pointer const & context, ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport,epics::pvData::PVStructure::shared_pointer const & pvRequest); + virtual ~ServerChannelArrayRequesterImpl() {} void channelArrayConnect(const epics::pvData::Status& status, ChannelArray::shared_pointer const & channelArray, epics::pvData::PVArray::shared_pointer const & pvArray); void getArrayDone(const epics::pvData::Status& status); @@ -562,6 +581,7 @@ namespace pvAccess { ServerCancelRequestHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Cancel request") { } + virtual ~ServerCancelRequestHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -582,6 +602,7 @@ namespace pvAccess { ServerProcessHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Process request") { } + virtual ~ServerProcessHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -606,6 +627,7 @@ namespace pvAccess { static ChannelProcessRequester::shared_pointer create(ServerContextImpl::shared_pointer const & context, ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport, epics::pvData::PVStructure::shared_pointer const & pvRequest); + virtual ~ServerChannelProcessRequesterImpl() {} void channelProcessConnect(const epics::pvData::Status& status, ChannelProcess::shared_pointer const & channelProcess); void processDone(const epics::pvData::Status& status); @@ -631,6 +653,7 @@ namespace pvAccess { ServerGetFieldHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "Get field request") { } + virtual ~ServerGetFieldHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -653,6 +676,7 @@ namespace pvAccess { ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport); + virtual ~ServerGetFieldRequesterImpl() {} void getDone(const epics::pvData::Status& status, epics::pvData::FieldConstPtr const & field); void lock(); void unlock(); @@ -670,6 +694,7 @@ namespace pvAccess { _ioid(ioid), _status(status), _transport(transport) { } + virtual ~ServerGetFieldHandlerTransportSender() {} void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control) { control->startMessage((epics::pvData::int8)CMD_GET_FIELD, sizeof(epics::pvData::int32)/sizeof(epics::pvData::int8)); @@ -703,6 +728,7 @@ namespace pvAccess { ServerRPCHandler(ServerContextImpl::shared_pointer const & context) : AbstractServerResponseHandler(context, "RPC request") { } + virtual ~ServerRPCHandler() {} virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command, @@ -727,6 +753,7 @@ namespace pvAccess { static ChannelRPCRequester::shared_pointer create(ServerContextImpl::shared_pointer const & context, ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport,epics::pvData::PVStructure::shared_pointer const & pvRequest); + virtual ~ServerChannelRPCRequesterImpl() {} void channelRPCConnect(const epics::pvData::Status& status, ChannelRPC::shared_pointer const & channelRPC); void requestDone(const epics::pvData::Status& status, epics::pvData::PVStructure::shared_pointer const & pvResponse); diff --git a/testApp/client/testCreateRequest.cpp b/testApp/client/testCreateRequest.cpp index cc79a53..e20172f 100644 --- a/testApp/client/testCreateRequest.cpp +++ b/testApp/client/testCreateRequest.cpp @@ -15,62 +15,46 @@ using namespace epics::pvData; using namespace epics::pvAccess; -class RequesterImpl : public Requester, - public std::tr1::enable_shared_from_this -{ -public: - - virtual String getRequesterName() - { - return "RequesterImpl"; - }; - - virtual void message(String const & message,MessageType messageType) - { - std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl; - } -}; void testCreateRequest() { printf("testCreateRequest... \n"); - Requester::shared_pointer requester(new RequesterImpl()); - CreateRequest::shared_pointer createRequest = getCreateRequest(); + CreateRequest::shared_pointer createRequest = CreateRequest::create(); String out; String request = ""; - std::cout << std::endl << String("request") <createRequest(request,requester); + std::cout << std::endl << String("request") <createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; request = "record[process=true]field(alarm,timeStamp)putField(synput:a,synput:b,stnput:c)"; std::cout << std::endl << String("request") <createRequest(request,requester); +pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; request = "alarm,timeStamp,power.value"; std::cout << std::endl << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; request = "record[process=true]field(alarm,timeStamp,power.value)"; std::cout << std::endl << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; request = "record[process=true]field(alarm,timeStamp[algorithm=onChange,causeMonitor=false],power{value,alarm})"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; request = "record[process=true,xxx=yyy]field(alarm,timeStamp[shareData=true],power.value)"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; @@ -79,7 +63,7 @@ out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; + "getField(alarm,timeStamp,power{value,alarm}," + "current{value,alarm},voltage{value,alarm})"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; @@ -88,7 +72,7 @@ out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; + "1{voltage.value,current.value,power.value}" + "})"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; @@ -100,21 +84,22 @@ out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; + "ps1{alarm,timeStamp,power{value,alarm},current{value,alarm},voltage{value,alarm}}" + ")"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; request = "a{b{c{d}}}"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; request = "record[process=true,xxx=yyy]field(alarm,timeStamp[shareData=true],power.value"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()==NULL); + std::cout << "reason " << createRequest->getMessage() << std::endl; request = String("record[process=true,xxx=yyy]") + "putField(power.value)" + "getField(alarm,timeStamp,power{value,alarm}," @@ -124,13 +109,15 @@ out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; + ")"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()==NULL); + std::cout << "reason " << createRequest->getMessage() << std::endl; request = "record[process=true,power.value"; std::cout << String("request") <createRequest(request,requester); + pvRequest = createRequest->createRequest(request); assert(pvRequest.get()==NULL); + std::cout << "reason " << createRequest->getMessage() << std::endl; } int main() diff --git a/testApp/remote/eget.cpp b/testApp/remote/eget.cpp index 5226e50..bc0d91e 100644 --- a/testApp/remote/eget.cpp +++ b/testApp/remote/eget.cpp @@ -1653,7 +1653,7 @@ int main (int argc, char *argv[]) } PVStructure::shared_pointer pvRequest = - getCreateRequest()->createRequest(request, requester); + CreateRequest::create()->createRequest(request); if(pvRequest.get()==0) { fprintf(stderr, "failed to parse request string\n"); return 1; @@ -1724,7 +1724,7 @@ int main (int argc, char *argv[]) { // fallback to structure mode = StructureMode; - pvRequest = getCreateRequest()->createRequest("field()", requester); + pvRequest = CreateRequest::create()->createRequest("field()"); } } @@ -1840,9 +1840,8 @@ int main (int argc, char *argv[]) // simply empty PVStructure::shared_pointer pvRequest = - getCreateRequest()->createRequest( - !pvRequestProvidedByUser ? DEFAULT_RPC_REQUEST : request, - requester + CreateRequest::create()->createRequest( + !pvRequestProvidedByUser ? DEFAULT_RPC_REQUEST : request ); if(pvRequest.get()==NULL) { fprintf(stderr, "failed to parse request string\n"); diff --git a/testApp/remote/pvget.cpp b/testApp/remote/pvget.cpp index ff6f627..77b6b2b 100644 --- a/testApp/remote/pvget.cpp +++ b/testApp/remote/pvget.cpp @@ -425,7 +425,7 @@ int main (int argc, char *argv[]) { Requester::shared_pointer requester(new RequesterImpl("pvget")); - PVStructure::shared_pointer pvRequest = getCreateRequest()->createRequest(request, requester); + PVStructure::shared_pointer pvRequest = CreateRequest::create()->createRequest(request); if(pvRequest.get()==NULL) { fprintf(stderr, "failed to parse request string\n"); return 1; @@ -480,7 +480,7 @@ int main (int argc, char *argv[]) { // fallback to structure mode = StructureMode; - pvRequest = getCreateRequest()->createRequest("field()", requester); + pvRequest = CreateRequest::create()->createRequest("field()"); } } diff --git a/testApp/remote/pvput.cpp b/testApp/remote/pvput.cpp index 491e3d8..8d81cc2 100644 --- a/testApp/remote/pvput.cpp +++ b/testApp/remote/pvput.cpp @@ -848,7 +848,7 @@ int main (int argc, char *argv[]) Requester::shared_pointer requester(new RequesterImpl("pvput")); - PVStructure::shared_pointer pvRequest = getCreateRequest()->createRequest(request, requester); + PVStructure::shared_pointer pvRequest = CreateRequest::create()->createRequest(request); if(pvRequest.get()==NULL) { fprintf(stderr, "failed to parse request string\n"); return 1; diff --git a/testApp/remote/testGetPerformance.cpp b/testApp/remote/testGetPerformance.cpp index 82167a9..214ce11 100644 --- a/testApp/remote/testGetPerformance.cpp +++ b/testApp/remote/testGetPerformance.cpp @@ -465,7 +465,7 @@ int main (int argc, char *argv[]) // typedef enum {logLevelInfo, logLevelDebug, logLevelError, errlogFatal} errlogSevEnum; SET_LOG_LEVEL(logLevelError); - pvRequest = getCreateRequest()->createRequest(request,requester); + pvRequest = CreateRequest::create()->createRequest(request); if (pvRequest.get() == 0) { printf("failed to parse request string\n"); return 1; diff --git a/testApp/remote/testRemoteClientImpl.cpp b/testApp/remote/testRemoteClientImpl.cpp index 6a2bf2e..6161fd9 100644 --- a/testApp/remote/testRemoteClientImpl.cpp +++ b/testApp/remote/testRemoteClientImpl.cpp @@ -486,7 +486,7 @@ int main() { ChannelGetRequester::shared_pointer channelGetRequesterImpl(new ChannelGetRequesterImpl()); - PVStructure::shared_pointer pvRequest = getCreateRequest()->createRequest("field()",channelGetRequesterImpl); + PVStructure::shared_pointer pvRequest = CreateRequest::create()->createRequest("field()"); ChannelGet::shared_pointer channelGet = channel->createChannelGet(channelGetRequesterImpl, pvRequest); epicsThreadSleep ( 3.0 ); channelGet->get(false); @@ -496,7 +496,7 @@ int main() { ChannelPutRequester::shared_pointer channelPutRequesterImpl(new ChannelPutRequesterImpl()); - PVStructure::shared_pointer pvRequest = getCreateRequest()->createRequest("field(value,timeStamp)",channelPutRequesterImpl); + PVStructure::shared_pointer pvRequest = CreateRequest::create()->createRequest("field(value,timeStamp)"); ChannelPut::shared_pointer channelPut = channel->createChannelPut(channelPutRequesterImpl, pvRequest); epicsThreadSleep ( 1.0 ); channelPut->get(); @@ -508,7 +508,7 @@ int main() { ChannelPutGetRequester::shared_pointer channelPutGetRequesterImpl(new ChannelPutGetRequesterImpl()); - PVStructure::shared_pointer pvRequest = getCreateRequest()->createRequest("putField(value,timeStamp)getField(timeStamp)",channelPutGetRequesterImpl); + PVStructure::shared_pointer pvRequest = CreateRequest::create()->createRequest("putField(value,timeStamp)getField(timeStamp)"); ChannelPutGet::shared_pointer channelPutGet = channel->createChannelPutGet(channelPutGetRequesterImpl, pvRequest); epicsThreadSleep ( 1.0 ); channelPutGet->getGet(); @@ -522,7 +522,7 @@ int main() { ChannelRPCRequester::shared_pointer channelRPCRequesterImpl(new ChannelRPCRequesterImpl()); - PVStructure::shared_pointer pvRequest = getCreateRequest()->createRequest("record[]field(arguments)",channelRPCRequesterImpl); + PVStructure::shared_pointer pvRequest = CreateRequest::create()->createRequest("record[]field(arguments)"); ChannelRPC::shared_pointer channelRPC = channel->createChannelRPC(channelRPCRequesterImpl, pvRequest); epicsThreadSleep ( 1.0 ); // for test simply use pvRequest as arguments @@ -550,7 +550,7 @@ int main() { MonitorRequester::shared_pointer monitorRequesterImpl(new MonitorRequesterImpl()); - PVStructure::shared_pointer pvRequest = getCreateRequest()->createRequest("field()",monitorRequesterImpl); + PVStructure::shared_pointer pvRequest = CreateRequest::create()->createRequest("field()"); Monitor::shared_pointer monitor = channel->createMonitor(monitorRequesterImpl, pvRequest); epicsThreadSleep( 1.0 );