pvDatabaseCPP  4.7.0
channelProviderLocal.h
Go to the documentation of this file.
1 /* channelProviderLocal.h */
11 #ifndef CHANNELPROVIDERLOCAL_H
12 #define CHANNELPROVIDERLOCAL_H
13 
14 #include <string>
15 #include <cstring>
16 #include <stdexcept>
17 #include <memory>
18 #include <set>
19 
20 #include <pv/lock.h>
21 #include <pv/pvType.h>
22 #include <pv/pvData.h>
23 #include <pv/pvAccess.h>
24 #include <pv/status.h>
25 #include <pv/serverContext.h>
26 #include <pv/pvStructureCopy.h>
27 #include <pv/pvDatabase.h>
28 
29 #include <shareLib.h>
30 #include <asLib.h>
31 
32 namespace epics { namespace pvDatabase {
33 
35 typedef std::tr1::shared_ptr<ChannelProviderLocal> ChannelProviderLocalPtr;
36 typedef std::tr1::weak_ptr<ChannelProviderLocal> ChannelProviderLocalWPtr;
38 typedef std::tr1::shared_ptr<ChannelLocal> ChannelLocalPtr;
39 typedef std::tr1::weak_ptr<ChannelLocal> ChannelLocalWPtr;
40 
41 
42 epicsShareFunc epics::pvData::MonitorPtr createMonitorLocal(
43  PVRecordPtr const & pvRecord,
44  epics::pvData::MonitorRequester::shared_pointer const & monitorRequester,
45  epics::pvData::PVStructurePtr const & pvRequest);
46 
47 epicsShareFunc ChannelProviderLocalPtr getChannelProviderLocal();
48 
49 
55 class epicsShareClass ChannelProviderLocal :
56  public epics::pvAccess::ChannelProvider,
57  public epics::pvAccess::ChannelFind,
58  public std::tr1::enable_shared_from_this<ChannelProviderLocal>
59 {
60 public:
61  POINTER_DEFINITIONS(ChannelProviderLocal);
68  static void initAs(const std::string& filePath, const std::string& substitutions="");
73  static bool isAsActive();
74 
82  virtual ~ChannelProviderLocal();
88  virtual std::string getProviderName();
102  virtual epics::pvAccess::ChannelFind::shared_pointer channelFind(
103  std::string const &channelName,
104  epics::pvAccess::ChannelFindRequester::shared_pointer const & channelFindRequester);
114  virtual epics::pvAccess::ChannelFind::shared_pointer channelList(
115  epics::pvAccess::ChannelListRequester::shared_pointer const & channelListRequester);
125  virtual epics::pvAccess::Channel::shared_pointer createChannel(
126  std::string const &channelName,
127  epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester,
128  short priority);
142  virtual epics::pvAccess::Channel::shared_pointer createChannel(
143  std::string const &channelName,
144  epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester,
145  short priority,
146  std::string const &address);
151  int getTraceLevel() {return traceLevel;}
156  void setTraceLevel(int level) {traceLevel = level;}
162  virtual std::tr1::shared_ptr<ChannelProvider> getChannelProvider();
167  virtual void cancel() {}
168 private:
169  friend epicsShareFunc ChannelProviderLocalPtr getChannelProviderLocal();
170  PVDatabaseWPtr pvDatabase;
171  int traceLevel;
172  friend class ChannelProviderLocalRun;
173 };
174 
175 
182 class epicsShareClass ChannelLocal :
183  public epics::pvAccess::Channel,
184  public PVRecordClient,
185  public std::tr1::enable_shared_from_this<ChannelLocal>
186 {
187 public:
188  POINTER_DEFINITIONS(ChannelLocal);
194  ChannelLocal(
195  ChannelProviderLocalPtr const &channelProvider,
196  epics::pvAccess::ChannelRequester::shared_pointer const & requester,
197  PVRecordPtr const & pvRecord
198  );
202  virtual ~ChannelLocal();
209  virtual void detach(PVRecordPtr const &pvRecord);
214  virtual std::string getRequesterName();
220  virtual void message(
221  std::string const & message,
222  epics::pvData::MessageType messageType);
227  virtual epics::pvAccess::ChannelProvider::shared_pointer getProvider();
232  virtual std::string getRemoteAddress();
237  virtual epics::pvAccess::Channel::ConnectionState getConnectionState();
242  virtual std::string getChannelName();
247  virtual epics::pvAccess::ChannelRequester::shared_pointer getChannelRequester();
252  virtual bool isConnected();
262  virtual void getField(
263  epics::pvAccess::GetFieldRequester::shared_pointer const &requester,
264  std::string const & subField);
270  virtual epics::pvAccess::AccessRights getAccessRights(
271  epics::pvData::PVField::shared_pointer const &pvField);
280  virtual epics::pvAccess::ChannelProcess::shared_pointer createChannelProcess(
281  epics::pvAccess::ChannelProcessRequester::shared_pointer const &requester,
282  epics::pvData::PVStructurePtr const &pvRequest);
291  virtual epics::pvAccess::ChannelGet::shared_pointer createChannelGet(
292  epics::pvAccess::ChannelGetRequester::shared_pointer const &requester,
293  epics::pvData::PVStructurePtr const &pvRequest);
302  virtual epics::pvAccess::ChannelPut::shared_pointer createChannelPut(
303  epics::pvAccess::ChannelPutRequester::shared_pointer const &requester,
304  epics::pvData::PVStructurePtr const &pvRequest);
313  virtual epics::pvAccess::ChannelPutGet::shared_pointer createChannelPutGet(
314  epics::pvAccess::ChannelPutGetRequester::shared_pointer const &requester,
315  epics::pvData::PVStructurePtr const &pvRequest);
324  virtual epics::pvAccess::ChannelRPC::shared_pointer createChannelRPC(
325  epics::pvAccess::ChannelRPCRequester::shared_pointer const &requester,
326  epics::pvData::PVStructurePtr const &pvRequest);
335  virtual epics::pvData::Monitor::shared_pointer createMonitor(
336  epics::pvData::MonitorRequester::shared_pointer const &requester,
337  epics::pvData::PVStructurePtr const &pvRequest);
346  virtual epics::pvAccess::ChannelArray::shared_pointer createChannelArray(
347  epics::pvAccess::ChannelArrayRequester::shared_pointer const &requester,
348  epics::pvData::PVStructurePtr const &pvRequest);
352  virtual void printInfo();
358  virtual void printInfo(std::ostream& out);
364  virtual bool canWrite();
370  virtual bool canRead();
371 protected:
372  shared_pointer getPtrSelf()
373  {
374  return shared_from_this();
375  }
376 private:
377  epics::pvAccess::ChannelRequester::shared_pointer requester;
378  ChannelProviderLocalWPtr provider;
379  PVRecordWPtr pvRecord;
380  epics::pvData::Mutex mutex;
381 
382  // AS-specific variables/methods
383  std::vector<char> toCharArray(const std::string& s);
384  std::vector<char> getAsGroup(const PVRecordPtr& pvRecord);
385  std::vector<char> getAsUser(const epics::pvAccess::ChannelRequester::shared_pointer& requester);
386  std::vector<char> getAsHost(const epics::pvAccess::ChannelRequester::shared_pointer& requester);
387 
388  int asLevel;
389  std::vector<char> asGroup;
390  std::vector<char> asUser;
391  std::vector<char> asHost;
392  ASMEMBERPVT asMemberPvt;
393  ASCLIENTPVT asClientPvt;
394 };
395 
396 }}
397 #endif /* CHANNELPROVIDERLOCAL_H */
epicsShareFunc ChannelProviderLocalPtr getChannelProviderLocal()
std::tr1::weak_ptr< PVDatabase > PVDatabaseWPtr
Definition: pvDatabase.h:45
std::tr1::shared_ptr< ChannelLocal > ChannelLocalPtr
int getTraceLevel()
get trace level (0,1,2) means (nothing,lifetime,process)
std::tr1::weak_ptr< ChannelLocal > ChannelLocalWPtr
epicsShareFunc epics::pvData::MonitorPtr createMonitorLocal(PVRecordPtr const &pvRecord, epics::pvData::MonitorRequester::shared_pointer const &monitorRequester, epics::pvData::PVStructurePtr const &pvRequest)
std::tr1::shared_ptr< ChannelProviderLocal > ChannelProviderLocalPtr
Channel for accessing a PVRecord.
An interface implemented by code that accesses the record.
Definition: pvDatabase.h:437
std::tr1::shared_ptr< PVRecord > PVRecordPtr
Definition: pvDatabase.h:21
std::tr1::weak_ptr< PVRecord > PVRecordWPtr
Definition: pvDatabase.h:23
ChannelProvider for PVDatabase.
void setTraceLevel(int level)
set trace level (0,1,2) means (nothing,lifetime,process)
virtual void cancel()
ChannelFind method.
std::tr1::weak_ptr< ChannelProviderLocal > ChannelProviderLocalWPtr