CreateRequest no longer derives from Requester; In responseHandlers all destructors are virtual.

This commit is contained in:
Marty Kraimer
2013-10-31 06:23:33 -04:00
parent 001185070e
commit 530a96746b
10 changed files with 124 additions and 98 deletions

View File

@@ -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 */

View File

@@ -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;
}

View File

@@ -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)
{

View File

@@ -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<epics::pvData::String, std::tr1::weak_ptr<ChannelProvider> > 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);

View File

@@ -15,62 +15,46 @@
using namespace epics::pvData;
using namespace epics::pvAccess;
class RequesterImpl : public Requester,
public std::tr1::enable_shared_from_this<RequesterImpl>
{
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") <<std::endl << request <<std::endl;
epics::pvData::PVStructure::shared_pointer pvRequest = getCreateRequest()->createRequest(request,requester);
std::cout << std::endl << String("request") <<std::endl << request <<std::endl;
PVStructurePtr pvRequest = createRequest->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
std::cout << std::endl << "Error Expected for next call!!" << std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
std::cout << std::endl << "Error Expected for next call!!" << std::endl;
pvRequest = getCreateRequest()->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") <<std::endl << request <<std::endl;
std::cout << std::endl << "Error Expected for next call!!" << std::endl;
pvRequest = getCreateRequest()->createRequest(request,requester);
pvRequest = createRequest->createRequest(request);
assert(pvRequest.get()==NULL);
std::cout << "reason " << createRequest->getMessage() << std::endl;
}
int main()

View File

@@ -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");

View File

@@ -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()");
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 );