13 #ifdef epicsExportSharedSymbols 14 # define pvAccessEpicsExportSharedSymbols 15 # undef epicsExportSharedSymbols 23 #ifdef pvAccessEpicsExportSharedSymbols 24 # define epicsExportSharedSymbols 25 # undef pvAccessEpicsExportSharedSymbols 45 # if __cplusplus>=201103L 52 # if __cplusplus>=201103L 53 # define OVERRIDE override 64 using epics::pvData::Requester;
109 : lockable(li), locked(
true) {
137 Lockable::shared_pointer
const lockable;
173 virtual void stats(
Stats& s)
const =0;
221 virtual std::tr1::shared_ptr<Channel> getChannel() = 0;
231 virtual void cancel() = 0;
237 virtual void lastRequest() = 0;
271 virtual void monitorEvent(
MonitorPtr const & monitor) = 0;
276 virtual void unlisten(
MonitorPtr const & monitor) = 0;
301 virtual void putArray(
302 epics::pvData::PVArray::shared_pointer
const & putArray,
303 size_t offset = 0,
size_t count = 0,
size_t stride = 1) = 0;
315 virtual void getArray(
size_t offset = 0,
size_t count = 0,
size_t stride = 1) = 0;
320 virtual void getLength() = 0;
326 virtual void setLength(
size_t length) = 0;
347 virtual void channelArrayConnect(
349 ChannelArray::shared_pointer
const & channelArray,
350 epics::pvData::Array::const_shared_pointer
const & array) = 0;
360 virtual void putArrayDone(
362 ChannelArray::shared_pointer
const & channelArray) = 0;
374 virtual void getArrayDone(
376 ChannelArray::shared_pointer
const & channelArray,
377 epics::pvData::PVArray::shared_pointer
const & pvArray) = 0;
385 virtual void getLengthDone(
387 ChannelArray::shared_pointer
const & channelArray,
395 virtual void setLengthDone(
397 ChannelArray::shared_pointer
const & channelArray) = 0;
413 virtual std::tr1::shared_ptr<ChannelProvider> getChannelProvider() = 0;
414 virtual void cancel() = 0;
418 static ChannelFind::shared_pointer buildDummy(
const std::tr1::shared_ptr<ChannelProvider>& provider);
436 virtual void channelFindResult(
438 ChannelFind::shared_pointer
const & channelFind,
463 {
return std::tr1::shared_ptr<const PeerInfo>(); }
479 virtual void channelListResult(
481 ChannelFind::shared_pointer
const & channelFind,
483 bool hasDynamic) = 0;
504 virtual void get() = 0;
524 virtual void channelGetConnect(
526 ChannelGet::shared_pointer
const & channelGet,
527 epics::pvData::Structure::const_shared_pointer
const &
structure) = 0;
540 virtual void getDone(
542 ChannelGet::shared_pointer
const & channelGet,
543 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
544 epics::pvData::BitSet::shared_pointer
const & bitSet) = 0;
562 virtual void process() = 0;
582 virtual void channelProcessConnect(
584 ChannelProcess::shared_pointer
const & channelProcess) = 0;
591 virtual void processDone(
593 ChannelProcess::shared_pointer
const & channelProcess) = 0;
620 epics::pvData::PVStructure::shared_pointer
const & pvPutStructure,
621 epics::pvData::BitSet::shared_pointer
const & putBitSet) = 0;
628 virtual void get() = 0;
648 virtual void channelPutConnect(
650 ChannelPut::shared_pointer
const & channelPut,
651 epics::pvData::Structure::const_shared_pointer
const &
structure) = 0;
658 virtual void putDone(
660 ChannelPut::shared_pointer
const & channelPut) = 0;
672 virtual void getDone(
674 ChannelPut::shared_pointer
const & channelPut,
675 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
676 epics::pvData::BitSet::shared_pointer
const & bitSet) = 0;
698 epics::pvData::PVStructure::shared_pointer
const & pvPutStructure,
699 epics::pvData::BitSet::shared_pointer
const & putBitSet) = 0;
705 virtual void getPut() = 0;
711 virtual void getGet() = 0;
733 virtual void channelPutGetConnect(
735 ChannelPutGet::shared_pointer
const & channelPutGet,
736 epics::pvData::Structure::const_shared_pointer
const & putStructure,
737 epics::pvData::Structure::const_shared_pointer
const & getStructure) = 0;
746 virtual void putGetDone(
748 ChannelPutGet::shared_pointer
const & channelPutGet,
749 epics::pvData::PVStructure::shared_pointer
const & pvGetStructure,
750 epics::pvData::BitSet::shared_pointer
const & getBitSet) = 0;
759 virtual void getPutDone(
761 ChannelPutGet::shared_pointer
const & channelPutGet,
762 epics::pvData::PVStructure::shared_pointer
const & pvPutStructure,
763 epics::pvData::BitSet::shared_pointer
const & putBitSet) = 0;
772 virtual void getGetDone(
774 ChannelPutGet::shared_pointer
const & channelPutGet,
775 epics::pvData::PVStructure::shared_pointer
const & pvGetStructure,
776 epics::pvData::BitSet::shared_pointer
const & getBitSet) = 0;
804 virtual void request(epics::pvData::PVStructure::shared_pointer
const & pvArgument) = 0;
830 virtual void channelRPCConnect(
832 ChannelRPC::shared_pointer
const &
operation) = 0;
843 virtual void requestDone(
845 ChannelRPC::shared_pointer
const & operation,
846 epics::pvData::PVStructure::shared_pointer
const & pvResponse) = 0;
867 virtual void getDone(
900 virtual std::string getRequesterName();
910 static const char* ConnectionStateNames[];
916 virtual std::tr1::shared_ptr<ChannelProvider> getProvider() = 0;
927 virtual std::string getRemoteAddress() = 0;
937 virtual std::string getChannelName() = 0;
944 virtual std::tr1::shared_ptr<ChannelRequester> getChannelRequester() = 0;
949 virtual bool isConnected();
961 virtual void getField(GetFieldRequester::shared_pointer
const &
requester,std::string
const & subField);
969 virtual AccessRights getAccessRights(epics::pvData::PVField::shared_pointer
const & pvField);
988 virtual ChannelProcess::shared_pointer createChannelProcess(
989 ChannelProcessRequester::shared_pointer
const &
requester,
990 epics::pvData::PVStructure::shared_pointer
const & pvRequest);
1009 virtual ChannelGet::shared_pointer createChannelGet(
1010 ChannelGetRequester::shared_pointer
const &
requester,
1011 epics::pvData::PVStructure::shared_pointer
const & pvRequest);
1030 virtual ChannelPut::shared_pointer createChannelPut(
1031 ChannelPutRequester::shared_pointer
const &
requester,
1032 epics::pvData::PVStructure::shared_pointer
const & pvRequest);
1051 virtual ChannelPutGet::shared_pointer createChannelPutGet(
1052 ChannelPutGetRequester::shared_pointer
const &
requester,
1053 epics::pvData::PVStructure::shared_pointer
const & pvRequest);
1072 virtual ChannelRPC::shared_pointer createChannelRPC(
1073 ChannelRPCRequester::shared_pointer
const &
requester,
1074 epics::pvData::PVStructure::shared_pointer
const & pvRequest);
1093 virtual Monitor::shared_pointer createMonitor(
1094 MonitorRequester::shared_pointer
const &
requester,
1095 epics::pvData::PVStructure::shared_pointer
const & pvRequest);
1119 virtual ChannelArray::shared_pointer createChannelArray(
1120 ChannelArrayRequester::shared_pointer
const &
requester,
1121 epics::pvData::PVStructure::shared_pointer
const & pvRequest);
1144 ChannelRequester& operator=(
const ChannelRequester&);
1152 virtual ~ChannelRequester();
1185 virtual void channelStateChange(Channel::shared_pointer
const & channel,
Channel::ConnectionState connectionState) = 0;
1205 virtual std::tr1::shared_ptr<const PeerInfo> getPeerInfo();
1215 static ChannelRequester::shared_pointer build();
1237 static const short PRIORITY_MIN = 0;
1239 static const short PRIORITY_MAX = 99;
1241 static const short PRIORITY_DEFAULT = PRIORITY_MIN;
1243 static const short PRIORITY_LINKS_DB = PRIORITY_MAX;
1245 static const short PRIORITY_ARCHIVE = (PRIORITY_MAX + PRIORITY_MIN) / 2;
1247 static const short PRIORITY_OPI = PRIORITY_MIN;
1258 virtual std::string getProviderName() = 0;
1270 virtual ChannelFind::shared_pointer channelFind(std::string
const & name,
1271 ChannelFindRequester::shared_pointer
const &
requester) = 0;
1282 virtual ChannelFind::shared_pointer channelList(ChannelListRequester::shared_pointer
const &
requester);
1287 virtual Channel::shared_pointer createChannel(std::string
const & name,
1289 short priority = PRIORITY_DEFAULT);
1314 virtual Channel::shared_pointer createChannel(std::string
const & name,ChannelRequester::shared_pointer
const &
requester,
1315 short priority, std::string
const & address) = 0;
1333 virtual std::string getFactoryName() = 0;
1339 virtual ChannelProvider::shared_pointer sharedInstance() = 0;
1346 return newInstance(std::tr1::shared_ptr<Configuration>());
1353 virtual ChannelProvider::shared_pointer
newInstance(
const std::tr1::shared_ptr<Configuration>&) {
1354 throw std::logic_error(
"This ChannelProviderFactory does not support non-default configurations");
1361 template<
class Prov
ider>
1372 ChannelProvider::shared_pointer ret(
shared.lock());
1374 std::tr1::shared_ptr<Provider> inst(
new Provider(std::tr1::shared_ptr<Configuration>()));
1382 std::tr1::shared_ptr<Provider> ret(
new Provider(conf));
1387 const std::string
pname;
1389 ChannelProvider::weak_pointer
shared;
1396 template<
class Prov
ider>
1400 const std::tr1::shared_ptr<const Configuration>& conf = std::tr1::shared_ptr<const Configuration>())
1401 :
pname(name), config(conf)
1410 ChannelProvider::shared_pointer ret(
shared.lock());
1412 std::tr1::shared_ptr<Provider> inst(
new Provider(config));
1421 return sharedInstance();
1424 const std::string
pname;
1426 ChannelProvider::weak_pointer
shared;
1427 const std::tr1::shared_ptr<const Configuration> config;
1443 static ChannelProviderRegistry::shared_pointer build();
1448 static ChannelProviderRegistry::shared_pointer
clients();
1453 static ChannelProviderRegistry::shared_pointer
servers();
1460 ChannelProvider::shared_pointer getProvider(std::string
const & providerName);
1467 ChannelProvider::shared_pointer createProvider(std::string
const & providerName,
1468 const std::tr1::shared_ptr<Configuration>& conf = std::tr1::shared_ptr<Configuration>());
1475 virtual ChannelProviderFactory::shared_pointer getFactory(std::string
const & providerName);
1481 virtual void getProviderNames(provider_name_set& names);
1485 virtual bool add(
const ChannelProviderFactory::shared_pointer& fact,
bool replace=
true);
1488 template<
class Prov
ider>
1489 ChannelProviderFactory::shared_pointer
add(
const std::string& name,
bool replace=
true)
1492 typename Factory::shared_pointer fact(
new Factory(name));
1493 return add(fact, replace) ? fact :
typename Factory::shared_pointer();
1496 typedef ChannelProvider::shared_pointer (*factoryfn_t)(
const std::tr1::shared_ptr<Configuration>&);
1498 ChannelProviderFactory::shared_pointer add(
const std::string& name, factoryfn_t,
bool replace=
true);
1501 template<
class Prov
ider>
1502 ChannelProviderFactory::shared_pointer
addSingleton(
const std::string& name,
1503 const std::tr1::shared_ptr<const Configuration>& conf = std::tr1::shared_ptr<const Configuration>(),
1507 typename Factory::shared_pointer fact(
new Factory(name, conf));
1508 return add(fact, replace) ? fact :
typename Factory::shared_pointer();
1515 ChannelProviderFactory::shared_pointer addSingleton(
const ChannelProvider::shared_pointer& provider,
1519 ChannelProviderFactory::shared_pointer
remove(
const std::string& name);
1522 virtual bool remove(
const ChannelProviderFactory::shared_pointer& factory);
1525 virtual void clear();
1531 friend struct CompatRegistry;
1534 typedef std::map<std::string, ChannelProviderFactory::shared_pointer> providers_t;
1535 providers_t providers;
1543 #if __GNUC__>4 || (__GNUC__==4&&__GNUC_MINOR__>=3) 1545 #define gCPRMSG __attribute__((error("ChannelProvider shared_ptr ownership rules have changed."))) 1547 epicsShareFunc ChannelProviderRegistry::shared_pointer getChannelProviderRegistry() gCPRMSG;
1553 epicsShareFunc void unregisterAllChannelProviderFactory() gCPRMSG;
1570 namespace epics {
namespace pvData {
virtual std::tr1::shared_ptr< const PeerInfo > getPeerInfo()
Return information on requesting peer if applicable.
virtual ChannelProvider::shared_pointer newInstance(const std::tr1::shared_ptr< Configuration > &)
ChannelPut operation_type
virtual ~ChannelRPCRequester()
virtual ~ChannelFindRequester()
virtual void printInfo(std::ostream &out)
virtual ~ChannelProviderRegistry()
virtual ~DefaultChannelRequester()
std::tr1::shared_ptr< detail::SharedPut > put
epicsShareExtern std::string getMessageTypeName(MessageType messageType)
SimpleChannelProviderFactory(const std::string &name)
Information provded by a client to a server-type ChannelProvider.
ChannelArray operation_type
ChannelPutGet operation_type
ChannelRPCRequester requester_type
ChannelFind operation_type
virtual std::string getFactoryName() OVERRIDE FINAL
std::tr1::shared_ptr< Requester > RequesterPtr
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
A lock for multithreading.
Mark external symbols and entry points for shared libraries.
ChannelFindRequester requester_type
Base for all Requesters (callbacks to client)
ChannelPutGetRequester requester_type
virtual ~GetFieldRequester()
virtual ChannelProvider::shared_pointer newInstance()
const std::tr1::weak_ptr< Process2PutProxy > operation
ChannelFind operation_type
static size_t num_instances
std::string transportPeer
ChannelProcessRequester requester_type
ChannelProcess operation_type
SingletonChannelProviderFactory(const std::string &name, const std::tr1::shared_ptr< const Configuration > &conf=std::tr1::shared_ptr< const Configuration >())
std::vector< std::string > stringVector_t
virtual ChannelProvider::shared_pointer newInstance(const std::tr1::shared_ptr< Configuration > &conf) OVERRIDE FINAL
ChannelProviderFactory::shared_pointer addSingleton(const std::string &name, const std::tr1::shared_ptr< const Configuration > &conf=std::tr1::shared_ptr< const Configuration >(), bool replace=true)
Add a new Provider which will be built using SingletonChannelProviderFactory<Provider> ...
virtual std::string getFactoryName() OVERRIDE FINAL
Used when ChannelProvider::createChannel() is passed a NULL ChannelRequester.
virtual ~MonitorRequester()
Monitor PipelineMonitor
Pipeline (streaming) support API (optional). This is used by pvAccess to implement pipeline (streamin...
#define POINTER_DEFINITIONS(clazz)
virtual void channelDisconnect(bool destroy)
ChannelProviderRegistry::shared_pointer clients
virtual ~ChannelProviderFactory()
const ChannelProcessRequester::weak_pointer requester
rtems_configuration_table Configuration
virtual ChannelProvider::shared_pointer newInstance(const std::tr1::shared_ptr< Configuration > &conf) OVERRIDE FINAL
static size_t num_instances
ScopedLock(Lockable::shared_pointer const &li)
virtual ~ChannelArrayRequester()
std::tr1::shared_ptr< const Field > FieldConstPtr
ChannelGetRequester requester_type
FlushStrategy
The FlushStrategy enum.
virtual ~ChannelPutGetRequester()
Expose statistics related to network transport.
Callback class for passing messages to a requester.
Callback implemented by monitor clients.
virtual ~ChannelProcessRequester()
virtual ~SimpleChannelProviderFactory()
ChannelProviderFactory::shared_pointer add(const std::string &name, bool replace=true)
Add a new Provider which will be built using SimpleChannelProviderFactory<Provider> ...
epics::pvData::Mutex sharedM
virtual ChannelProvider::shared_pointer sharedInstance() OVERRIDE FINAL
ChannelRPC operation_type
ChannelProvider::weak_pointer shared
virtual ~SingletonChannelProviderFactory()
Instance declaring destroy method.
virtual ChannelProvider::shared_pointer sharedInstance() OVERRIDE FINAL
static size_t num_instances
virtual ~ChannelListRequester()
#define EPICS_NOT_COPYABLE(CLASS)
Disable implicit copyable.
ChannelRequester requester_type
virtual ~ChannelProcess()
static size_t num_instances
ChannelArrayRequester requester_type
static ChannelRequester::shared_pointer build()
std::tr1::shared_ptr< Monitor > MonitorPtr
static size_t num_instances
std::set< std::string > provider_name_set
ChannelGet operation_type
virtual ~ChannelGetRequester()
ChannelPutRequester requester_type
virtual ~ChannelPutRequester()