still working on RAII

This commit is contained in:
mrkraimer
2016-05-20 06:22:13 -04:00
parent 3920215182
commit 643fa9b40b
6 changed files with 123 additions and 139 deletions

View File

@@ -22,30 +22,67 @@ using namespace std;
namespace epics { namespace pvaClient {
class ChannelGetRequesterImpl : public ChannelGetRequester
{
PvaClientGet * pvaClientGet;
PvaClientGet::weak_pointer pvaClientGet;
PvaClient::weak_pointer pvaClient;
public:
ChannelGetRequesterImpl(PvaClientGet * pvaClientGet)
: pvaClientGet(pvaClientGet) {}
string getRequesterName()
{return pvaClientGet->getRequesterName();}
void message(string const & message,MessageType messageType)
{pvaClientGet->message(message,messageType);}
void channelGetConnect(
ChannelGetRequesterImpl(
PvaClientGetPtr const & pvaClientGet,
PvaClientPtr const &pvaClient)
: pvaClientGet(pvaClientGet),
pvaClient(pvaClient)
{}
virtual ~ChannelGetRequesterImpl() {
if(PvaClient::getDebug()) std::cout << "~ChannelGetRequesterImpl" << std::endl;
}
virtual std::string getRequesterName() {
PvaClientGetPtr clientGet(pvaClientGet.lock());
if(!clientGet) return string("clientGet is null");
return clientGet->getRequesterName();
}
virtual void message(std::string const & message, epics::pvData::MessageType messageType) {
PvaClientGetPtr clientGet(pvaClientGet.lock());
if(!clientGet) return;
clientGet->message(message,messageType);
}
virtual void channelGetConnect(
const Status& status,
ChannelGet::shared_pointer const & channelGet,
StructureConstPtr const & structure)
{pvaClientGet->channelGetConnect(status,channelGet,structure);}
void getDone(
Structure::const_shared_pointer const & structure)
{
PvaClientGetPtr clientGet(pvaClientGet.lock());
if(!clientGet) return;
clientGet->channelGetConnect(status,channelGet,structure);
}
virtual void getDone(
const Status& status,
ChannelGet::shared_pointer const & channelGet,
PVStructurePtr const & pvStructure,
BitSetPtr const & bitSet)
{pvaClientGet->getDone(status,channelGet,pvStructure,bitSet);}
BitSet::shared_pointer const & bitSet)
{
PvaClientGetPtr clientGet(pvaClientGet.lock());
if(!clientGet) return;
clientGet->getDone(status,channelGet,pvStructure,bitSet);
}
};
PvaClientGetPtr PvaClientGet::create(
PvaClientPtr const &pvaClient,
Channel::shared_pointer const & channel,
PVStructurePtr const &pvRequest)
{
PvaClientGetPtr epv(new PvaClientGet(pvaClient,channel,pvRequest));
epv->channelGetRequester = ChannelGetRequesterImplPtr(
new ChannelGetRequesterImpl(epv,pvaClient));
return epv;
}
PvaClientGet::PvaClientGet(
PvaClientPtr const &pvaClient,
Channel::shared_pointer const & channel,
@@ -166,11 +203,11 @@ void PvaClientGet::issueConnect()
+ " pvaClientGet already connected ";
throw std::runtime_error(message);
}
ChannelGetRequester::shared_pointer getRequester(shared_from_this());
// ChannelGetRequester::shared_pointer channelGetRequester(shared_from_this());
connectState = connectActive;
Channel::shared_pointer chan(channel.lock());
if(chan) {
channelGet = chan->createChannelGet(getRequester,pvRequest);
channelGet = chan->createChannelGet(channelGetRequester,pvRequest);
return;
}
throw std::runtime_error("PvaClientGet::issueConnect channel was destroyed");
@@ -257,13 +294,5 @@ PvaClientGetDataPtr PvaClientGet::getData()
return pvaClientData;
}
PvaClientGetPtr PvaClientGet::create(
PvaClientPtr const &pvaClient,
Channel::shared_pointer const & channel,
PVStructurePtr const &pvRequest)
{
PvaClientGetPtr epv(new PvaClientGet(pvaClient,channel,pvRequest));
return epv;
}
}}