13 #ifdef epicsExportSharedSymbols 14 # define pvaClientEpicsExportSharedSymbols 15 # undef epicsExportSharedSymbols 37 #ifdef pvaClientEpicsExportSharedSymbols 38 # define epicsExportSharedSymbols 39 # undef pvaClientEpicsExportSharedSymbols 44 namespace epics {
namespace pvaClient {
107 public epics::pvData::Requester,
108 public std::tr1::enable_shared_from_this<PvaClient>
121 static PvaClientPtr
get(std::string
const & providerNames =
"pva ca");
131 std::string getRequesterName();
140 std::string
const & message,
150 PvaClientChannelPtr channel(
151 std::string
const & channelName,
152 std::string
const &providerName =
"pva",
153 double timeOut = 5.0);
161 PvaClientChannelPtr createChannel(
162 std::string
const & channelName,
163 std::string
const & providerName =
"pva");
173 void clearRequester();
184 static void setDebug(
bool value);
189 static bool getDebug();
191 PvaClient(std::string
const & providerNames);
192 PvaClientChannelCachePtr pvaClientChannelCache;
193 epics::pvData::Requester::weak_pointer
requester;
197 epics::pvAccess::ChannelProviderRegistry::shared_pointer channelRegistry;
228 virtual void channelStateChange(PvaClientChannelPtr
const & channel,
bool isConnected) = 0;
239 public std::tr1::enable_shared_from_this<PvaClientChannel>
251 void setStateChangeRequester(PvaClientChannelStateChangeRequesterPtr
const &stateChangeRequester);
256 std::string getChannelName();
261 epics::pvAccess::Channel::shared_pointer getChannel();
268 void connect(
double timeout=5.0);
285 PvaClientFieldPtr createField(std::string
const & subField =
"");
292 PvaClientProcessPtr createProcess(std::string
const &
request =
"");
306 PvaClientGetPtr
get(std::string
const &
request =
"field(value,alarm,timeStamp)");
314 PvaClientGetPtr createGet(std::string
const & request =
"field(value,alarm,timeStamp)");
329 double getDouble(std::string
const & request =
"field(value)");
336 std::string getString(std::string
const & request =
"field(value)");
344 std::string
const & request =
"field(value)");
352 std::string
const & request =
"field(value)");
361 PvaClientPutPtr
put(std::string
const & request =
"field(value)");
369 PvaClientPutPtr createPut(std::string
const & request =
"field(value)");
382 void putDouble(
double value,std::string
const & request =
"field(value)");
389 void putString(std::string
const & value,std::string
const & request =
"field(value)");
398 std::string
const & request =
"field(value)");
407 std::string
const & request =
"field(value)");
413 void putStringArray(std::vector<std::string>
const & value,std::string
const & request =
"field(value)");
421 PvaClientPutGetPtr createPutGet(
422 std::string
const & request =
"putField(argument)getField(result)");
436 PvaClientArrayPtr createArray(std::string
const & request =
"field(value)");
452 PvaClientMonitorPtr monitor(std::string
const & request =
"field(value,alarm,timeStamp)");
459 PvaClientMonitorPtr monitor(PvaClientMonitorRequesterPtr
const & pvaClientMonitorRequester);
469 PvaClientMonitorPtr monitor(
470 std::string
const & request,
471 PvaClientMonitorRequesterPtr
const & pvaClientMonitorRequester);
479 PvaClientMonitorPtr createMonitor(
480 std::string
const & request =
"field(value,alarm,timeStamp)");
511 PvaClientRPCPtr createRPC();
527 static PvaClientChannelPtr create(
528 PvaClientPtr
const &pvaClient,
529 std::string
const & channelName,
530 std::string
const & providerName);
532 PvaClientPtr
const &pvaClient,
533 std::string
const & channelName,
534 std::string
const & providerName);
536 enum ConnectState {connectIdle,connectActive,notConnected,connected};
538 PvaClient::weak_pointer pvaClient;
539 std::string channelName;
540 std::string providerName;
541 ConnectState connectState;
544 PvaClientGetCachePtr pvaClientGetCache;
545 PvaClientPutCachePtr pvaClientPutCache;
549 epics::pvAccess::Channel::shared_pointer channel;
550 epics::pvAccess::ChannelProvider::shared_pointer channelProvider;
551 PvaClientChannelStateChangeRequesterWPtr stateChangeRequester;
553 virtual std::string getRequesterName();
555 virtual void channelCreated(
557 epics::pvAccess::Channel::shared_pointer
const & channel);
558 virtual void channelStateChange(
559 epics::pvAccess::Channel::shared_pointer
const & channel,
582 void setMessagePrefix(std::string
const &
value);
607 std::ostream & showChanged(std::ostream & out);
625 bool isValueScalar();
629 bool isValueScalarArray();
645 std::tr1::shared_ptr<epics::pvData::PVArray> getArrayValue();
650 std::tr1::shared_ptr<epics::pvData::PVScalarArray> getScalarArrayValue();
660 std::string getString();
691 void parse(
const std::vector<std::string> &args);
702 bool ignoreUnprintable =
true,
703 bool multiLine =
false);
706 void zeroArrayLength();
721 const std::string &arg,
725 const std::string &arg,
785 void putDouble(
double value);
790 void putString(std::string
const & value);
805 void putStringArray(std::vector<std::string>
const & value);
813 void postPut(
size_t fieldNumber);
814 std::vector<epics::pvData::PostHandlerPtr> postHandler;
843 std::ostream & showOverrun(std::ostream & out);
878 PvaClientProcessPtr
const & clientProcess)
886 virtual void processDone(
888 PvaClientProcessPtr
const & clientProcess) = 0;
902 public std::tr1::enable_shared_from_this<PvaClientProcess>
912 static PvaClientProcessPtr create(
913 PvaClientPtr
const &pvaClient,
914 PvaClientChannelPtr
const & pvaClientChannel,
924 void setRequester(PvaClientProcessRequesterPtr
const & pvaClientProcessRequester);
956 PvaClientChannelPtr getPvaClientChannel();
958 std::string getRequesterName();
960 void channelProcessConnect(
962 epics::pvAccess::ChannelProcess::shared_pointer
const & channelProcess);
965 epics::pvAccess::ChannelProcess::shared_pointer
const & channelProcess);
968 PvaClientPtr
const &pvaClient,
969 PvaClientChannelPtr
const & pvaClientChannel,
972 void checkProcessState();
973 enum ProcessConnectState {connectIdle,connectActive,connected};
975 PvaClient::weak_pointer pvaClient;
976 PvaClientChannelPtr pvaClientChannel;
984 epics::pvAccess::ChannelProcess::shared_pointer channelProcess;
986 ProcessConnectState connectState;
988 PvaClientProcessRequesterWPtr pvaClientProcessRequester;
989 enum ProcessState {processIdle,processActive,processComplete};
990 ProcessState processState;
991 ChannelProcessRequesterImplPtr channelProcessRequester;
1018 PvaClientGetPtr
const & clientGet)
1026 virtual void getDone(
1028 PvaClientGetPtr
const & clientGet) = 0;
1036 public std::tr1::enable_shared_from_this<PvaClientGet>
1046 static PvaClientGetPtr create(
1047 PvaClientPtr
const &pvaClient,
1048 PvaClientChannelPtr
const & pvaClientChannel,
1058 void setRequester(PvaClientGetRequesterPtr
const & pvaClientGetRequester);
1070 void issueConnect();
1090 PvaClientGetDataPtr getData();
1095 PvaClientChannelPtr getPvaClientChannel();
1097 std::string getRequesterName();
1099 void channelGetConnect(
1101 epics::pvAccess::ChannelGet::shared_pointer
const & channelGet,
1105 epics::pvAccess::ChannelGet::shared_pointer
const & channelGet,
1110 PvaClientPtr
const &pvaClient,
1111 PvaClientChannelPtr
const & pvaClientChannel,
1114 void checkConnectState();
1115 enum GetConnectState {connectIdle,connectActive,connected};
1117 PvaClient::weak_pointer pvaClient;
1118 PvaClientChannelPtr pvaClientChannel;
1123 PvaClientGetDataPtr pvaClientData;
1127 epics::pvAccess::ChannelGet::shared_pointer channelGet;
1129 GetConnectState connectState;
1131 PvaClientGetRequesterWPtr pvaClientGetRequester;
1133 enum GetState {getIdle,getActive,getComplete};
1135 ChannelGetRequesterImplPtr channelGetRequester;
1163 PvaClientPutPtr
const & clientPut)
1173 PvaClientPutPtr
const & clientPut)
1181 virtual void putDone(
1183 PvaClientPutPtr
const & clientPut) = 0;
1192 public std::tr1::enable_shared_from_this<PvaClientPut>
1202 static PvaClientPutPtr create(
1203 PvaClientPtr
const &pvaClient,
1204 PvaClientChannelPtr
const & pvaClientChannel,
1213 void setRequester(PvaClientPutRequesterPtr
const & pvaClientPutRequester);
1224 void issueConnect();
1257 PvaClientPutDataPtr getData();
1262 PvaClientChannelPtr getPvaClientChannel();
1264 std::string getRequesterName();
1266 void channelPutConnect(
1268 epics::pvAccess::ChannelPut::shared_pointer
const & channelPut,
1272 epics::pvAccess::ChannelPut::shared_pointer
const & channelPut,
1277 epics::pvAccess::ChannelPut::shared_pointer
const & channelPut);
1279 PvaClientPtr
const &pvaClient,
1280 PvaClientChannelPtr
const & pvaClientChannel,
1283 void checkConnectState();
1284 enum PutConnectState {connectIdle,connectActive,connected};
1286 PvaClient::weak_pointer pvaClient;
1287 PvaClientChannelPtr pvaClientChannel;
1292 PvaClientPutDataPtr pvaClientData;
1296 epics::pvAccess::ChannelPut::shared_pointer channelPut;
1297 PutConnectState connectState;
1299 enum PutState {putIdle,getActive,putActive,putComplete};
1301 ChannelPutRequesterImplPtr channelPutRequester;
1302 PvaClientPutRequesterWPtr pvaClientPutRequester;
1329 PvaClientPutGetPtr
const & clientPutGet)
1337 virtual void putGetDone(
1339 PvaClientPutGetPtr
const & clientPutGet) = 0;
1347 PvaClientPutGetPtr
const & clientPutGet)
1357 PvaClientPutGetPtr
const & clientPutGet)
1370 public std::tr1::enable_shared_from_this<PvaClientPutGet>
1380 static PvaClientPutGetPtr create(
1381 PvaClientPtr
const &pvaClient,
1382 PvaClientChannelPtr
const & pvaClientChannel,
1391 void setRequester(PvaClientPutGetRequesterPtr
const & pvaClientPutGetRequester);
1404 void issueConnect();
1451 PvaClientPutDataPtr getPutData();
1455 PvaClientGetDataPtr getGetData();
1460 PvaClientChannelPtr getPvaClientChannel();
1462 std::string getRequesterName();
1464 void channelPutGetConnect(
1466 epics::pvAccess::ChannelPutGet::shared_pointer
const & channelPutGet,
1471 epics::pvAccess::ChannelPutGet::shared_pointer
const & channelPutGet,
1476 epics::pvAccess::ChannelPutGet::shared_pointer
const & channelPutGet,
1478 epics::pvData::BitSet::shared_pointer
const & putBitSet);
1481 epics::pvAccess::ChannelPutGet::shared_pointer
const & channelPutGet,
1483 epics::pvData::BitSet::shared_pointer
const & getBitSet);
1486 PvaClientPtr
const &pvaClient,
1487 PvaClientChannelPtr
const & pvaClientChannel,
1489 void checkPutGetState();
1490 enum PutGetConnectState {connectIdle,connectActive,connected};
1492 PvaClient::weak_pointer pvaClient;
1493 PvaClientChannelPtr pvaClientChannel;
1498 PvaClientGetDataPtr pvaClientGetData;
1499 PvaClientPutDataPtr pvaClientPutData;
1503 epics::pvAccess::ChannelPutGet::shared_pointer channelPutGet;
1504 PutGetConnectState connectState;
1506 enum PutGetState {putGetIdle,putGetActive,putGetComplete};
1507 PutGetState putGetState;
1508 ChannelPutGetRequesterImplPtr channelPutGetRequester;
1509 PvaClientPutGetRequesterWPtr pvaClientPutGetRequester;
1538 virtual void event(PvaClientMonitorPtr
const & monitor) = 0;
1545 std::cerr <<
"PvaClientMonitorRequester::unlisten called" 1546 <<
" but no PvaClientMonitorRequester::unlisten\n";
1564 public std::tr1::enable_shared_from_this<PvaClientMonitor>
1574 static PvaClientMonitorPtr create(
1575 PvaClientPtr
const &pvaClient,
1576 PvaClientChannelPtr
const & pvaClientChannel,
1589 static PvaClientMonitorPtr create(
1590 PvaClientPtr
const &pvaClient,
1591 std::string
const & channelName,
1592 std::string
const & providerName,
1594 PvaClientChannelStateChangeRequesterPtr
const & stateChangeRequester
1596 PvaClientMonitorRequesterPtr
const & monitorRequester
1613 void issueConnect();
1621 void setRequester(PvaClientMonitorRequesterPtr
const & pvaClientMonitorRequester);
1630 void start(
const std::string & request);
1646 bool waitEvent(
double secondsToWait = 0.0);
1649 void releaseEvent();
1654 PvaClientChannelPtr getPvaClientChannel();
1659 PvaClientMonitorDataPtr getData();
1661 std::string getRequesterName();
1663 void monitorConnect(
1671 PvaClientPtr
const &pvaClient,
1672 PvaClientChannelPtr
const & pvaClientChannel,
1675 void checkMonitorState();
1676 enum MonitorConnectState {connectIdle,connectWait,connectActive,connected};
1678 PvaClient::weak_pointer pvaClient;
1679 PvaClientChannelPtr pvaClientChannel;
1684 PvaClientMonitorDataPtr pvaClientData;
1691 PvaClientMonitorRequesterWPtr pvaClientMonitorRequester;
1692 MonitorConnectState connectState;
1695 MonitorRequesterImplPtr monitorRequester;
1696 PvaClientChannelStateChangeRequesterWPtr pvaClientChannelStateChangeRequester;
1698 void channelStateChange(PvaClientChannelPtr
const & channel,
bool isConnected);
1699 void event(PvaClientMonitorPtr
const & monitor);
1721 virtual void requestDone(
1723 PvaClientRPCPtr
const & pvaClientRPC,
1724 epics::pvData::PVStructure::shared_pointer
const & pvResponse) = 0;
1737 public std::tr1::enable_shared_from_this<PvaClientRPC>
1746 static PvaClientRPCPtr create(
1747 PvaClientPtr
const &pvaClient,
1748 epics::pvAccess::Channel::shared_pointer
const & channel);
1755 static PvaClientRPCPtr create(
1756 PvaClientPtr
const &pvaClient,
1757 epics::pvAccess::Channel::shared_pointer
const & channel,
1769 this->responseTimeout = responseTimeout;
1777 return responseTimeout;
1790 void issueConnect();
1803 epics::pvData::PVStructure::shared_pointer
request(
1804 epics::pvData::PVStructure::shared_pointer
const & pvArgument);
1811 epics::pvData::PVStructure::shared_pointer
const & pvArgument,
1812 PvaClientRPCRequesterPtr
const & pvaClientRPCRequester);
1815 PvaClientPtr
const &pvaClient,
1816 epics::pvAccess::Channel::shared_pointer
const & channel,
1818 std::string getRequesterName();
1822 epics::pvAccess::ChannelRPC::shared_pointer
const & channelRPC);
1825 epics::pvAccess::ChannelRPC::shared_pointer
const & channelRPC,
1826 epics::pvData::PVStructure::shared_pointer
const & pvResponse);
1828 void checkRPCState();
1830 enum RPCConnectState {connectIdle,connectActive,connected};
1832 RPCConnectState connectState;
1834 PvaClient::weak_pointer pvaClient;
1835 epics::pvAccess::Channel::weak_pointer channel;
1842 PvaClientRPCRequesterWPtr pvaClientRPCRequester;
1843 RPCRequesterImplPtr rpcRequester;
1844 epics::pvAccess::ChannelRPC::shared_pointer channelRPC;
1847 enum RPCState {rpcIdle,rpcActive,rpcComplete};
1850 double responseTimeout;
std::tr1::shared_ptr< PvaClient > PvaClientPtr
Optional client callback.
C++ wrapper for epicsEvent from EPICS base.
Methods for manipulating alarm.
std::tr1::shared_ptr< detail::SharedPut > put
std::tr1::shared_ptr< PvaClientProcessRequester > PvaClientProcessRequesterPtr
An easy to use alternative to ChannelProcess.
A holder for a contiguous piece of memory.
std::tr1::shared_ptr< ChannelProcessRequesterImpl > ChannelProcessRequesterImplPtr
std::tr1::shared_ptr< PvaClientGetData > PvaClientGetDataPtr
virtual void channelProcessConnect(const epics::pvData::Status &status, PvaClientProcessPtr const &clientProcess)
A channelProcess has connected.
std::tr1::weak_ptr< PvaClientRPCRequester > PvaClientRPCRequesterWPtr
A class that holds data given to by PvaClientPut or PvaClientPutGet.
std::tr1::shared_ptr< PvaClientMonitorData > PvaClientMonitorDataPtr
std::tr1::shared_ptr< PvaClientChannel > PvaClientChannelPtr
std::tr1::shared_ptr< Requester > RequesterPtr
virtual void getGetDone(const epics::pvData::Status &status, PvaClientPutGetPtr const &clientPutGet)
A getGet request is complete.
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
std::tr1::weak_ptr< PvaClientGetRequester > PvaClientGetRequesterWPtr
std::tr1::weak_ptr< PvaClientPutGetRequester > PvaClientPutGetRequesterWPtr
std::tr1::shared_ptr< ChannelGetRequesterImpl > ChannelGetRequesterImplPtr
Mark external symbols and entry points for shared libraries.
virtual void channelPutConnect(const epics::pvData::Status &status, PvaClientPutPtr const &clientPut)
A channelPut has connected.
An easy to use alternative to RPC.
A class that holds data returned by PvaClientGet or PvaClientPutGet.
PVStructure::shared_pointer createRequest(std::string const &request)
std::tr1::shared_ptr< PvaClientPut > PvaClientPutPtr
std::tr1::weak_ptr< PvaClientChannelStateChangeRequester > PvaClientChannelStateChangeRequesterWPtr
Optional client callback.
virtual void channelPutGetConnect(const epics::pvData::Status &status, PvaClientPutGetPtr const &clientPutGet)
A channelPutGet has connected.
virtual ~PvaClientProcessRequester()
std::tr1::shared_ptr< PVUnion > PVUnionPtr
virtual ~PvaClientGetRequester()
std::tr1::shared_ptr< PvaClientPutRequester > PvaClientPutRequesterPtr
#define POINTER_DEFINITIONS(clazz)
virtual ~PvaClientMonitorRequester()
A base class for PvaClientGetData, PvaClientPutData, and PvaClientMonitorData.
std::tr1::shared_ptr< PvaClientMonitorRequester > PvaClientMonitorRequesterPtr
virtual ~PvaClientPutGetRequester()
std::tr1::shared_ptr< PvaClientArray > PvaClientArrayPtr
~PvaClientGetData()
Destructor.
std::tr1::weak_ptr< PvaClientPutRequester > PvaClientPutRequesterWPtr
const ChannelProcessRequester::weak_pointer requester
Methods for accessing a timeStamp structure.
~PvaClientMonitorData()
Destructor.
std::tr1::shared_ptr< PVScalar > PVScalarPtr
std::tr1::shared_ptr< PvaClientPutGetRequester > PvaClientPutGetRequesterPtr
std::tr1::weak_ptr< PvaClientMonitorRequester > PvaClientMonitorRequesterWPtr
Methods for accessing an alarm structure.
~PvaClientData()
Destructor.
~PvaClientPutData()
Destructor.
void setResponseTimeout(double responseTimeout)
Set a timeout for a request.
std::tr1::shared_ptr< PvaClientField > PvaClientFieldPtr
virtual void unlisten()
The data source is no longer available.
pvaClient is a synchronous wrapper for the pvAccess API, which is a callback based API...
virtual ~PvaClientRPCRequester()
std::tr1::shared_ptr< PvaClientGet > PvaClientGetPtr
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< MonitorRequesterImpl > MonitorRequesterImplPtr
std::tr1::shared_ptr< RPCRequesterImpl > RPCRequesterImplPtr
Optional client callback.
A class that holds data returned by PvaClientMonitor.
Optional client callback.
std::tr1::shared_ptr< PvaClientRPC > PvaClientRPCPtr
An easy to use alternative to ChannelGet.
std::tr1::shared_ptr< PvaClientChannelStateChangeRequester > PvaClientChannelStateChangeRequesterPtr
Optional client callback.
An easy to use alternative to ChannelPut.
std::tr1::shared_ptr< PVField > PVFieldPtr
std::tr1::shared_ptr< PvaClientPutCache > PvaClientPutCachePtr
An easy to use alternative to directly calling the Channel methods of pvAccess.
virtual void getDone(const epics::pvData::Status &status, PvaClientPutPtr const &clientPut)
A get request is complete.
struct rset rset EPICS_DEPRECATED
std::string messagePrefix
std::tr1::shared_ptr< PvaClientProcess > PvaClientProcessPtr
virtual ~PvaClientChannelStateChangeRequester()
std::tr1::shared_ptr< PvaClientPutGet > PvaClientPutGetPtr
std::tr1::shared_ptr< MonitorElement > MonitorElementPtr
std::tr1::shared_ptr< BitSet > BitSetPtr
std::tr1::shared_ptr< PvaClientGetCache > PvaClientGetCachePtr
std::tr1::shared_ptr< PvaClientRPCRequester > PvaClientRPCRequesterPtr
std::tr1::shared_ptr< ChannelPutGetRequesterImpl > ChannelPutGetRequesterImplPtr
std::tr1::shared_ptr< PvaClientChannelCache > PvaClientChannelCachePtr
virtual void channelGetConnect(const epics::pvData::Status &status, PvaClientGetPtr const &clientGet)
A channelGet has connected.
An easy to use alternative to ChannelPutGet.
A callback for change in connection status.
std::tr1::shared_ptr< ChannelPutRequesterImpl > ChannelPutRequesterImplPtr
Optional client callback.
An easy to use alternative to Monitor.
std::tr1::shared_ptr< PvaClientMonitor > PvaClientMonitorPtr
virtual void monitorConnect(epics::pvData::Status const &status, PvaClientMonitorPtr const &monitor, epics::pvData::StructureConstPtr const &structure)
The server has returned a message that the monitor is connected.
virtual void getPutDone(const epics::pvData::Status &status, PvaClientPutGetPtr const &clientPutGet)
A getPut request is complete.
std::tr1::shared_ptr< PvaClientPutData > PvaClientPutDataPtr
double getResponseTimeout()
Get the responseTimeout.
virtual ~PvaClientPutRequester()
std::tr1::shared_ptr< Monitor > MonitorPtr
Methods for manipulating timeStamp.
std::tr1::shared_ptr< PvaClientData > PvaClientDataPtr
std::tr1::weak_ptr< PvaClientProcessRequester > PvaClientProcessRequesterWPtr
std::tr1::shared_ptr< PvaClientGetRequester > PvaClientGetRequesterPtr