#include "rpcClient.h"
|
static shared_pointer | create (const std::string &serviceName, epics::pvData::PVStructure::shared_pointer const &pvRequest=epics::pvData::PVStructure::shared_pointer()) |
|
RPCClient is an interface class that is used by a service client.
Definition at line 39 of file rpcClient.h.
epics::pvAccess::RPCClient::RPCClient |
( |
const std::string & |
serviceName, |
|
|
epics::pvData::PVStructure::shared_pointer const & |
pvRequest, |
|
|
const ChannelProvider::shared_pointer & |
provider = ChannelProvider::shared_pointer() , |
|
|
const std::string & |
address = std::string() |
|
) |
| |
epics::pvAccess::RPCClient::~RPCClient |
( |
| ) |
|
|
inline |
Connect to the server. The method blocks until the connection is made or a timeout occurs. It is the same as calling issueConnect and then waitConnect.
- Parameters
-
timeout | Timeout in seconds to wait, 0 means forever. |
- Returns
- (false,true) If (not connected, is connected). If false then connect must be reissued.
Definition at line 159 of file rpcClient.cpp.
bool waitConnect(double timeout=RPCCLIENT_DEFAULT_TIMEOUT)
RPCClient::shared_pointer epics::pvAccess::RPCClient::create |
( |
const std::string & |
serviceName, |
|
|
epics::pvData::PVStructure::shared_pointer const & |
pvRequest = epics::pvData::PVStructure::shared_pointer() |
|
) |
| |
|
static |
Create a RPCClient.
- Parameters
-
serviceName | the service name |
pvRequest | the pvRequest for the ChannelRPC |
- Returns
- the RPCClient interface
Definition at line 266 of file rpcClient.cpp.
269 return RPCClient::shared_pointer(
new RPCClient(serviceName, pvRequest));
RPCClient(const std::string &serviceName, epics::pvData::PVStructure::shared_pointer const &pvRequest, const ChannelProvider::shared_pointer &provider=ChannelProvider::shared_pointer(), const std::string &address=std::string())
void epics::pvAccess::RPCClient::destroy |
( |
| ) |
|
Destroy this instance (i.e. release resources).
Definition at line 145 of file rpcClient.cpp.
149 m_channel->destroy();
void epics::pvAccess::RPCClient::issueConnect |
( |
| ) |
|
Issue a connect request and return immediately. waitConnect must be called to complete the request.
Definition at line 165 of file rpcClient.cpp.
void epics::pvAccess::RPCClient::issueRequest |
( |
epics::pvData::PVStructure::shared_pointer const & |
pvArgument, |
|
|
bool |
lastRequest = false |
|
) |
| |
Issue a channelRPC request and return immediately. waitRequest must be called to complete the request.
- Parameters
-
pvAgument | The argument to pass to the server. |
lastRequest | If true an automatic destroy is made. |
- Exceptions
-
std::runtime_error | excption thrown on any runtime error condition (e.g. no connection made). |
Definition at line 201 of file rpcClient.cpp.
207 TRACE(
"conn_status="<<m_rpc_requester->conn_status
208 <<
" resp_status="<<m_rpc_requester->resp_status
209 <<
" args:\n"<<pvArgument);
210 if(m_rpc_requester->inprogress)
211 throw std::logic_error(
"Request already in progress");
212 m_rpc_requester->inprogress =
true;
214 if(!m_rpc_requester->conn_status.isSuccess()) {
216 m_rpc_requester->last = lastRequest;
217 m_rpc_requester->next_args = pvArgument;
220 TRACE(
"request args: "<<pvArgument);
223 m_rpc->lastRequest();
224 m_rpc->request(pvArgument);
static Status error(const std::string &m)
A lock for multithreading.
epics::pvAccess::RPCClient::POINTER_DEFINITIONS |
( |
RPCClient |
| ) |
|
pvd::PVStructure::shared_pointer epics::pvAccess::RPCClient::request |
( |
epics::pvData::PVStructure::shared_pointer const & |
pvArgument, |
|
|
double |
timeout = RPCCLIENT_DEFAULT_TIMEOUT , |
|
|
bool |
lastRequest = false |
|
) |
| |
Sends a request and wait for the response or until timeout occurs. This method will also wait for client to connect, if necessary.
- Parameters
-
pvArgument | the argument for the rpc |
timeout | the time in seconds to wait for the response, 0 means forever. |
lastRequest | If true an automatic destroy is made. |
- Returns
- request response.
- Exceptions
-
Definition at line 187 of file rpcClient.cpp.
bool connect(double timeout=RPCCLIENT_DEFAULT_TIMEOUT)
epics::pvData::PVStructure::shared_pointer waitResponse(double timeout=RPCCLIENT_DEFAULT_TIMEOUT)
void issueRequest(epics::pvData::PVStructure::shared_pointer const &pvArgument, bool lastRequest=false)
Wait for the connect request to complete.
- Parameters
-
timeout | timeout in seconds to wait, 0 means forever. |
- Returns
- (false,true) If (not connected, is connected). If false then connect must be reissued.
Definition at line 169 of file rpcClient.cpp.
173 while(!m_rpc_requester->conn_status.isSuccess()) {
175 if(!m_rpc_requester->event.wait(
timeout)) {
A lock for multithreading.
Wait for the request to complete.
- Parameters
-
timeout | the time in seconds to wait for the reponse. |
- Returns
- request response.
- Exceptions
-
Definition at line 227 of file rpcClient.cpp.
232 while(m_rpc_requester->inprogress)
235 if(!m_rpc_requester->event.wait(
timeout)) {
241 TRACE(
"Complete: conn_status="<<m_rpc_requester->conn_status
242 <<
" resp_status="<<m_rpc_requester->resp_status
243 <<
" data:\n"<<m_rpc_requester->last_data);
245 if(!m_rpc_requester->conn_status.isSuccess())
248 if(!m_rpc_requester->resp_status.isSuccess())
252 pvd::PVStructure::shared_pointer data;
253 data.swap(m_rpc_requester->last_data);
256 throw std::logic_error(
"No request in progress");
260 pvd::PVStructure::shared_pointer ret(
pvd::getPVDataCreate()->createPVStructure(data->getStructure()));
261 ret->copyUnchecked(*data);
A lock for multithreading.
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
The documentation for this class was generated from the following files: