ChannelProvider::createChannel() optional ChannelRequester
This commit is contained in:
@@ -284,12 +284,12 @@ void CAChannel::activate(short priority)
|
||||
channelProvider->registerChannel(shared_from_this());
|
||||
|
||||
// TODO be sure that ca_connection_handler is not called before this call
|
||||
EXCEPTION_GUARD(channelRequester->channelCreated(Status::Ok, shared_from_this()));
|
||||
channelRequester->channelCreated(Status::Ok, shared_from_this());
|
||||
}
|
||||
else
|
||||
{
|
||||
Status errorStatus(Status::STATUSTYPE_ERROR, string(ca_message(result)));
|
||||
EXCEPTION_GUARD(channelRequester->channelCreated(errorStatus, shared_from_this()));
|
||||
channelRequester->channelCreated(errorStatus, shared_from_this());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1023,6 +1023,16 @@ public:
|
||||
virtual void channelStateChange(Channel::shared_pointer const & channel, Channel::ConnectionState connectionState) = 0;
|
||||
};
|
||||
|
||||
//! Used when ChannelProvider::createChannel() is passed a NULL ChannelRequester
|
||||
struct epicsShareClass DefaultChannelRequester : public ChannelRequester
|
||||
{
|
||||
virtual ~DefaultChannelRequester() {}
|
||||
virtual std::string getRequesterName();
|
||||
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel);
|
||||
virtual void channelStateChange(Channel::shared_pointer const & channel, Channel::ConnectionState connectionState);
|
||||
static ChannelRequester::shared_pointer build();
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The FlushStrategy enum
|
||||
*/
|
||||
@@ -1087,8 +1097,9 @@ public:
|
||||
/**
|
||||
* See longer form
|
||||
*/
|
||||
virtual Channel::shared_pointer createChannel(std::string const & name,ChannelRequester::shared_pointer const & requester,
|
||||
short priority = PRIORITY_DEFAULT);
|
||||
virtual Channel::shared_pointer createChannel(std::string const & name,
|
||||
ChannelRequester::shared_pointer const & requester = DefaultChannelRequester::build(),
|
||||
short priority = PRIORITY_DEFAULT);
|
||||
|
||||
/**
|
||||
* Request a Channel.
|
||||
|
||||
@@ -100,5 +100,26 @@ ChannelArray::shared_pointer Channel::createChannelArray(
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::string DefaultChannelRequester::getRequesterName() { return "DefaultChannelRequester"; }
|
||||
|
||||
void DefaultChannelRequester::channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
||||
{
|
||||
if(!status.isSuccess()) {
|
||||
std::ostringstream strm;
|
||||
status.dump(strm);
|
||||
throw std::runtime_error(strm.str());
|
||||
}
|
||||
}
|
||||
|
||||
void DefaultChannelRequester::channelStateChange(Channel::shared_pointer const & channel, Channel::ConnectionState connectionState)
|
||||
{ /* no-op */ }
|
||||
|
||||
ChannelRequester::shared_pointer DefaultChannelRequester::build()
|
||||
{
|
||||
ChannelRequester::shared_pointer ret(new DefaultChannelRequester);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user