This is Unofficial EPICS BASE Doxygen Site
epics::pvaClient::PvaClientProcess Class Reference

An easy to use alternative to ChannelProcess. More...

#include "pvaClient.h"

+ Inheritance diagram for epics::pvaClient::PvaClientProcess:
+ Collaboration diagram for epics::pvaClient::PvaClientProcess:

Public Member Functions

 POINTER_DEFINITIONS (PvaClientProcess)
 
 ~PvaClientProcess ()
 Destructor. More...
 
void setRequester (PvaClientProcessRequesterPtr const &pvaClientProcessRequester)
 Set a user callback. More...
 
void connect ()
 Call issueConnect and then waitConnect. More...
 
void issueConnect ()
 Issue the channelProcess connection to the channel. More...
 
epics::pvData::Status waitConnect ()
 Wait until the channelProcess connection to the channel is complete. More...
 
void process ()
 Call issueProcess and then waitProcess. More...
 
void issueProcess ()
 Issue a process request and return immediately. More...
 
epics::pvData::Status waitProcess ()
 Wait until process completes. More...
 
PvaClientChannelPtr getPvaClientChannel ()
 Get the PvaClientChannel;. More...
 

Static Public Member Functions

static PvaClientProcessPtr create (PvaClientPtr const &pvaClient, PvaClientChannelPtr const &pvaClientChannel, epics::pvData::PVStructurePtr const &pvRequest)
 Create a PvaClientProcess. More...
 

Friends

class ChannelProcessRequesterImpl
 

Detailed Description

An easy to use alternative to ChannelProcess.

Overview of PvaClientProcess

Definition at line 901 of file pvaClient.h.

Constructor & Destructor Documentation

epics::pvaClient::PvaClientProcess::~PvaClientProcess ( )

Destructor.

Definition at line 105 of file pvaClientProcess.cpp.

106 {
107  if(PvaClient::getDebug()) {
108  cout<< "PvaClientProcess::~PvaClientProcess()"
109  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
110  << endl;
111  }
112 }
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97

Member Function Documentation

void epics::pvaClient::PvaClientProcess::connect ( )

Call issueConnect and then waitConnect.

An exception is thrown if connect fails.

Exceptions
runtime_errorif failure.

Definition at line 185 of file pvaClientProcess.cpp.

186 {
187  if(PvaClient::getDebug()) {
188  cout << "PvaClientProcess::connect"
189  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
190  << endl;
191  }
192  issueConnect();
194  if(status.isOK()) return;
195  string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName()
196  + " PvaClientProcess::connect " + status.getMessage();
197  throw std::runtime_error(message);
198 }
pvd::Status status
const std::string & getMessage() const
Definition: status.h:80
bool isOK() const
Definition: status.h:95
epics::pvData::Status waitConnect()
Wait until the channelProcess connection to the channel is complete.
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97
void issueConnect()
Issue the channelProcess connection to the channel.
PvaClientProcessPtr epics::pvaClient::PvaClientProcess::create ( PvaClientPtr const &  pvaClient,
PvaClientChannelPtr const &  pvaClientChannel,
epics::pvData::PVStructurePtr const &  pvRequest 
)
static

Create a PvaClientProcess.

Parameters
pvaClientInterface to PvaClient
pvaClientChannelInterface to Channel
pvRequestThe request structure.
Returns
The interface to the PvaClientProcess.

Definition at line 70 of file pvaClientProcess.cpp.

74 {
75  if(PvaClient::getDebug()) {
76  cout<< "PvaClientProcess::create(pvaClient,channelName,pvRequest)\n"
77  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
78  << " pvRequest " << pvRequest
79  << endl;
80  }
81  PvaClientProcessPtr channelProcess(new PvaClientProcess(pvaClient,pvaClientChannel,pvRequest));
82  channelProcess->channelProcessRequester = ChannelProcessRequesterImplPtr(
83  new ChannelProcessRequesterImpl(channelProcess,pvaClient));
84  return channelProcess;
85 }
friend class ChannelProcessRequesterImpl
Definition: pvaClient.h:993
std::tr1::shared_ptr< ChannelProcessRequesterImpl > ChannelProcessRequesterImplPtr
Definition: pvaClient.h:893
std::tr1::shared_ptr< PvaClientProcess > PvaClientProcessPtr
Definition: pvaClient.h:66
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97
PvaClientChannelPtr epics::pvaClient::PvaClientProcess::getPvaClientChannel ( )

Get the PvaClientChannel;.

Returns
The interface.

Definition at line 304 of file pvaClientProcess.cpp.

305 {
306  return pvaClientChannel;
307 }
void epics::pvaClient::PvaClientProcess::issueConnect ( )

Issue the channelProcess connection to the channel.

This can only be called once.

Definition at line 200 of file pvaClientProcess.cpp.

201 {
202  if(PvaClient::getDebug()) {
203  cout << "PvaClientProcess::issueConnect"
204  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
205  << endl;
206  }
207  if(connectState!=connectIdle) {
208  string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName()
209  + " pvaClientProcess already connected ";
210  throw std::runtime_error(message);
211  }
212  connectState = connectActive;
213  channelProcessConnectStatus = Status(Status::STATUSTYPE_ERROR, "connect active");
214  channelProcess = pvaClientChannel->getChannel()->createChannelProcess(channelProcessRequester,pvRequest);
215 }
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97
void epics::pvaClient::PvaClientProcess::issueProcess ( )

Issue a process request and return immediately.

Definition at line 253 of file pvaClientProcess.cpp.

254 {
255  if(PvaClient::getDebug()) {
256  cout << "PvaClientProcess::issueProcess"
257  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
258  << endl;
259  }
260  if(connectState==connectIdle) connect();
261  if(processState==processActive) {
262  string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName()
263  + " PvaClientProcess::issueProcess process aleady active ";
264  throw std::runtime_error(message);
265  }
266  processState = processActive;
267  channelProcess->process();
268 }
void connect()
Call issueConnect and then waitConnect.
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97
epics::pvaClient::PvaClientProcess::POINTER_DEFINITIONS ( PvaClientProcess  )
void epics::pvaClient::PvaClientProcess::process ( )

Call issueProcess and then waitProcess.

An exception is thrown if process fails.

Definition at line 238 of file pvaClientProcess.cpp.

239 {
240  if(PvaClient::getDebug()) {
241  cout << "PvaClientProcess::process"
242  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
243  << endl;
244  }
245  issueProcess();
247  if(status.isOK()) return;
248  string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName()
249  + " PvaClientProcess::process" + status.getMessage();
250  throw std::runtime_error(message);
251 }
pvd::Status status
const std::string & getMessage() const
Definition: status.h:80
epics::pvData::Status waitProcess()
Wait until process completes.
void issueProcess()
Issue a process request and return immediately.
bool isOK() const
Definition: status.h:95
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97
void epics::pvaClient::PvaClientProcess::setRequester ( PvaClientProcessRequesterPtr const &  pvaClientProcessRequester)

Set a user callback.

Parameters
pvaClientProcessRequesterThe requester which must be implemented by the caller.

Definition at line 294 of file pvaClientProcess.cpp.

295 {
296  if(PvaClient::getDebug()) {
297  cout << "PvaClientProcess::setRequester"
298  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
299  << endl;
300  }
301  this->pvaClientProcessRequester = pvaClientProcessRequester;
302 }
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97
Status epics::pvaClient::PvaClientProcess::waitConnect ( )

Wait until the channelProcess connection to the channel is complete.

Returns
status;

Definition at line 217 of file pvaClientProcess.cpp.

218 {
219  if(PvaClient::getDebug()) {
220  cout << "PvaClientProcess::waitConnect"
221  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
222  << endl;
223  }
224  if(connectState==connected) {
225  if(!channelProcessConnectStatus.isOK()) connectState = connectIdle;
226  return channelProcessConnectStatus;
227  }
228  if(connectState!=connectActive) {
229  string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName()
230  + " pvaClientProcess illegal connect state ";
231  throw std::runtime_error(message);
232  }
233  waitForConnect.wait();
234  if(!channelProcessConnectStatus.isOK()) connectState = connectIdle;
235  return channelProcessConnectStatus;
236 }
bool isOK() const
Definition: status.h:95
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97
Status epics::pvaClient::PvaClientProcess::waitProcess ( )

Wait until process completes.

Returns
status.

Definition at line 270 of file pvaClientProcess.cpp.

271 {
272  if(PvaClient::getDebug()) {
273  cout << "PvaClientProcess::waitProcess"
274  << " channelName " << pvaClientChannel->getChannel()->getChannelName()
275  << endl;
276  }
277  {
278  Lock xx(mutex);
279  if(processState==processComplete) {
280  processState = processIdle;
281  return channelProcessStatus;
282  }
283  if(processState!=processActive){
284  string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName()
285  + " PvaClientProcess::waitProcess llegal process state";
286  throw std::runtime_error(message);
287  }
288  }
289  waitForProcess.wait();
290  processState = processComplete;
291  return channelProcessStatus;
292 }
A lock for multithreading.
Definition: lock.h:36
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97

Friends And Related Function Documentation

friend class ChannelProcessRequesterImpl
friend

Definition at line 993 of file pvaClient.h.


The documentation for this class was generated from the following files: