13 #define epicsExportSharedSymbols 32 return req ? req->getRequesterName() : std::string(
"<Destroy'd Channel>");
39 req->message(message, messageType);
68 const ChannelProcessRequester::weak_pointer
requester;
69 const std::tr1::weak_ptr<Process2PutProxy>
operation;
74 Req(
const ChannelProcessRequester::weak_pointer& req,
75 const std::tr1::weak_ptr<Process2PutProxy>&
op)
76 :requester(req), operation(op)
81 ChannelProcessRequester::shared_pointer req(requester.lock());
82 return req ? req->getRequesterName() :
"";
89 this->dummy.swap(dummy);
91 ChannelProcessRequester::shared_pointer req(requester.lock());
93 req->channelDisconnect(destroy);
96 virtual void channelPutConnect(
98 ChannelPut::shared_pointer
const & channelPut,
102 ChannelProcessRequester::shared_pointer req(requester.lock());
103 std::tr1::shared_ptr<Process2PutProxy>
op(operation.lock());
111 req->channelProcessConnect(status,
op);
114 virtual void putDone(
116 ChannelPut::shared_pointer
const & channelPut)
OVERRIDE FINAL 118 ChannelProcessRequester::shared_pointer req(requester.lock());
119 std::tr1::shared_ptr<Process2PutProxy>
op(operation.lock());
121 req->processDone(status,
op);
124 virtual void getDone(
126 ChannelPut::shared_pointer
const & channelPut,
127 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
128 epics::pvData::BitSet::shared_pointer
const & bitSet)
OVERRIDE FINAL 132 ChannelPut::shared_pointer
op;
137 Process2PutProxy() :empty(new
epics::pvData::BitSet) {}
138 virtual ~Process2PutProxy() {}
142 virtual std::tr1::shared_ptr<Channel> getChannel()
OVERRIDE FINAL 143 {
return op->getChannel(); }
147 { op->lastRequest(); }
153 blob = op_request->dummy;
156 ChannelProcessRequester::shared_pointer req(op_request->requester.lock());
157 ChannelProcess::shared_pointer
op(op_request->operation.lock());
161 op->put(blob, empty);
168 ChannelProcessRequester::shared_pointer
const &
requester,
169 epics::pvData::PVStructure::shared_pointer
const & pvRequestx)
171 pvd::PVStructure::shared_pointer pvRequest(pvRequestx);
172 std::tr1::shared_ptr<Process2PutProxy> ret(
new Process2PutProxy);
173 ret->op_request.reset(
new Process2PutProxy::Req(requester, ret));
176 if(!pvRequest->getSubField(
"record._options.process"))
205 const ChannelGetRequester::weak_pointer
requester;
206 const std::tr1::weak_ptr<Get2PutProxy>
operation;
210 Req(
const ChannelGetRequester::weak_pointer& req,
211 const std::tr1::weak_ptr<Get2PutProxy>&
op)
217 ChannelGetRequester::shared_pointer req(requester.lock());
218 return req ? req->getRequesterName() :
"";
222 ChannelGetRequester::shared_pointer req(requester.lock());
224 req->message(message, messageType);
226 ChannelPutRequester::message(message, messageType);
230 ChannelGetRequester::shared_pointer req(requester.lock());
232 req->channelDisconnect(destroy);
235 virtual void channelPutConnect(
237 ChannelPut::shared_pointer
const & channelPut,
240 ChannelGetRequester::shared_pointer req(requester.lock());
241 std::tr1::shared_ptr<Get2PutProxy>
op(operation.lock());
248 req->channelGetConnect(status, op, structure);
251 virtual void putDone(
253 ChannelPut::shared_pointer
const & channelPut)
OVERRIDE FINAL 256 virtual void getDone(
258 ChannelPut::shared_pointer
const & channelPut,
259 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
260 epics::pvData::BitSet::shared_pointer
const & bitSet)
OVERRIDE FINAL 262 ChannelGetRequester::shared_pointer req(requester.lock());
263 std::tr1::shared_ptr<Get2PutProxy>
op(operation.lock());
265 req->getDone(status, op, pvStructure, bitSet);
269 ChannelPut::shared_pointer
op;
270 std::tr1::shared_ptr<Get2PutProxy::Req>
op_request;
272 ChannelPut::shared_pointer
OP() {
278 virtual ~Get2PutProxy() {}
282 ChannelPut::shared_pointer O(
OP());
285 virtual std::tr1::shared_ptr<Channel> getChannel()
OVERRIDE FINAL 287 ChannelPut::shared_pointer O(
OP());
288 return O ? O->getChannel() : std::tr1::shared_ptr<Channel>();
292 ChannelPut::shared_pointer O(
OP());
297 ChannelPut::shared_pointer O(
OP());
298 if(O) O->lastRequest();
302 ChannelPut::shared_pointer O(
OP());
309 ChannelGetRequester::shared_pointer
const &
requester,
310 epics::pvData::PVStructure::shared_pointer
const & pvRequest)
312 std::tr1::shared_ptr<Get2PutProxy> ret(
new Get2PutProxy);
313 ret->op_request.reset(
new Get2PutProxy::Req(requester, ret));
327 ChannelPutRequester::shared_pointer
const &
requester,
328 epics::pvData::PVStructure::shared_pointer
const & pvRequest)
330 ChannelPut::shared_pointer ret;
337 ChannelPutGetRequester::shared_pointer
const &
requester,
338 epics::pvData::PVStructure::shared_pointer
const & pvRequest)
340 ChannelPutGet::shared_pointer ret;
347 ChannelRPCRequester::shared_pointer
const &
requester,
348 epics::pvData::PVStructure::shared_pointer
const & pvRequest)
350 ChannelRPC::shared_pointer ret;
356 epics::pvAccess::MonitorRequester::shared_pointer
const &
requester,
357 epics::pvData::PVStructure::shared_pointer
const & pvRequest)
359 pvd::Monitor::shared_pointer ret;
366 ChannelArrayRequester::shared_pointer
const &
requester,
367 epics::pvData::PVStructure::shared_pointer
const & pvRequest)
369 ChannelArray::shared_pointer ret;
371 ret, pvd::Array::const_shared_pointer());
427 return PeerInfo::const_shared_pointer();
435 std::ostringstream strm;
437 throw std::runtime_error(strm.str());
451 : pvStructurePtr(pvStructurePtr)
452 ,changedBitSet(
epics::pvData::
BitSet::create(static_cast<
epics::pvData::
uint32>(pvStructurePtr->getNumberFields())))
453 ,overrunBitSet(
epics::pvData::
BitSet::create(static_cast<
epics::pvData::
uint32>(pvStructurePtr->getNumberFields())))
461 epics::pvAccess::ChannelProvider::weak_pointer provider;
462 DummyChannelFind(
const epics::pvAccess::ChannelProvider::shared_pointer& provider) : provider(provider) {}
463 virtual ~DummyChannelFind() {}
465 virtual epics::pvAccess::ChannelProvider::shared_pointer getChannelProvider()
OVERRIDE FINAL {
return provider.lock(); }
471 namespace epics {
namespace pvAccess {
475 std::tr1::shared_ptr<DummyChannelFind> ret(
new DummyChannelFind(provider));
epics::pvData::BitSetPtr empty
void dump(std::ostream &o) const
epicsShareExtern std::string getMessageTypeName(MessageType messageType)
virtual std::tr1::shared_ptr< const PeerInfo > getPeerInfo()
Return information on connected peer if applicable.
virtual std::string getRequesterName() OVERRIDE FINAL
static Status error(const std::string &m)
ValueBuilder & addNested(const std::string &name, Type type=structure, const std::string &id=std::string())
Start a sub-structure.
virtual ~ChannelRequest()
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
virtual void getField(GetFieldRequester::shared_pointer const &requester, std::string const &subField)
const std::tr1::weak_ptr< Process2PutProxy > operation
static size_t num_instances
std::tr1::shared_ptr< Req > op_request
Used when ChannelProvider::createChannel() is passed a NULL ChannelRequester.
MonitorElement(epics::pvData::PVStructurePtr const &pvStructurePtr)
virtual AccessRights getAccessRights(epics::pvData::PVField::shared_pointer const &pvField)
virtual Monitor::shared_pointer createMonitor(MonitorRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
static const char * ConnectionStateNames[]
virtual ChannelPutGet::shared_pointer createChannelPutGet(ChannelPutGetRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
APIs for the epicsMutex mutual exclusion semaphore.
const ChannelProcessRequester::weak_pointer requester
virtual ~ChannelRequester()
static size_t num_instances
static ChannelFind::shared_pointer buildDummy(const std::tr1::shared_ptr< ChannelProvider > &provider)
virtual ChannelPut::shared_pointer createChannelPut(ChannelPutRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
virtual std::tr1::shared_ptr< ChannelRequester > getChannelRequester()=0
std::tr1::shared_ptr< const Field > FieldConstPtr
virtual ChannelArray::shared_pointer createChannelArray(ChannelArrayRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
FORCE_INLINE ValueBuilder & add(const std::string &name, typename meta::arg_type< typename ScalarTypeTraits< ENUM >::type >::type V)
Add a scalar field with a given name and initial value.
virtual std::string getChannelName()=0
virtual ~ChannelBaseRequester()
epics::pvData::PVStructurePtr dummy
std::tr1::shared_ptr< PVStructure > PVStructurePtr
virtual ChannelGet::shared_pointer createChannelGet(ChannelGetRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
virtual void message(std::string const &message, epics::pvData::MessageType messageType)
virtual ChannelRPC::shared_pointer createChannelRPC(ChannelRPCRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
virtual void channelCreated(const epics::pvData::Status &status, Channel::shared_pointer const &channel) OVERRIDE FINAL
std::tr1::shared_ptr< BitSet > BitSetPtr
virtual void channelStateChange(Channel::shared_pointer const &channel, Channel::ConnectionState connectionState) OVERRIDE FINAL
virtual ConnectionState getConnectionState()
static size_t num_instances
ChannelPut::shared_pointer op
virtual std::string getRequesterName()
virtual bool isConnected()
virtual ~ChannelProvider()
static size_t num_instances
virtual ChannelProcess::shared_pointer createChannelProcess(ChannelProcessRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
static ChannelRequester::shared_pointer build()
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
static size_t num_instances