CreateRequest no longer derives from Requester; In responseHandlers all destructors are virtual.
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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()");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user