still working on RAII
This commit is contained in:
@@ -122,6 +122,63 @@ size_t PvaClientPutCache::cacheSize()
|
||||
|
||||
}
|
||||
|
||||
class ChannelRequesterImpl : public ChannelRequester
|
||||
{
|
||||
PvaClientChannel::weak_pointer pvaClientChannel;
|
||||
PvaClient::weak_pointer pvaClient;
|
||||
public:
|
||||
ChannelRequesterImpl(
|
||||
PvaClientChannelPtr const & pvaClientChannel,
|
||||
PvaClientPtr const &pvaClient)
|
||||
: pvaClientChannel(pvaClientChannel),
|
||||
pvaClient(pvaClient)
|
||||
{}
|
||||
virtual ~ChannelRequesterImpl() {
|
||||
if(PvaClient::getDebug()) std::cout << "~ChannelRequesterImpl" << std::endl;
|
||||
}
|
||||
|
||||
virtual std::string getRequesterName() {
|
||||
PvaClientChannelPtr clientChannel(pvaClientChannel.lock());
|
||||
if(!clientChannel) return string("clientChannel is null");
|
||||
return clientChannel->getRequesterName();
|
||||
}
|
||||
|
||||
virtual void message(std::string const & message, epics::pvData::MessageType messageType) {
|
||||
PvaClientChannelPtr clientChannel(pvaClientChannel.lock());
|
||||
if(!clientChannel) return;
|
||||
clientChannel->message(message,messageType);
|
||||
}
|
||||
|
||||
virtual void channelCreated(
|
||||
const epics::pvData::Status& status,
|
||||
Channel::shared_pointer const & channel)
|
||||
{
|
||||
PvaClientChannelPtr clientChannel(pvaClientChannel.lock());
|
||||
if(!clientChannel) return;
|
||||
clientChannel->channelCreated(status,channel);
|
||||
}
|
||||
|
||||
virtual void channelStateChange(
|
||||
Channel::shared_pointer const & channel,
|
||||
Channel::ConnectionState connectionState)
|
||||
{
|
||||
PvaClientChannelPtr clientChannel(pvaClientChannel.lock());
|
||||
if(!clientChannel) return;
|
||||
clientChannel->channelStateChange(channel,connectionState);
|
||||
}
|
||||
};
|
||||
|
||||
PvaClientChannelPtr PvaClientChannel::create(
|
||||
PvaClientPtr const &pvaClient,
|
||||
string const & channelName,
|
||||
string const & providerName)
|
||||
{
|
||||
PvaClientChannelPtr channel(new PvaClientChannel(pvaClient,channelName,providerName));
|
||||
channel->channelRequester = ChannelRequesterImplPtr(
|
||||
new ChannelRequesterImpl(channel,pvaClient));
|
||||
return channel;
|
||||
}
|
||||
|
||||
|
||||
PvaClientChannel::PvaClientChannel(
|
||||
PvaClientPtr const &pvaClient,
|
||||
@@ -282,7 +339,7 @@ void PvaClientChannel::issueConnect()
|
||||
if(!provider) {
|
||||
throw std::runtime_error(channelName + " provider " + providerName + " not registered");
|
||||
}
|
||||
ChannelRequester::shared_pointer channelRequester(shared_from_this());
|
||||
// ChannelRequester::shared_pointer channelRequester(shared_from_this());
|
||||
if(PvaClient::getDebug()) cout << "PvaClientChannel::issueConnect calling provider->createChannel\n";
|
||||
channel = provider->createChannel(channelName,channelRequester,ChannelProvider::PRIORITY_DEFAULT);
|
||||
if(!channel) {
|
||||
@@ -540,13 +597,5 @@ size_t PvaClientChannel::cacheSize()
|
||||
}
|
||||
|
||||
|
||||
PvaClientChannelPtr PvaClientChannel::create(
|
||||
PvaClientPtr const &pvaClient,
|
||||
string const & channelName,
|
||||
string const & providerName)
|
||||
{
|
||||
PvaClientChannelPtr channel(new PvaClientChannel(pvaClient,channelName,providerName));
|
||||
return channel;
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user