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

PvaMultiChannel is a synchronous interface for accessing multiple channels. More...

#include "pvaClientMultiChannel.h"

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

Public Member Functions

 POINTER_DEFINITIONS (PvaClientMultiChannel)
 
 ~PvaClientMultiChannel ()
 Destructor. More...
 
epics::pvData::shared_vector< const std::string > getChannelNames ()
 Get the channelNames. More...
 
epics::pvData::Status connect (double timeout=5)
 Connect to the channels. More...
 
bool allConnected ()
 Are all channels connected? More...
 
bool connectionChange ()
 Has a connection state change occured? More...
 
epics::pvData::shared_vector< epics::pvData::booleangetIsConnected ()
 Get the connection state of each channel. More...
 
PvaClientChannelArray getPvaClientChannelArray ()
 Get the pvaClientChannelArray. More...
 
PvaClientPtr getPvaClient ()
 Get pvaClient. More...
 
PvaClientMultiGetDoublePtr createGet ()
 create a pvaClientMultiGetDouble More...
 
PvaClientMultiPutDoublePtr createPut ()
 Create a pvaClientMultiPutDouble. More...
 
PvaClientMultiMonitorDoublePtr createMonitor ()
 Create a pvaClientMultiMonitorDouble. More...
 
PvaClientNTMultiPutPtr createNTPut ()
 Create a pvaClientNTMultiPut. More...
 
PvaClientNTMultiGetPtr createNTGet (std::string const &request="field(value,alarm,timeStamp)")
 Create a pvaClientNTMultiGet;. More...
 
PvaClientNTMultiMonitorPtr createNTMonitor (std::string const &request="field(value,alarm,timeStamp)")
 Create a pvaClientNTMultiPut. More...
 

Static Public Member Functions

static PvaClientMultiChannelPtr create (PvaClientPtr const &pvaClient, epics::pvData::shared_vector< const std::string > const &channelNames, std::string const &providerName="pva", size_t maxNotConnected=0)
 Create a PvaClientMultiChannel. More...
 

Detailed Description

PvaMultiChannel is a synchronous interface for accessing multiple channels.

Author
mrk

Definition at line 60 of file pvaClientMultiChannel.h.

Constructor & Destructor Documentation

epics::pvaClient::PvaClientMultiChannel::~PvaClientMultiChannel ( )

Destructor.

Definition at line 58 of file pvaClientMultiChannel.cpp.

59 {
60  if(PvaClient::getDebug()) cout<< "PvaClientMultiChannel::~PvaClientMultiChannel()\n";
61 }
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97

Member Function Documentation

bool epics::pvaClient::PvaClientMultiChannel::allConnected ( )

Are all channels connected?

Returns
if all are connected.

Definition at line 101 of file pvaClientMultiChannel.cpp.

102 {
103  return (numConnected==numChannel) ? true : false;
104 }
Status epics::pvaClient::PvaClientMultiChannel::connect ( double  timeout = 5)

Connect to the channels.

This calls issueConnect and waitConnect. An exception is thrown if connect fails.

Parameters
timeoutThe time to wait for connecting to the channel.
Returns
status of request

Definition at line 73 of file pvaClientMultiChannel.cpp.

74 {
75  for(size_t i=0; i< numChannel; ++i) {
76  pvaClientChannelArray[i] = pvaClient->createChannel(channelName[i],providerName);
77  pvaClientChannelArray[i]->issueConnect();
78  }
79  Status returnStatus = Status::Ok;
80  Status status = Status::Ok;
81  size_t numBad = 0;
82  for(size_t i=0; i< numChannel; ++i) {
83  if(numBad==0) {
84  status = pvaClientChannelArray[i]->waitConnect(timeout);
85  } else {
86  status = pvaClientChannelArray[i]->waitConnect(.001);
87  }
88  if(status.isOK()) {
89  ++numConnected;
90  isConnected[i] = true;
91  continue;
92  }
93  if(returnStatus.isOK()) returnStatus = status;
94  ++numBad;
95  if(numBad>maxNotConnected) break;
96  }
97  return numBad>maxNotConnected ? returnStatus : Status::Ok;
98 }
double timeout
Definition: pvutils.cpp:25
pvd::Status status
int i
Definition: scan.c:967
bool isOK() const
Definition: status.h:95
bool epics::pvaClient::PvaClientMultiChannel::connectionChange ( )

Has a connection state change occured?

Returns
(true, false) if (at least one, no) channel has changed state.

Definition at line 106 of file pvaClientMultiChannel.cpp.

107 {
108  for(size_t i=0; i<numChannel; ++i) {
109  PvaClientChannelPtr pvaClientChannel = pvaClientChannelArray[i];
110  Channel::shared_pointer channel = pvaClientChannel->getChannel();
111  Channel::ConnectionState stateNow = channel->getConnectionState();
112  bool connectedNow = stateNow==Channel::CONNECTED ? true : false;
113  if(connectedNow!=isConnected[i]) return true;
114  }
115  return false;
116 }
int i
Definition: scan.c:967
std::tr1::shared_ptr< PvaClientChannel > PvaClientChannelPtr
Definition: pvaClient.h:59
PvaClientMultiChannelPtr epics::pvaClient::PvaClientMultiChannel::create ( PvaClientPtr const &  pvaClient,
epics::pvData::shared_vector< const std::string > const &  channelNames,
std::string const &  providerName = "pva",
size_t  maxNotConnected = 0 
)
static

Create a PvaClientMultiChannel.

Parameters
pvaClientThe interface to pvaClient.
channelNamesThe names of the channel..
providerNameThe name of the provider.
maxNotConnectedThe maximum number of channels that can be disconnected.
Returns
The interface to the PvaClientMultiChannel

Definition at line 29 of file pvaClientMultiChannel.cpp.

34 {
36  new PvaClientMultiChannel(pvaClient,channelNames,providerName,maxNotConnected));
37 }
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr
PvaClientMultiGetDoublePtr epics::pvaClient::PvaClientMultiChannel::createGet ( )

create a pvaClientMultiGetDouble

Returns
The interface.

Definition at line 145 of file pvaClientMultiChannel.cpp.

146 {
147  checkConnected();
148  return PvaClientMultiGetDouble::create(shared_from_this(),pvaClientChannelArray);
149 }
static PvaClientMultiGetDoublePtr create(PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray)
Create a PvaClientMultiGetDouble.
PvaClientMultiMonitorDoublePtr epics::pvaClient::PvaClientMultiChannel::createMonitor ( )

Create a pvaClientMultiMonitorDouble.

Returns
The interface.

Definition at line 159 of file pvaClientMultiChannel.cpp.

160 {
161  checkConnected();
162  return PvaClientMultiMonitorDouble::create(shared_from_this(), pvaClientChannelArray);
163 }
static PvaClientMultiMonitorDoublePtr create(PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray)
Create a PvaClientMultiMonitorDouble.
PvaClientNTMultiGetPtr epics::pvaClient::PvaClientMultiChannel::createNTGet ( std::string const &  request = "field(value,alarm,timeStamp)")

Create a pvaClientNTMultiGet;.

Parameters
requestThe request for each channel.
Returns
The interface.

Definition at line 172 of file pvaClientMultiChannel.cpp.

173 {
174  checkConnected();
175  PVStructurePtr pvRequest = createRequest->createRequest(request);
176  if(!pvRequest) {
177  string message = " PvaClientMultiChannel::createNTGet invalid pvRequest: "
178  + createRequest->getMessage();
179  throw std::runtime_error(message);
180  }
181  return PvaClientNTMultiGet::create(shared_from_this(), pvaClientChannelArray,pvRequest);
182 }
std::string request
static PvaClientNTMultiGetPtr create(PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray, epics::pvData::PVStructurePtr const &pvRequest)
Create a PvaClientNTMultiGet.
PVStructure::shared_pointer createRequest(std::string const &request)
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
PvaClientNTMultiMonitorPtr epics::pvaClient::PvaClientMultiChannel::createNTMonitor ( std::string const &  request = "field(value,alarm,timeStamp)")

Create a pvaClientNTMultiPut.

Parameters
requestThe request for each channel.
Returns
The interface.

Definition at line 184 of file pvaClientMultiChannel.cpp.

185 {
186  checkConnected();
187  PVStructurePtr pvRequest = createRequest->createRequest(request);
188  if(!pvRequest) {
189  string message = " PvaClientMultiChannel::createNTMonitor invalid pvRequest: "
190  + createRequest->getMessage();
191  throw std::runtime_error(message);
192  }
193  return PvaClientNTMultiMonitor::create(shared_from_this(), pvaClientChannelArray,pvRequest);
194 }
std::string request
PVStructure::shared_pointer createRequest(std::string const &request)
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
static PvaClientNTMultiMonitorPtr create(PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray, epics::pvData::PVStructurePtr const &pvRequest)
Create a PvaClientNTMultiMonitor.
PvaClientNTMultiPutPtr epics::pvaClient::PvaClientMultiChannel::createNTPut ( )

Create a pvaClientNTMultiPut.

Returns
The interface.

Definition at line 165 of file pvaClientMultiChannel.cpp.

166 {
167  checkConnected();
168  return PvaClientNTMultiPut::create(shared_from_this(), pvaClientChannelArray);
169 }
static PvaClientNTMultiPutPtr create(PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray)
Create a PvaClientNTMultiPut.
PvaClientMultiPutDoublePtr epics::pvaClient::PvaClientMultiChannel::createPut ( )

Create a pvaClientMultiPutDouble.

Returns
The interface.

Definition at line 152 of file pvaClientMultiChannel.cpp.

153 {
154  checkConnected();
155  return PvaClientMultiPutDouble::create(shared_from_this(),pvaClientChannelArray);
156 }
static PvaClientMultiPutDoublePtr create(PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray)
Create a PvaClientMultiPutDouble.
epics::pvData::shared_vector< const string > epics::pvaClient::PvaClientMultiChannel::getChannelNames ( )

Get the channelNames.

Returns
The names.

Definition at line 68 of file pvaClientMultiChannel.cpp.

69 {
70  return channelName;
71 }
epics::pvData::shared_vector< epics::pvData::boolean > epics::pvaClient::PvaClientMultiChannel::getIsConnected ( )

Get the connection state of each channel.

Returns
The state of each channel.

Definition at line 118 of file pvaClientMultiChannel.cpp.

119 {
120  for(size_t i=0; i<numChannel; ++i) {
121  PvaClientChannelPtr pvaClientChannel = pvaClientChannelArray[i];
122  if(!pvaClientChannel) {
123  isConnected[i] = false;
124  continue;
125  }
126  Channel::shared_pointer channel = pvaClientChannel->getChannel();
127  Channel::ConnectionState stateNow = channel->getConnectionState();
128  isConnected[i] = (stateNow==Channel::CONNECTED) ? true : false;
129  }
130  return isConnected;
131 }
int i
Definition: scan.c:967
std::tr1::shared_ptr< PvaClientChannel > PvaClientChannelPtr
Definition: pvaClient.h:59
PvaClientPtr epics::pvaClient::PvaClientMultiChannel::getPvaClient ( )

Get pvaClient.

Returns
The shared pointer.

Definition at line 138 of file pvaClientMultiChannel.cpp.

139 {
140  return pvaClient;
141 }
PvaClientChannelArray epics::pvaClient::PvaClientMultiChannel::getPvaClientChannelArray ( )

Get the pvaClientChannelArray.

Returns
The shared pointer.

Definition at line 133 of file pvaClientMultiChannel.cpp.

134 {
135  return pvaClientChannelArray;
136 }
epics::pvaClient::PvaClientMultiChannel::POINTER_DEFINITIONS ( PvaClientMultiChannel  )

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