This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::RPCClient::RPCRequester Struct Reference
+ Inheritance diagram for epics::pvAccess::RPCClient::RPCRequester:
+ Collaboration diagram for epics::pvAccess::RPCClient::RPCRequester:

Public Member Functions

 POINTER_DEFINITIONS (RPCRequester)
 
 RPCRequester ()
 
virtual ~RPCRequester ()
 
virtual std::string getRequesterName ()
 
virtual void channelRPCConnect (const pvd::Status &status, ChannelRPC::shared_pointer const &operation)
 
virtual void requestDone (const pvd::Status &status, ChannelRPC::shared_pointer const &operation, pvd::PVStructure::shared_pointer const &pvResponse)
 
virtual void channelDisconnect (bool destroy)
 
- Public Member Functions inherited from epics::pvAccess::ChannelRPCRequester
 POINTER_DEFINITIONS (ChannelRPCRequester)
 
virtual ~ChannelRPCRequester ()
 
virtual void requestDone (const epics::pvData::Status &status, ChannelRPC::shared_pointer const &operation, epics::pvData::PVStructure::shared_pointer const &pvResponse)=0
 
- Public Member Functions inherited from epics::pvAccess::ChannelBaseRequester
 POINTER_DEFINITIONS (ChannelBaseRequester)
 
 ChannelBaseRequester ()
 
virtual ~ChannelBaseRequester ()
 

Public Attributes

pvd::Mutex mutex
 
ChannelRPC::shared_pointer op
 
pvd::Status conn_status
 
pvd::Status resp_status
 
epics::pvData::PVStructure::shared_pointer next_args
 
epics::pvData::PVStructure::shared_pointer last_data
 
epicsEvent event
 
bool inprogress
 
bool last
 

Additional Inherited Members

- Public Types inherited from epics::pvAccess::ChannelRPCRequester
typedef ChannelRPC operation_type
 
- Static Public Attributes inherited from epics::pvAccess::ChannelBaseRequester
static size_t num_instances
 

Detailed Description

Definition at line 34 of file rpcClient.cpp.

Constructor & Destructor Documentation

epics::pvAccess::RPCClient::RPCRequester::RPCRequester ( )
inline

Definition at line 45 of file rpcClient.cpp.

46  :conn_status(pvd::Status::error("Never connected"))
47  ,resp_status(pvd::Status::error("Never connected"))
48  ,inprogress(false)
49  ,last(false)
50  {}
static Status error(const std::string &m)
Definition: status.h:50
virtual epics::pvAccess::RPCClient::RPCRequester::~RPCRequester ( )
inlinevirtual

Definition at line 51 of file rpcClient.cpp.

51 {}

Member Function Documentation

virtual void epics::pvAccess::RPCClient::RPCRequester::channelDisconnect ( bool  destroy)
inlinevirtual

Notification when underlying Channel becomes DISCONNECTED or DESTORYED

(re)connection is notified through a sub-class *Connect() method.

Any in-progress get()/put()/request()/start() is implicitly cancel()'d or stop()'d before this method is called.

Ownership of any PVStructures passed to completion callbacks (eg. ChannelGetRequester::getDone() ) is returned the operation

Parameters
destroytrue for final disconnect.

Reimplemented from epics::pvAccess::ChannelBaseRequester.

Definition at line 103 of file rpcClient.cpp.

104  {
105  TRACE("destroy="<<destroy);
106  {
107  pvd::Lock L(mutex);
108  resp_status = conn_status = pvd::Status::error("Connection lost");
109  last_data.reset();
110  next_args.reset();
111  inprogress = false;
112  }
113  event.signal();
114  }
static Status error(const std::string &m)
Definition: status.h:50
A lock for multithreading.
Definition: lock.h:36
epics::pvData::PVStructure::shared_pointer last_data
Definition: rpcClient.cpp:41
#define TRACE(msg)
Definition: rpcClient.cpp:26
epics::pvData::PVStructure::shared_pointer next_args
Definition: rpcClient.cpp:41
virtual void epics::pvAccess::RPCClient::RPCRequester::channelRPCConnect ( const pvd::Status status,
ChannelRPC::shared_pointer const &  operation 
)
inlinevirtual

RPC creation request satisfied.

Must check status.isOk().

On Success, a non-NULL 'operation' is provided. This is the same pointer which was, or will be, returned from Channel::createChannelRPC().

It is allowed to call ChannelRPC::request() from within this method.

Implements epics::pvAccess::ChannelRPCRequester.

Definition at line 55 of file rpcClient.cpp.

58  {
59  bool lastreq, inprog;
60  pvd::PVStructure::shared_pointer args;
61  {
62  pvd::Lock L(mutex);
63  TRACE("status="<<status);
64  op = operation;
66  args.swap(next_args);
67  lastreq = last;
68  inprog = inprogress;
69  if(inprog && args)
70  TRACE("request deferred: "<<args);
71  }
72  if(inprog && args) {
73  TRACE("request deferred: "<<args);
74  if(lastreq)
75  operation->lastRequest();
76  operation->request(args);
77  }
78  event.signal();
79  }
pvd::Status status
A lock for multithreading.
Definition: lock.h:36
const std::tr1::weak_ptr< Process2PutProxy > operation
Definition: pvAccess.cpp:69
#define TRACE(msg)
Definition: rpcClient.cpp:26
epics::pvData::PVStructure::shared_pointer next_args
Definition: rpcClient.cpp:41
ChannelRPC::shared_pointer op
Definition: rpcClient.cpp:39
virtual std::string epics::pvAccess::RPCClient::RPCRequester::getRequesterName ( )
inlinevirtual

Definition at line 53 of file rpcClient.cpp.

53 { return "RPCClient::RPCRequester"; }
epics::pvAccess::RPCClient::RPCRequester::POINTER_DEFINITIONS ( RPCRequester  )
virtual void epics::pvAccess::RPCClient::RPCRequester::requestDone ( const pvd::Status status,
ChannelRPC::shared_pointer const &  operation,
pvd::PVStructure::shared_pointer const &  pvResponse 
)
inlinevirtual

Definition at line 81 of file rpcClient.cpp.

85  {
86  TRACE("status="<<status<<" response:\n"<<pvResponse<<"\n");
87  {
88  pvd::Lock L(mutex);
89  if(!inprogress) {
90  std::cerr<<"pva provider give RPC requestDone() when no request in progress\n";
91  } else {
93  last_data = pvResponse;
94  if(resp_status.isSuccess() && !last_data) {
95  resp_status = pvd::Status::error("No reply data");
96  }
97  inprogress = false;
98  }
99  }
100  event.signal();
101  }
pvd::Status status
static Status error(const std::string &m)
Definition: status.h:50
A lock for multithreading.
Definition: lock.h:36
epics::pvData::PVStructure::shared_pointer last_data
Definition: rpcClient.cpp:41
bool isSuccess() const
Definition: status.h:103
#define TRACE(msg)
Definition: rpcClient.cpp:26

Member Data Documentation

pvd::Status epics::pvAccess::RPCClient::RPCRequester::conn_status

Definition at line 40 of file rpcClient.cpp.

epicsEvent epics::pvAccess::RPCClient::RPCRequester::event

Definition at line 42 of file rpcClient.cpp.

bool epics::pvAccess::RPCClient::RPCRequester::inprogress

Definition at line 43 of file rpcClient.cpp.

bool epics::pvAccess::RPCClient::RPCRequester::last

Definition at line 43 of file rpcClient.cpp.

epics::pvData::PVStructure::shared_pointer epics::pvAccess::RPCClient::RPCRequester::last_data

Definition at line 41 of file rpcClient.cpp.

pvd::Mutex epics::pvAccess::RPCClient::RPCRequester::mutex

Definition at line 38 of file rpcClient.cpp.

epics::pvData::PVStructure::shared_pointer epics::pvAccess::RPCClient::RPCRequester::next_args

Definition at line 41 of file rpcClient.cpp.

ChannelRPC::shared_pointer epics::pvAccess::RPCClient::RPCRequester::op

Definition at line 39 of file rpcClient.cpp.

pvd::Status epics::pvAccess::RPCClient::RPCRequester::resp_status

Definition at line 40 of file rpcClient.cpp.


The documentation for this struct was generated from the following file: