12#include <epicsMutex.h>
50struct epicsShareClass Operation
61 Operation(
const std::tr1::shared_ptr<Impl>&);
69 bool valid()
const {
return !!impl; }
71#if __cplusplus>=201103L
72 explicit operator bool()
const {
return valid(); }
75 typedef bool (Operation::*bool_type)()
const;
77 operator bool_type()
const {
return valid() ? &Operation::valid : 0; }
80 void reset() { impl.reset(); }
84 std::tr1::shared_ptr<Impl> impl;
102 epics::pvData::PVStructure::const_shared_pointer
value;
105 epics::pvData::BitSet::const_shared_pointer
valid;
108struct epicsShareClass InfoEvent :
public PutEvent
117struct epicsShareClass Monitor
121 Monitor(
const std::tr1::shared_ptr<Impl>&);
160 epics::pvData::PVStructure::const_shared_pointer
root;
164 bool valid()
const {
return !!impl; }
166#if __cplusplus>=201103L
167 explicit operator bool()
const {
return valid(); }
170 typedef bool (Monitor::*bool_type)()
const;
172 operator bool_type()
const {
return valid() ? &Monitor::valid : 0; }
175 void reset() { impl.reset(); }
178 std::tr1::shared_ptr<Impl> impl;
180 friend struct MonitorSync;
206struct epicsShareClass MonitorSync :
public Monitor
210 MonitorSync(
const Monitor&,
const std::tr1::shared_ptr<SImpl>&);
233 std::tr1::shared_ptr<SImpl> simpl;
254void registerRefTrack();
266class epicsShareClass ClientChannel
268#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 305)
274 std::tr1::shared_ptr<Impl> impl;
275 friend class ClientProvider;
276 friend void detail::registerRefTrack();
277 friend epicsShareFunc ::std::ostream& operator<<(
::std::ostream& strm,
const ClientChannel& op);
279 ClientChannel(
const std::tr1::shared_ptr<Impl>& i) :impl(i) {}
282 struct epicsShareClass Options {
286 bool operator<(
const Options&)
const;
297 ClientChannel(
const std::tr1::shared_ptr<epics::pvAccess::ChannelProvider>& provider,
305 bool valid()
const {
return !!impl; }
307#if __cplusplus>=201103L
308 explicit operator bool()
const {
return valid(); }
311 typedef bool (ClientChannel::*bool_type)()
const;
313 operator bool_type()
const {
return valid() ? &ClientChannel::valid : 0; }
316 void reset() { impl.reset(); }
329 epics::pvData::PVStructure::const_shared_pointer pvRequest = epics::pvData::PVStructure::const_shared_pointer());
335 epics::pvData::PVStructure::const_shared_pointer
337 epics::pvData::PVStructure::const_shared_pointer pvRequest = epics::pvData::PVStructure::const_shared_pointer());
345 const epics::pvData::PVStructure::const_shared_pointer& arguments,
346 epics::pvData::PVStructure::const_shared_pointer pvRequest = epics::pvData::PVStructure::const_shared_pointer());
352 epics::pvData::PVStructure::const_shared_pointer
354 const epics::pvData::PVStructure::const_shared_pointer& arguments,
355 epics::pvData::PVStructure::const_shared_pointer pvRequest = epics::pvData::PVStructure::const_shared_pointer());
363 epics::pvData::PVStructure::const_shared_pointer root;
371 epics::pvData::PVStructure::const_shared_pointer previous;
395 epics::pvData::PVStructure::const_shared_pointer pvRequest = epics::pvData::PVStructure::const_shared_pointer(),
396 bool getprevious =
false);
400 detail::PutBuilder put(
const epics::pvData::PVStructure::const_shared_pointer &pvRequest = epics::pvData::PVStructure::const_shared_pointer());
418 epics::pvData::PVStructure::const_shared_pointer pvRequest = epics::pvData::PVStructure::const_shared_pointer());
430 MonitorSync monitor(
const epics::pvData::PVStructure::const_shared_pointer& pvRequest = epics::pvData::PVStructure::const_shared_pointer(),
431 epicsEvent *event =0);
433 struct InfoCallback {
434 virtual ~InfoCallback() {}
436 virtual void infoDone(
const InfoEvent& evt) =0;
460 std::tr1::shared_ptr<epics::pvAccess::Channel> getChannel();
467class epicsShareClass PutBuilder {
468 ClientChannel& channel;
469 epics::pvData::PVStructure::const_shared_pointer request;
476 triple(
const std::string& name,
const V& value,
bool required =
true)
477 :name(name), required(required), value(value)
490 PutBuilder(ClientChannel& channel,
const epics::pvData::PVStructure::const_shared_pointer& request)
491 :channel(channel), request(request)
495 scalars.push_back(scalars_t::value_type(name, value, required));
499 PutBuilder& set(
const std::string& name, T value,
bool required=
true) {
503 arrays.push_back(arrays_t::value_type(name, value, required));
508 return set(name, epics::pvData::static_shared_vector_cast<const void>(value), required);
520 std::tr1::shared_ptr<Impl> impl;
521 friend void detail::registerRefTrack();
535 const std::tr1::shared_ptr<epics::pvAccess::Configuration>& conf = std::tr1::shared_ptr<epics::pvAccess::Configuration>());
536 explicit ClientProvider(
const std::tr1::shared_ptr<epics::pvAccess::ChannelProvider>& provider);
557 bool valid()
const {
return !!impl; }
559#if __cplusplus>=201103L
560 explicit operator bool()
const {
return valid(); }
563 typedef bool (ClientProvider::*bool_type)()
const;
565 operator bool_type()
const {
return valid() ? &ClientProvider::valid : 0; }
568 void reset() { impl.reset(); }
basic_ostream< char > ostream
basic_string< char > string
basic_ostream< _CharT, _Traits > & operator<<(basic_ostream< _CharT, _Traits > &__os, const basic_string< _CharT, _Traits, _Alloc > &__str)
The interface through which Operations (get, put, monitor, ...) are initiated.
An instance of a Client or Server.
Access to Monitor subscription and queue.
Represents a single channel.
void removeConnectListener(ConnectCallback *)
Remove from list of listeners.
Operation info(InfoCallback *cb, const std::string &subfld=std::string())
void addConnectListener(ConnectCallback *)
epics::pvData::PVStructure::const_shared_pointer get(double timeout=3.0, epics::pvData::PVStructure::const_shared_pointer pvRequest=epics::pvData::PVStructure::const_shared_pointer())
epics::pvData::FieldConstPtr info(double timeout=3.0, const std::string &subfld=std::string())
Synchronious getField opreation.
std::string name() const
Channel name or an empty string.
Operation rpc(GetCallback *cb, const epics::pvData::PVStructure::const_shared_pointer &arguments, epics::pvData::PVStructure::const_shared_pointer pvRequest=epics::pvData::PVStructure::const_shared_pointer())
Operation get(GetCallback *cb, epics::pvData::PVStructure::const_shared_pointer pvRequest=epics::pvData::PVStructure::const_shared_pointer())
Operation put(PutCallback *cb, epics::pvData::PVStructure::const_shared_pointer pvRequest=epics::pvData::PVStructure::const_shared_pointer(), bool getprevious=false)
ClientChannel(const std::tr1::shared_ptr< epics::pvAccess::ChannelProvider > &provider, const std::string &name, const Options &opt=Options())
Construct a ClientChannel using epics::pvAccess::ChannelProvider::createChannel().
Monitor monitor(MonitorCallback *cb, epics::pvData::PVStructure::const_shared_pointer pvRequest=epics::pvData::PVStructure::const_shared_pointer())
ClientChannel()
Construct a null channel. All methods throw. May later be assigned from a valid ClientChannel.
epics::pvData::PVStructure::const_shared_pointer rpc(double timeout, const epics::pvData::PVStructure::const_shared_pointer &arguments, epics::pvData::PVStructure::const_shared_pointer pvRequest=epics::pvData::PVStructure::const_shared_pointer())
MonitorSync monitor(const epics::pvData::PVStructure::const_shared_pointer &pvRequest=epics::pvData::PVStructure::const_shared_pointer(), epicsEvent *event=0)
Begin subscription w/o callbacks.
void disconnect()
Clear channel cache.
ClientProvider(const std::string &providerName, const std::tr1::shared_ptr< epics::pvAccess::Configuration > &conf=std::tr1::shared_ptr< epics::pvAccess::Configuration >())
Use named provider.
ClientChannel connect(const std::string &name, const ClientChannel::Options &conf=ClientChannel::Options())
Get a new Channel.
ClientProvider()
Construct a null provider. All methods throw. May later be assigned from a valid ClientProvider.
bool disconnect(const std::string &name, const ClientChannel::Options &conf=ClientChannel::Options())
Remove from channel cache.
std::tr1::shared_ptr< const Structure > StructureConstPtr
std::tr1::shared_ptr< const Field > FieldConstPtr
Copyright - See the COPYRIGHT that is included with this distribution.
Connection state change CB.
callback for get() and rpc()
virtual void getDone(const GetEvent &evt)=0
get or rpc operation is complete
Monitor event notification.
virtual void monitorEvent(const MonitorEvent &evt)=0
New monitor event.
Channel creation options.
virtual void putDone(const PutEvent &evt)=0
Put operation is complete.
virtual void putBuild(const epics::pvData::StructureConstPtr &build, Args &args)=0
Server provides expected structure.
information on connect/disconnect
bool connected
Is this a connection, or disconnection, event.
Information on get/rpc completion.
epics::pvData::BitSet::const_shared_pointer valid
epics::pvData::PVStructure::const_shared_pointer value
New data. NULL unless event==Success.
Information on monitor subscription/queue change.
@ Fail
subscription ends in an error
@ Cancel
subscription ends in cancellation
@ Data
Data queue not empty. Call Monitor::poll().
@ Disconnect
subscription interrupted due to loss of communication
std::string message
set for event=Fail
Handle for monitor subscription.
bool poll()
updates root, changed, overrun
std::string name() const
Channel name.
void cancel()
Immediate cancellation.
epics::pvData::PVStructure::const_shared_pointer root
Monitor update data.
Subscription usable w/o callbacks.
bool wait(double timeout)
Handle for in-progress get/put/rpc operation.
std::string name() const
Channel name.
Information on put completion.
std::string message
Check when event==Fail.
@ Fail
request ends in failure. Check message
@ Cancel
request cancelled before completion