add more support for no block; removed extra create methods for put and get

This commit is contained in:
mrkraimer
2017-09-08 14:22:50 -04:00
parent 97d9dc2034
commit 4606d84185
8 changed files with 297 additions and 154 deletions
+9 -32
View File
@@ -77,7 +77,7 @@ PvaClientGetPtr PvaClientGet::create(
PVStructurePtr const &pvRequest)
{
if(PvaClient::getDebug()) {
cout<< "PvaClientGet::create(pvaClient,channelName,providerName,pvRequest)\n"
cout<< "PvaClientGet::create(pvaClient,channelName,pvRequest)\n"
<< " channelName " << pvaClientChannel->getChannel()->getChannelName()
<< " pvRequest " << pvRequest
<< endl;
@@ -88,35 +88,6 @@ PvaClientGetPtr PvaClientGet::create(
return clientGet;
}
PvaClientGetPtr PvaClientGet::create(
PvaClientPtr const &pvaClient,
std::string const & channelName,
std::string const & providerName,
std::string const & request,
PvaClientChannelStateChangeRequesterPtr const & stateChangeRequester,
PvaClientGetRequesterPtr const & getRequester)
{
if(PvaClient::getDebug()) {
cout<< "PvaClientGet::create(pvaClient,channelName,providerName,request,stateChangeRequester,getRequester)\n"
<< " channelName " << channelName
<< " providerName " << providerName
<< " request " << request
<< endl;
}
CreateRequest::shared_pointer createRequest(CreateRequest::create());
PVStructurePtr pvRequest(createRequest->createRequest(request));
if(!pvRequest) throw std::runtime_error(createRequest->getMessage());
PvaClientChannelPtr pvaClientChannel = pvaClient->createChannel(channelName,providerName);
PvaClientGetPtr clientGet(new PvaClientGet(pvaClient,pvaClientChannel,pvRequest));
clientGet->channelGetRequester = ChannelGetRequesterImplPtr(
new ChannelGetRequesterImpl(clientGet,pvaClient));
if(stateChangeRequester) clientGet->pvaClientChannelStateChangeRequester = stateChangeRequester;
if(getRequester) clientGet->pvaClientGetRequester = getRequester;
pvaClientChannel->setStateChangeRequester(clientGet);
pvaClientChannel->issueConnect();
return clientGet;
}
PvaClientGet::PvaClientGet(
PvaClientPtr const &pvaClient,
PvaClientChannelPtr const & pvaClientChannel,
@@ -141,7 +112,6 @@ PvaClientGet::~PvaClientGet()
<< " channelName " << pvaClientChannel->getChannel()->getChannelName()
<< endl;
}
if(channelGet) channelGet->destroy();
}
void PvaClientGet::channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected)
@@ -184,7 +154,6 @@ void PvaClientGet::checkGetState()
+ channelGetConnectStatus.getMessage();
throw std::runtime_error(message);
}
if(getState==getIdle) get();
}
// from ChannelGetRequester
@@ -253,6 +222,7 @@ void PvaClientGet::getDone(
{
Lock xx(mutex);
channelGetStatus = status;
getState = getComplete;
if(status.isOK()) {
pvaClientData->setData(pvStructure,bitSet);
}
@@ -362,6 +332,7 @@ Status PvaClientGet::waitGet()
{
Lock xx(mutex);
if(getState==getComplete) {
getState = getIdle;
return channelGetStatus;
}
if(getState!=getActive){
@@ -376,7 +347,13 @@ Status PvaClientGet::waitGet()
}
PvaClientGetDataPtr PvaClientGet::getData()
{
if(PvaClient::getDebug()) {
cout<< "PvaClientGet::getData"
<< " channelName " << pvaClientChannel->getChannel()->getChannelName()
<< endl;
}
checkGetState();
if(getState==getIdle) get();
return pvaClientData;
}