13 #ifdef epicsExportSharedSymbols 14 # define pvaClientEpicsExportSharedSymbols 15 # undef epicsExportSharedSymbols 22 #include <pv/requester.h> 23 #include <pv/status.h> 26 #include <pv/pvData.h> 27 #include <pv/pvTimeStamp.h> 28 #include <pv/timeStamp.h> 29 #include <pv/pvAlarm.h> 31 #include <pv/pvAccess.h> 32 #include <pv/standardField.h> 33 #include <pv/standardPVField.h> 34 #include <pv/createRequest.h> 37 #ifdef pvaClientEpicsExportSharedSymbols 38 # define epicsExportSharedSymbols 39 # undef pvaClientEpicsExportSharedSymbols 44 namespace epics {
namespace pvaClient {
93 class PvaClientChannelCache;
102 public epics::pvData::Requester,
103 public std::tr1::enable_shared_from_this<PvaClient>
116 static PvaClientPtr
get(std::string
const & providerNames =
"pva ca");
121 static PvaClientPtr create() EPICS_DEPRECATED;
130 std::string
const & message,
131 epics::pvData::MessageType messageType);
140 PvaClientChannelPtr channel(
141 std::string
const & channelName,
142 std::string
const &providerName =
"pva",
143 double timeOut = 5.0);
150 PvaClientChannelPtr createChannel(
151 std::string
const & channelName,
152 std::string
const & providerName =
"pva");
159 void setRequester(epics::pvData::RequesterPtr
const & requester);
166 std::string getRequesterName();
169 void clearRequester();
180 static void setDebug(
bool value);
185 static bool getDebug();
187 PvaClient(std::string
const & providerNames);
188 PvaClientChannelCachePtr pvaClientChannelCache;
189 epics::pvData::Requester::weak_pointer requester;
192 epics::pvData::Mutex mutex;
193 epics::pvAccess::ChannelProviderRegistry::shared_pointer channelRegistry;
197 class PvaClientGetCache;
199 class PvaClientPutCache;
223 virtual void channelStateChange(PvaClientChannelPtr
const & channel,
bool isConnected) = 0;
232 public epics::pvAccess::ChannelRequester,
233 public std::tr1::enable_shared_from_this<PvaClientChannel>
245 void setStateChangeRequester(PvaClientChannelStateChangeRequesterPtr
const &stateChangeRequester);
250 std::string getChannelName();
255 epics::pvAccess::Channel::shared_pointer getChannel();
262 void connect(
double timeout=5.0);
272 epics::pvData::Status waitConnect(
double timeout = 5.0);
279 PvaClientProcessPtr createProcess(std::string
const & request =
"");
286 PvaClientProcessPtr createProcess(epics::pvData::PVStructurePtr
const & pvRequest);
293 PvaClientGetPtr
get(std::string
const & request =
"field(value,alarm,timeStamp)");
301 PvaClientGetPtr createGet(std::string
const & request =
"field(value,alarm,timeStamp)");
309 PvaClientGetPtr createGet(epics::pvData::PVStructurePtr
const & pvRequest);
316 double getDouble(std::string
const & request =
"field(value)");
323 std::string getString(std::string
const & request =
"field(value)");
330 epics::pvData::shared_vector<const double> getDoubleArray(
331 std::string
const & request =
"field(value)");
338 epics::pvData::shared_vector<const std::string> getStringArray(
339 std::string
const & request =
"field(value)");
348 PvaClientPutPtr put(std::string
const & request =
"field(value)");
356 PvaClientPutPtr createPut(std::string
const & request =
"field(value)");
362 PvaClientPutPtr createPut(epics::pvData::PVStructurePtr
const & pvRequest);
369 void putDouble(
double value,std::string
const & request =
"field(value)");
376 void putString(std::string
const & value,std::string
const & request =
"field(value)");
384 epics::pvData::shared_vector<const double>
const & value,
385 std::string
const & request =
"field(value)");
393 epics::pvData::shared_vector<const std::string>
const & value,
394 std::string
const & request =
"field(value)");
400 void putStringArray(std::vector<std::string>
const & value,std::string
const & request =
"field(value)");
408 PvaClientPutGetPtr createPutGet(
409 std::string
const & request =
"putField(argument)getField(result)");
415 PvaClientPutGetPtr createPutGet(epics::pvData::PVStructurePtr
const & pvRequest);
425 PvaClientMonitorPtr monitor(std::string
const & request =
"field(value,alarm,timeStamp)");
432 PvaClientMonitorPtr monitor(PvaClientMonitorRequesterPtr
const & pvaClientMonitorRequester);
442 PvaClientMonitorPtr monitor(
443 std::string
const & request,
444 PvaClientMonitorRequesterPtr
const & pvaClientMonitorRequester);
452 PvaClientMonitorPtr createMonitor(
453 std::string
const & request =
"field(value,alarm,timeStamp)");
460 PvaClientMonitorPtr createMonitor(epics::pvData::PVStructurePtr
const & pvRequest);
468 epics::pvData::PVStructurePtr rpc(
469 epics::pvData::PVStructurePtr
const & pvRequest,
470 epics::pvData::PVStructurePtr
const & pvArgument);
477 epics::pvData::PVStructurePtr rpc(
478 epics::pvData::PVStructurePtr
const & pvArgument);
484 PvaClientRPCPtr createRPC();
492 PvaClientRPCPtr createRPC(epics::pvData::PVStructurePtr
const & pvRequest);
500 static PvaClientChannelPtr create(
501 PvaClientPtr
const &pvaClient,
502 std::string
const & channelName,
503 std::string
const & providerName);
505 PvaClientPtr
const &pvaClient,
506 std::string
const & channelName,
507 std::string
const & providerName);
509 enum ConnectState {connectIdle,connectActive,notConnected,connected};
511 PvaClient::weak_pointer pvaClient;
512 std::string channelName;
513 std::string providerName;
514 ConnectState connectState;
516 epics::pvData::CreateRequest::shared_pointer createRequest;
517 PvaClientGetCachePtr pvaClientGetCache;
518 PvaClientPutCachePtr pvaClientPutCache;
520 epics::pvData::Mutex mutex;
521 epics::pvData::Event waitForConnect;
522 epics::pvAccess::Channel::shared_pointer channel;
523 epics::pvAccess::ChannelProvider::shared_pointer channelProvider;
524 PvaClientChannelStateChangeRequesterWPtr stateChangeRequester;
526 virtual std::string getRequesterName();
527 virtual void message(std::string
const & message, epics::pvData::MessageType messageType);
528 virtual void channelCreated(
529 const epics::pvData::Status& status,
530 epics::pvAccess::Channel::shared_pointer
const & channel);
531 virtual void channelStateChange(
532 epics::pvAccess::Channel::shared_pointer
const & channel,
533 epics::pvAccess::Channel::ConnectionState connectionState);
554 void setMessagePrefix(std::string
const & value);
560 epics::pvData::StructureConstPtr getStructure();
566 epics::pvData::PVStructurePtr getPVStructure();
573 epics::pvData::BitSetPtr getChangedBitSet();
579 std::ostream & showChanged(std::ostream & out);
587 epics::pvData::PVStructurePtr
const & pvStructureFrom,
588 epics::pvData::BitSetPtr
const & bitSetFrom);
597 bool isValueScalar();
601 bool isValueScalarArray();
606 epics::pvData::PVFieldPtr getValue();
612 epics::pvData::PVScalarPtr getScalarValue();
617 std::tr1::shared_ptr<epics::pvData::PVArray> getArrayValue();
622 std::tr1::shared_ptr<epics::pvData::PVScalarArray> getScalarArrayValue();
632 std::string getString();
637 epics::pvData::shared_vector<const double> getDoubleArray();
642 epics::pvData::shared_vector<const std::string> getStringArray();
649 epics::pvData::Alarm getAlarm();
655 epics::pvData::TimeStamp getTimeStamp();
663 void parse(
const std::vector<std::string> &args);
674 bool ignoreUnprintable =
true,
675 bool multiLine =
false);
678 void zeroArrayLength();
680 static PvaClientDataPtr create(epics::pvData::StructureConstPtr
const & structure);
681 PvaClientData(epics::pvData::StructureConstPtr
const & structure);
682 epics::pvData::PVFieldPtr getSinglePVField();
687 const std::string &arg,
688 const epics::pvData::PVFieldPtr &dest,
689 epics::pvData::BitSetPtr &bitSet);
691 const std::string &arg,
692 const epics::pvData::PVUnionPtr &dest);
693 void zeroArrayLength(
const epics::pvData::PVStructurePtr &pvStructure);
695 epics::pvData::StructureConstPtr structure;
696 epics::pvData::PVStructurePtr pvStructure;
697 epics::pvData::BitSetPtr bitSet;
699 epics::pvData::PVFieldPtr pvValue;
700 epics::pvData::PVAlarm pvAlarm;
701 epics::pvData::PVTimeStamp pvTimeStamp;
724 static PvaClientGetDataPtr create(epics::pvData::StructureConstPtr
const & structure);
731 class PvaClientPostHandlerPvt;
749 void putDouble(
double value);
754 void putString(std::string
const & value);
759 void putDoubleArray(epics::pvData::shared_vector<const double>
const & value);
764 void putStringArray(epics::pvData::shared_vector<const std::string>
const & value);
769 void putStringArray(std::vector<std::string>
const & value);
774 static PvaClientPutDataPtr create(epics::pvData::StructureConstPtr
const & structure);
777 void postPut(
size_t fieldNumber);
778 std::vector<epics::pvData::PostHandlerPtr> postHandler;
779 friend class PvaClientPostHandlerPvt;
800 epics::pvData::BitSetPtr getOverrunBitSet();
805 std::ostream & showOverrun(std::ostream & out);
810 void setData(epics::pvData::MonitorElementPtr
const & monitorElement);
815 static PvaClientMonitorDataPtr create(epics::pvData::StructureConstPtr
const & structure);
818 epics::pvData::BitSetPtr overrunBitSet;
838 const epics::pvData::Status& status,
839 PvaClientProcessPtr
const & clientProcess)
847 virtual void processDone(
848 const epics::pvData::Status& status,
849 PvaClientProcessPtr
const & clientProcess) = 0;
854 class ChannelProcessRequesterImpl;
862 public std::tr1::enable_shared_from_this<PvaClientProcess>
872 static PvaClientProcessPtr create(
873 PvaClientPtr
const &pvaClient,
874 PvaClientChannelPtr
const & pvaClientChannel,
875 epics::pvData::PVStructurePtr
const &pvRequest
884 void setRequester(PvaClientProcessRequesterPtr
const & pvaClientProcessRequester);
899 epics::pvData::Status waitConnect();
911 epics::pvData::Status waitProcess();
916 PvaClientChannelPtr getPvaClientChannel();
918 std::string getRequesterName();
919 void message(std::string
const & message,epics::pvData::MessageType messageType);
920 void channelProcessConnect(
921 const epics::pvData::Status& status,
922 epics::pvAccess::ChannelProcess::shared_pointer
const & channelProcess);
924 const epics::pvData::Status& status,
925 epics::pvAccess::ChannelProcess::shared_pointer
const & channelProcess);
928 PvaClientPtr
const &pvaClient,
929 PvaClientChannelPtr
const & pvaClientChannel,
930 epics::pvData::PVStructurePtr
const &pvRequest);
932 void checkProcessState();
933 enum ProcessConnectState {connectIdle,connectActive,connected};
935 PvaClient::weak_pointer pvaClient;
936 PvaClientChannelPtr pvaClientChannel;
937 epics::pvData::PVStructurePtr pvRequest;
938 epics::pvData::Mutex mutex;
939 epics::pvData::Event waitForConnect;
940 epics::pvData::Event waitForProcess;
942 epics::pvData::Status channelProcessConnectStatus;
943 epics::pvData::Status channelProcessStatus;
944 epics::pvAccess::ChannelProcess::shared_pointer channelProcess;
946 ProcessConnectState connectState;
948 PvaClientProcessRequesterWPtr pvaClientProcessRequester;
949 enum ProcessState {processIdle,processActive,processComplete};
950 ProcessState processState;
951 ChannelProcessRequesterImplPtr channelProcessRequester;
953 friend class ChannelProcessRequesterImpl;
958 class ChannelGetRequesterImpl;
976 const epics::pvData::Status& status,
977 PvaClientGetPtr
const & clientGet)
985 virtual void getDone(
986 const epics::pvData::Status& status,
987 PvaClientGetPtr
const & clientGet) = 0;
994 public std::tr1::enable_shared_from_this<PvaClientGet>
1004 static PvaClientGetPtr create(
1005 PvaClientPtr
const &pvaClient,
1006 PvaClientChannelPtr
const & pvaClientChannel,
1007 epics::pvData::PVStructurePtr
const &pvRequest
1016 void setRequester(PvaClientGetRequesterPtr
const & pvaClientGetRequester);
1028 void issueConnect();
1032 epics::pvData::Status waitConnect();
1043 epics::pvData::Status waitGet();
1048 PvaClientGetDataPtr getData();
1053 PvaClientChannelPtr getPvaClientChannel();
1055 std::string getRequesterName();
1056 void message(std::string
const & message,epics::pvData::MessageType messageType);
1057 void channelGetConnect(
1058 const epics::pvData::Status& status,
1059 epics::pvAccess::ChannelGet::shared_pointer
const & channelGet,
1060 epics::pvData::StructureConstPtr
const & structure);
1062 const epics::pvData::Status& status,
1063 epics::pvAccess::ChannelGet::shared_pointer
const & channelGet,
1064 epics::pvData::PVStructurePtr
const & pvStructure,
1065 epics::pvData::BitSetPtr
const & bitSet);
1068 PvaClientPtr
const &pvaClient,
1069 PvaClientChannelPtr
const & pvaClientChannel,
1070 epics::pvData::PVStructurePtr
const &pvRequest);
1072 void checkConnectState();
1073 enum GetConnectState {connectIdle,connectActive,connected};
1075 PvaClient::weak_pointer pvaClient;
1076 PvaClientChannelPtr pvaClientChannel;
1077 epics::pvData::PVStructurePtr pvRequest;
1078 epics::pvData::Mutex mutex;
1079 epics::pvData::Event waitForConnect;
1080 epics::pvData::Event waitForGet;
1081 PvaClientGetDataPtr pvaClientData;
1083 epics::pvData::Status channelGetConnectStatus;
1084 epics::pvData::Status channelGetStatus;
1085 epics::pvAccess::ChannelGet::shared_pointer channelGet;
1087 GetConnectState connectState;
1089 PvaClientGetRequesterWPtr pvaClientGetRequester;
1091 enum GetState {getIdle,getActive,getComplete};
1093 ChannelGetRequesterImplPtr channelGetRequester;
1095 friend class ChannelGetRequesterImpl;
1101 class ChannelPutRequesterImpl;
1119 const epics::pvData::Status& status,
1120 PvaClientPutPtr
const & clientPut)
1129 const epics::pvData::Status& status,
1130 PvaClientPutPtr
const & clientPut)
1138 virtual void putDone(
1139 const epics::pvData::Status& status,
1140 PvaClientPutPtr
const & clientPut) = 0;
1148 public std::tr1::enable_shared_from_this<PvaClientPut>
1158 static PvaClientPutPtr create(
1159 PvaClientPtr
const &pvaClient,
1160 PvaClientChannelPtr
const & pvaClientChannel,
1161 epics::pvData::PVStructurePtr
const &pvRequest
1169 void setRequester(PvaClientPutRequesterPtr
const & pvaClientPutRequester);
1180 void issueConnect();
1184 epics::pvData::Status waitConnect();
1197 epics::pvData::Status waitGet();
1208 epics::pvData::Status waitPut();
1213 PvaClientPutDataPtr getData();
1218 PvaClientChannelPtr getPvaClientChannel();
1220 std::string getRequesterName();
1221 void message(std::string
const & message,epics::pvData::MessageType messageType);
1222 void channelPutConnect(
1223 const epics::pvData::Status& status,
1224 epics::pvAccess::ChannelPut::shared_pointer
const & channelPut,
1225 epics::pvData::StructureConstPtr
const & structure);
1227 const epics::pvData::Status& status,
1228 epics::pvAccess::ChannelPut::shared_pointer
const & channelPut,
1229 epics::pvData::PVStructurePtr
const & pvStructure,
1230 epics::pvData::BitSetPtr
const & bitSet);
1232 const epics::pvData::Status& status,
1233 epics::pvAccess::ChannelPut::shared_pointer
const & channelPut);
1235 PvaClientPtr
const &pvaClient,
1236 PvaClientChannelPtr
const & pvaClientChannel,
1237 epics::pvData::PVStructurePtr
const &pvRequest);
1239 void checkConnectState();
1240 enum PutConnectState {connectIdle,connectActive,connected};
1242 PvaClient::weak_pointer pvaClient;
1243 PvaClientChannelPtr pvaClientChannel;
1244 epics::pvData::PVStructurePtr pvRequest;
1245 epics::pvData::Mutex mutex;
1246 epics::pvData::Event waitForConnect;
1247 epics::pvData::Event waitForGetPut;
1248 PvaClientPutDataPtr pvaClientData;
1250 epics::pvData::Status channelPutConnectStatus;
1251 epics::pvData::Status channelGetPutStatus;
1252 epics::pvAccess::ChannelPut::shared_pointer channelPut;
1253 PutConnectState connectState;
1255 enum PutState {putIdle,getActive,putActive,putComplete};
1257 ChannelPutRequesterImplPtr channelPutRequester;
1258 PvaClientPutRequesterWPtr pvaClientPutRequester;
1260 friend class ChannelPutRequesterImpl;
1265 class ChannelPutGetRequesterImpl;
1283 const epics::pvData::Status& status,
1284 PvaClientPutGetPtr
const & clientPutGet)
1292 virtual void putGetDone(
1293 const epics::pvData::Status& status,
1294 PvaClientPutGetPtr
const & clientPutGet) = 0;
1301 const epics::pvData::Status& status,
1302 PvaClientPutGetPtr
const & clientPutGet)
1311 const epics::pvData::Status& status,
1312 PvaClientPutGetPtr
const & clientPutGet)
1324 public std::tr1::enable_shared_from_this<PvaClientPutGet>
1334 static PvaClientPutGetPtr create(
1335 PvaClientPtr
const &pvaClient,
1336 PvaClientChannelPtr
const & pvaClientChannel,
1337 epics::pvData::PVStructurePtr
const &pvRequest
1345 void setRequester(PvaClientPutGetRequesterPtr
const & pvaClientPutGetRequester);
1358 void issueConnect();
1362 epics::pvData::Status waitConnect();
1376 epics::pvData::Status waitPutGet();
1389 epics::pvData::Status waitGetGet();
1401 epics::pvData::Status waitGetPut();
1405 PvaClientPutDataPtr getPutData();
1409 PvaClientGetDataPtr getGetData();
1414 PvaClientChannelPtr getPvaClientChannel();
1416 std::string getRequesterName();
1417 void message(std::string
const & message,epics::pvData::MessageType messageType);
1418 void channelPutGetConnect(
1419 const epics::pvData::Status& status,
1420 epics::pvAccess::ChannelPutGet::shared_pointer
const & channelPutGet,
1421 epics::pvData::StructureConstPtr
const & putStructure,
1422 epics::pvData::StructureConstPtr
const & getStructure);
1424 const epics::pvData::Status& status,
1425 epics::pvAccess::ChannelPutGet::shared_pointer
const & channelPutGet,
1426 epics::pvData::PVStructurePtr
const & getPVStructure,
1427 epics::pvData::BitSetPtr
const & getBitSet);
1429 const epics::pvData::Status& status,
1430 epics::pvAccess::ChannelPutGet::shared_pointer
const & channelPutGet,
1431 epics::pvData::PVStructurePtr
const & putPVStructure,
1432 epics::pvData::BitSet::shared_pointer
const & putBitSet);
1434 const epics::pvData::Status& status,
1435 epics::pvAccess::ChannelPutGet::shared_pointer
const & channelPutGet,
1436 epics::pvData::PVStructurePtr
const & getPVStructure,
1437 epics::pvData::BitSet::shared_pointer
const & getBitSet);
1440 PvaClientPtr
const &pvaClient,
1441 PvaClientChannelPtr
const & pvaClientChannel,
1442 epics::pvData::PVStructurePtr
const &pvRequest);
1443 void checkPutGetState();
1444 enum PutGetConnectState {connectIdle,connectActive,connected};
1446 PvaClient::weak_pointer pvaClient;
1447 PvaClientChannelPtr pvaClientChannel;
1448 epics::pvData::PVStructurePtr pvRequest;
1449 epics::pvData::Mutex mutex;
1450 epics::pvData::Event waitForConnect;
1451 epics::pvData::Event waitForPutGet;
1452 PvaClientGetDataPtr pvaClientGetData;
1453 PvaClientPutDataPtr pvaClientPutData;
1455 epics::pvData::Status channelPutGetConnectStatus;
1456 epics::pvData::Status channelPutGetStatus;
1457 epics::pvAccess::ChannelPutGet::shared_pointer channelPutGet;
1458 PutGetConnectState connectState;
1460 enum PutGetState {putGetIdle,putGetActive,putGetComplete};
1461 PutGetState putGetState;
1462 ChannelPutGetRequesterImplPtr channelPutGetRequester;
1463 PvaClientPutGetRequesterWPtr pvaClientPutGetRequester;
1465 friend class ChannelPutGetRequesterImpl;
1483 PvaClientMonitorPtr
const & monitor, epics::pvData::StructureConstPtr
const & structure)
1490 virtual void event(PvaClientMonitorPtr
const & monitor) = 0;
1497 std::cerr <<
"PvaClientMonitorRequester::unlisten called" 1498 <<
" but no PvaClientMonitorRequester::unlisten\n";
1505 class MonitorRequesterImpl;
1515 public std::tr1::enable_shared_from_this<PvaClientMonitor>
1525 static PvaClientMonitorPtr create(
1526 PvaClientPtr
const &pvaClient,
1527 PvaClientChannelPtr
const & pvaClientChannel,
1528 epics::pvData::PVStructurePtr
const &pvRequest
1540 static PvaClientMonitorPtr create(
1541 PvaClientPtr
const &pvaClient,
1542 std::string
const & channelName,
1543 std::string
const & providerName,
1544 std::string
const & request,
1545 PvaClientChannelStateChangeRequesterPtr
const & stateChangeRequester
1547 PvaClientMonitorRequesterPtr
const & monitorRequester
1564 void issueConnect();
1568 epics::pvData::Status waitConnect();
1572 void setRequester(PvaClientMonitorRequesterPtr
const & pvaClientMonitorRequester);
1581 void start(
const std::string & request);
1597 bool waitEvent(
double secondsToWait = 0.0);
1600 void releaseEvent();
1605 PvaClientChannelPtr getPvaClientChannel();
1610 PvaClientMonitorDataPtr getData();
1612 std::string getRequesterName();
1613 void message(std::string
const & message,epics::pvData::MessageType messageType);
1614 void monitorConnect(
1615 const epics::pvData::Status& status,
1616 epics::pvData::MonitorPtr
const & monitor,
1617 epics::pvData::StructureConstPtr
const & structure);
1618 void unlisten(epics::pvData::MonitorPtr
const & monitor);
1619 void monitorEvent(epics::pvData::MonitorPtr
const & monitor);
1622 PvaClientPtr
const &pvaClient,
1623 PvaClientChannelPtr
const & pvaClientChannel,
1624 epics::pvData::PVStructurePtr
const &pvRequest);
1626 void checkMonitorState();
1627 enum MonitorConnectState {connectIdle,connectWait,connectActive,connected};
1629 PvaClient::weak_pointer pvaClient;
1630 PvaClientChannelPtr pvaClientChannel;
1631 epics::pvData::PVStructurePtr pvRequest;
1632 epics::pvData::Mutex mutex;
1633 epics::pvData::Event waitForConnect;
1634 epics::pvData::Event waitForEvent;
1635 PvaClientMonitorDataPtr pvaClientData;
1638 epics::pvData::Status monitorConnectStatus;
1639 epics::pvData::MonitorPtr monitor;
1640 epics::pvData::MonitorElementPtr monitorElement;
1642 PvaClientMonitorRequesterWPtr pvaClientMonitorRequester;
1643 MonitorConnectState connectState;
1646 MonitorRequesterImplPtr monitorRequester;
1647 PvaClientChannelStateChangeRequesterWPtr pvaClientChannelStateChangeRequester;
1649 void channelStateChange(PvaClientChannelPtr
const & channel,
bool isConnected);
1650 void event(PvaClientMonitorPtr
const & monitor);
1651 friend class MonitorRequesterImpl;
1671 virtual void requestDone(
1672 const epics::pvData::Status& status,
1673 PvaClientRPCPtr
const & pvaClientRPC,
1674 epics::pvData::PVStructure::shared_pointer
const & pvResponse) = 0;
1678 class RPCRequesterImpl;
1686 public std::tr1::enable_shared_from_this<PvaClientRPC>
1695 static PvaClientRPCPtr create(
1696 PvaClientPtr
const &pvaClient,
1697 epics::pvAccess::Channel::shared_pointer
const & channel);
1704 static PvaClientRPCPtr create(
1705 PvaClientPtr
const &pvaClient,
1706 epics::pvAccess::Channel::shared_pointer
const & channel,
1707 epics::pvData::PVStructurePtr
const &pvRequest
1718 this->responseTimeout = responseTimeout;
1726 return responseTimeout;
1739 void issueConnect();
1743 epics::pvData::Status waitConnect();
1752 epics::pvData::PVStructure::shared_pointer request(
1753 epics::pvData::PVStructure::shared_pointer
const & pvArgument);
1760 epics::pvData::PVStructure::shared_pointer
const & pvArgument,
1761 PvaClientRPCRequesterPtr
const & pvaClientRPCRequester);
1764 PvaClientPtr
const &pvaClient,
1765 epics::pvAccess::Channel::shared_pointer
const & channel,
1766 epics::pvData::PVStructurePtr
const &pvRequest);
1767 std::string getRequesterName();
1768 void message(std::string
const & message,epics::pvData::MessageType messageType);
1770 const epics::pvData::Status& status,
1771 epics::pvAccess::ChannelRPC::shared_pointer
const & channelRPC);
1773 const epics::pvData::Status& status,
1774 epics::pvAccess::ChannelRPC::shared_pointer
const & channelRPC,
1775 epics::pvData::PVStructure::shared_pointer
const & pvResponse);
1777 void checkRPCState();
1779 enum RPCConnectState {connectIdle,connectActive,connected};
1780 epics::pvData::Status connectStatus;
1781 RPCConnectState connectState;
1783 PvaClient::weak_pointer pvaClient;
1784 epics::pvAccess::Channel::weak_pointer channel;
1785 epics::pvData::PVStructurePtr pvRequest;
1787 epics::pvData::Mutex mutex;
1788 epics::pvData::Event waitForConnect;
1789 epics::pvData::Event waitForDone;
1791 PvaClientRPCRequesterWPtr pvaClientRPCRequester;
1792 RPCRequesterImplPtr rpcRequester;
1793 epics::pvAccess::ChannelRPC::shared_pointer channelRPC;
1794 epics::pvData::PVStructurePtr pvResponse;
1796 enum RPCState {rpcIdle,rpcActive,rpcComplete};
1798 epics::pvData::Status requestStatus;
1799 double responseTimeout;
1800 friend class RPCRequesterImpl;
std::tr1::shared_ptr< PvaClient > PvaClientPtr
Optional client callback.
std::tr1::shared_ptr< PvaClientProcessRequester > PvaClientProcessRequesterPtr
An easy to use alternative to ChannelProcess.
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
virtual void getGetDone(const epics::pvData::Status &status, PvaClientPutGetPtr const &clientPutGet)
A getGet request is complete.
std::tr1::weak_ptr< PvaClientGetRequester > PvaClientGetRequesterWPtr
std::tr1::weak_ptr< PvaClientPutGetRequester > PvaClientPutGetRequesterWPtr
std::tr1::shared_ptr< ChannelGetRequesterImpl > ChannelGetRequesterImplPtr
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.
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()
virtual ~PvaClientGetRequester()
std::tr1::shared_ptr< PvaClientPutRequester > PvaClientPutRequesterPtr
virtual ~PvaClientMonitorRequester()
A base class for PvaClientGetData, PvaClientPutData, and PvaClientMonitorData.
std::tr1::shared_ptr< PvaClientMonitorRequester > PvaClientMonitorRequesterPtr
virtual ~PvaClientPutGetRequester()
~PvaClientGetData()
Destructor.
std::tr1::weak_ptr< PvaClientPutRequester > PvaClientPutRequesterWPtr
~PvaClientMonitorData()
Destructor.
std::tr1::shared_ptr< PvaClientPutGetRequester > PvaClientPutGetRequesterPtr
std::tr1::weak_ptr< PvaClientMonitorRequester > PvaClientMonitorRequesterWPtr
~PvaClientData()
Destructor.
~PvaClientPutData()
Destructor.
void setResponseTimeout(double responseTimeout)
Set a timeout for a request.
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< 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< 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.
std::string messagePrefix
std::tr1::shared_ptr< PvaClientProcess > PvaClientProcessPtr
virtual ~PvaClientChannelStateChangeRequester()
std::tr1::shared_ptr< PvaClientPutGet > PvaClientPutGetPtr
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< PvaClientData > PvaClientDataPtr
std::tr1::weak_ptr< PvaClientProcessRequester > PvaClientProcessRequesterWPtr
std::tr1::shared_ptr< PvaClientGetRequester > PvaClientGetRequesterPtr