12 #include <epicsThread.h> 13 #include <pv/serverContext.h> 14 #include <pv/syncChannelFind.h> 15 #include <pv/pvTimeStamp.h> 16 #include <pv/rpcService.h> 17 #include <pv/timeStamp.h> 19 #define epicsExportSharedSymbols 27 using std::tr1::static_pointer_cast;
28 using std::tr1::dynamic_pointer_cast;
33 namespace epics {
namespace pvDatabase {
35 static string providerName(
"local");
38 class LocalChannelProviderFactory :
public ChannelProviderFactory
41 POINTER_DEFINITIONS(LocalChannelProviderFactory);
42 virtual string getFactoryName() {
return providerName;}
43 virtual ChannelProvider::shared_pointer sharedInstance()
46 return channelProvider;
48 virtual ChannelProvider::shared_pointer newInstance()
50 throw std::logic_error(
51 "LocalChannelProviderFactory::newInstance() not Implemented");
58 static int firstTime = 1;
61 ChannelProviderFactory::shared_pointer factory(
62 new LocalChannelProviderFactory());
63 ChannelProviderRegistry::servers()->add(factory);
65 ChannelProvider::shared_pointer channelProvider =
66 ChannelProviderRegistry::servers()->getProvider(providerName);
70 ChannelProviderLocal::ChannelProviderLocal()
75 cout <<
"ChannelProviderLocal::ChannelProviderLocal()\n";
82 cout <<
"ChannelProviderLocal::~ChannelProviderLocal()\n";
88 return shared_from_this();
97 string const & channelName,
98 ChannelFindRequester::shared_pointer
const &channelFindRequester)
101 cout <<
"ChannelProviderLocal::channelFind " <<
"channelName" << endl;
105 Status notFoundStatus(Status::STATUSTYPE_ERROR,
"pvDatabase was deleted");
106 channelFindRequester->channelFindResult(
111 PVRecordPtr pvRecord = pvdb->findRecord(channelName);
113 channelFindRequester->channelFindResult(
119 Status notFoundStatus(Status::STATUSTYPE_ERROR,
"pv not found");
120 channelFindRequester->channelFindResult(
125 return shared_from_this();
129 ChannelListRequester::shared_pointer
const & channelListRequester)
132 cout <<
"ChannelProviderLocal::channelList\n";
135 if(!pvdb)
throw std::logic_error(
"pvDatabase was deleted");
136 PVStringArrayPtr records(pvdb->getRecordNames());
137 channelListRequester->channelListResult(
138 Status::Ok, shared_from_this(), records->view(),
false);
139 return shared_from_this();
143 string const & channelName,
144 ChannelRequester::shared_pointer
const &channelRequester,
148 cout <<
"ChannelProviderLocal::createChannel " <<
"channelName" << endl;
151 Status status = Status::Ok;
154 status = Status::error(
"pvDatabase was deleted");
156 PVRecordPtr pvRecord = pvdb->findRecord(channelName);
159 shared_from_this(),channelRequester,pvRecord));
160 pvRecord->addPVRecordClient(channel);
162 status = Status::error(
"pv not found");
165 channelRequester->channelCreated(status,channel);
170 string const & channelName,
171 ChannelRequester::shared_pointer
const &channelRequester,
173 string const &address)
175 if(!address.empty())
throw std::invalid_argument(
"address not allowed for local implementation");
176 return createChannel(channelName, channelRequester, priority);
epicsShareFunc ChannelProviderLocalPtr getChannelProviderLocal()
virtual ~ChannelProviderLocal()
Destructor.
std::tr1::shared_ptr< ChannelLocal > ChannelLocalPtr
std::tr1::shared_ptr< PVDatabase > PVDatabasePtr
virtual std::tr1::shared_ptr< ChannelProvider > getChannelProvider()
ChannelFind method.
std::tr1::shared_ptr< ChannelProviderLocal > ChannelProviderLocalPtr
Channel for accessing a PVRecord.
The interface for a database of PVRecords.
virtual epics::pvAccess::ChannelFind::shared_pointer channelFind(std::string const &channelName, epics::pvAccess::ChannelFindRequester::shared_pointer const &channelFindRequester)
Returns either a null channelFind or a channelFind for records in the PVDatabase. ...
std::tr1::shared_ptr< PVRecord > PVRecordPtr
ChannelProvider for PVDatabase.
virtual std::string getProviderName()
Returns the channel provider name.
virtual epics::pvAccess::ChannelFind::shared_pointer channelList(epics::pvAccess::ChannelListRequester::shared_pointer const &channelListRequester)
Calls method channelListRequester::channelListResult.
virtual epics::pvAccess::Channel::shared_pointer createChannel(std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority)
Create a channel for a record.