15 #define epicsExportSharedSymbols 32 WaitCommon() :done(
false) {}
38 if(!event.wait(timeout)) {
70 pvd::PVStructure::const_shared_pointer
72 pvd::PVStructure::const_shared_pointer pvRequest)
76 Operation
op(
get(&waiter, pvRequest));
79 switch(waiter.result.event) {
80 case GetEvent::Success:
81 return waiter.result.value;
83 throw std::runtime_error(waiter.result.message);
85 case GetEvent::Cancel:
90 pvd::PVStructure::const_shared_pointer
92 const epics::pvData::PVStructure::const_shared_pointer& arguments,
93 epics::pvData::PVStructure::const_shared_pointer pvRequest)
98 Guard G(waiter.mutex);
101 if(!waiter.event.wait(timeout)) {
108 return waiter.result.value;
110 throw std::runtime_error(waiter.result.message);
120 virtual ~PutValCommon() {}
157 for(PutBuilder::scalars_t::const_iterator it = builder.scalars.begin(), end = builder.scalars.end();
160 if(it->value.empty())
164 if(!fld && it->required)
165 throw std::runtime_error(std::string(
"Server does not have required field ")+it->name);
177 scalar->putFrom(it->value);
185 throw std::runtime_error(std::string(
"Unable to descriminate union field ")+it->name);
194 throw std::runtime_error(std::string(
"Type mis-match assigning scalar to field ")+it->name);
198 args.tosend.set(fld->getFieldOffset());
201 for(PutBuilder::arrays_t::const_iterator it = builder.arrays.begin(), end = builder.arrays.end();
204 if(it->value.empty())
208 if(!fld && it->required)
209 throw std::runtime_error(std::string(
"Server does not have required field ")+it->name);
221 scalar->putFrom(it->value);
229 throw std::runtime_error(std::string(
"Unable to descriminate union field ")+it->name);
239 throw std::runtime_error(std::string(
"Type mis-match assigning scalar to field ")+it->name);
243 args.tosend.set(fld->getFieldOffset());
264 void PutBuilder::exec(
double timeout)
272 case PutEvent::Success:
return;
275 case PutEvent::Cancel:
318 MonitorSync::MonitorSync(
const Monitor& mon,
const std::tr1::shared_ptr<SImpl>& simpl)
331 if(!simpl)
throw std::logic_error(
"No subscription");
332 Guard G(simpl->mutex);
335 bool ret = simpl->hadevent;
336 simpl->hadevent =
false;
342 if(!simpl)
throw std::logic_error(
"No subscription");
343 simpl->event->wait();
344 Guard G(simpl->mutex);
347 bool ret = simpl->hadevent;
348 simpl->hadevent =
false;
354 if(!simpl)
throw std::logic_error(
"No subscription");
355 bool ret = simpl->event->wait(timeout);
357 Guard G(simpl->mutex);
360 ret = simpl->hadevent;
361 simpl->hadevent =
false;
367 if(simpl) simpl->event->signal();
375 Monitor mon(monitor(simpl.get(), pvRequest));
388 virtual ~InfoWait() {}
412 waiter.wait(timeout);
414 switch(waiter.result.event) {
416 return waiter.result.type;
418 throw std::runtime_error(waiter.result.message);
Thrown by blocking methods of ClientChannel on operation timeout.
PVScalar is the base class for each scalar field.
This class implements introspection object for a union.
Exec(detail::PutBuilder &builder)
#define THROW_EXCEPTION2(TYPE, MSG)
virtual void putBuild(const epics::pvData::StructureConstPtr &build, Args &args) OVERRIDE FINAL
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())
Information on get/rpc completion.
std::tr1::shared_ptr< const Structure > StructureConstPtr
Operation get(GetCallback *cb, epics::pvData::PVStructure::const_shared_pointer pvRequest=epics::pvData::PVStructure::const_shared_pointer())
Handle for monitor subscription.
callback for get() and rpc()
Handle for in-progress get/put/rpc operation.
detail::PutBuilder & builder
std::string message
Check when event==Fail.
std::tr1::shared_ptr< PVDataCreate > PVDataCreatePtr
Information on put completion.
#define LOG(level, format,...)
virtual void putDone(const PutEvent &evt) OVERRIDE FINAL
Put operation is complete.
epicsGuard< epicsMutex > Guard
void cancel()
Immediate cancellation.
APIs for the epicsMutex mutual exclusion semaphore.
enum pvac::PutEvent::event_t event
Base class for a scalarArray.
std::tr1::shared_ptr< PVScalar > PVScalarPtr
epicsGuardRelease< epicsMutex > UnGuard
PVUnion has a single subfield.
std::tr1::shared_ptr< const Field > FieldConstPtr
void set(PVFieldPtr const &value)
request cancelled before completion
APIs for the epicsEvent binary semaphore.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
PVFieldPtr select(int32 index)
Information on monitor subscription/queue change.
request ends in failure. Check message
virtual void monitorEvent(const MonitorEvent &evt) OVERRIDE FINAL
std::tr1::shared_ptr< PVField > PVFieldPtr
Operation info(InfoCallback *cb, const std::string &subfld=std::string())
ChannelPut::shared_pointer op
Monitor event notification.
std::tr1::shared_ptr< PVScalarArray > PVScalarArrayPtr
int32 guess(Type t, ScalarType s) const
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
subscription ends in an error
Monitor monitor(MonitorCallback *cb, epics::pvData::PVStructure::const_shared_pointer pvRequest=epics::pvData::PVStructure::const_shared_pointer())