12 #include <epicsThread.h> 14 #include <pv/serverContext.h> 15 #include <pv/syncChannelFind.h> 16 #include <pv/pvTimeStamp.h> 17 #include <pv/rpcService.h> 18 #include <pv/timeStamp.h> 20 #define epicsExportSharedSymbols 28 using std::tr1::static_pointer_cast;
29 using std::tr1::dynamic_pointer_cast;
34 namespace epics {
namespace pvDatabase {
36 static string providerName(
"local");
39 class LocalChannelProviderFactory :
public ChannelProviderFactory
42 POINTER_DEFINITIONS(LocalChannelProviderFactory);
43 virtual string getFactoryName() {
return providerName;}
44 virtual ChannelProvider::shared_pointer sharedInstance()
47 return channelProvider;
49 virtual ChannelProvider::shared_pointer newInstance()
51 throw std::logic_error(
52 "LocalChannelProviderFactory::newInstance() not Implemented");
59 static int firstTime = 1;
62 ChannelProviderFactory::shared_pointer factory(
63 new LocalChannelProviderFactory());
64 ChannelProviderRegistry::servers()->add(factory);
66 ChannelProvider::shared_pointer channelProvider =
67 ChannelProviderRegistry::servers()->getProvider(providerName);
71 ChannelProviderLocal::ChannelProviderLocal()
76 cout <<
"ChannelProviderLocal::ChannelProviderLocal()\n";
83 cout <<
"ChannelProviderLocal::~ChannelProviderLocal()\n";
89 return shared_from_this();
98 string const & channelName,
99 ChannelFindRequester::shared_pointer
const &channelFindRequester)
102 cout <<
"ChannelProviderLocal::channelFind " <<
"channelName" << endl;
106 Status notFoundStatus(Status::STATUSTYPE_ERROR,
"pvDatabase was deleted");
107 channelFindRequester->channelFindResult(
112 PVRecordPtr pvRecord = pvdb->findRecord(channelName);
114 channelFindRequester->channelFindResult(
120 Status notFoundStatus(Status::STATUSTYPE_ERROR,
"pv not found");
121 channelFindRequester->channelFindResult(
126 return shared_from_this();
130 ChannelListRequester::shared_pointer
const & channelListRequester)
133 cout <<
"ChannelProviderLocal::channelList\n";
136 if(!pvdb)
throw std::logic_error(
"pvDatabase was deleted");
137 PVStringArrayPtr records(pvdb->getRecordNames());
138 channelListRequester->channelListResult(
139 Status::Ok, shared_from_this(), records->view(),
false);
140 return shared_from_this();
144 string const & channelName,
145 ChannelRequester::shared_pointer
const &channelRequester,
149 cout <<
"ChannelProviderLocal::createChannel " <<
"channelName" << endl;
152 Status status = Status::Ok;
155 status = Status::error(
"pvDatabase was deleted");
157 PVRecordPtr pvRecord = pvdb->findRecord(channelName);
160 shared_from_this(),channelRequester,pvRecord));
161 pvRecord->addPVRecordClient(channel);
163 status = Status::error(
"pv not found");
166 channelRequester->channelCreated(status,channel);
171 string const & channelName,
172 ChannelRequester::shared_pointer
const &channelRequester,
174 string const &address)
176 if(!address.empty())
throw std::invalid_argument(
"address not allowed for local implementation");
177 return createChannel(channelName, channelRequester, priority);
182 int status = asInitFile(filePath.c_str(), substitutions.c_str());
184 throw std::runtime_error(
"Invalid AS configuration.");
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
static bool isAsActive()
Is access security active?
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.
static void initAs(const std::string &filePath, const std::string &substitutions="")
Initialize access security configuration.
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.