PipelineMonitor instead of epics::pvData::Monitor
This commit is contained in:
@@ -1444,12 +1444,6 @@ void CAChannelMonitor::release(epics::pvData::MonitorElementPtr const & /*monito
|
||||
// noop
|
||||
}
|
||||
|
||||
void CAChannelMonitor::reportRemoteQueueStatus(int32 /*freeElements*/)
|
||||
{
|
||||
// noop
|
||||
}
|
||||
|
||||
|
||||
/* --------------- epics::pvData::ChannelRequest --------------- */
|
||||
|
||||
void CAChannelMonitor::cancel()
|
||||
|
||||
@@ -264,7 +264,6 @@ public:
|
||||
virtual epics::pvData::Status stop();
|
||||
virtual epics::pvData::MonitorElementPtr poll();
|
||||
virtual void release(epics::pvData::MonitorElementPtr const & monitorElement);
|
||||
virtual void reportRemoteQueueStatus(epics::pvData::int32 freeElements);
|
||||
|
||||
/* --------------- epics::pvData::ChannelRequest --------------- */
|
||||
|
||||
|
||||
@@ -941,6 +941,23 @@ namespace pvAccess {
|
||||
epicsShareExtern void unregisterChannelProviderFactory(ChannelProviderFactory::shared_pointer const & channelProviderFactory);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Pipeline (streaming) support API (optional).
|
||||
* This is used by pvAccess to implement pipeline (streaming) monitors.
|
||||
*/
|
||||
class epicsShareClass PipelineMonitor : public virtual epics::pvData::Monitor {
|
||||
public:
|
||||
POINTER_DEFINITIONS(PipelineMonitor);
|
||||
virtual ~PipelineMonitor(){}
|
||||
|
||||
/**
|
||||
* Report remote queue status.
|
||||
* @param freeElements number of free elements.
|
||||
*/
|
||||
virtual void reportRemoteQueueStatus(epics::pvData::int32 freeElements) = 0;
|
||||
};
|
||||
|
||||
|
||||
}}
|
||||
|
||||
#endif /* PVACCESS_H */
|
||||
|
||||
@@ -6,8 +6,39 @@
|
||||
# undef epicsExportSharedSymbols
|
||||
#endif
|
||||
|
||||
#ifdef WITH_MICROBENCH
|
||||
|
||||
#include <pv/mb.h>
|
||||
|
||||
#else
|
||||
|
||||
#define MB_DECLARE(NAME, SIZE)
|
||||
#define MB_DECLARE_EXTERN(NAME)
|
||||
|
||||
#define MB_POINT_ID(NAME, STAGE, STAGE_DESC, ID)
|
||||
|
||||
#define MB_INC_AUTO_ID(NAME)
|
||||
#define MB_POINT(NAME, STAGE, STAGE_DESC)
|
||||
|
||||
#define MB_POINT_CONDITIONAL(NAME, STAGE, STAGE_DESC, COND)
|
||||
|
||||
#define MB_NORMALIZE(NAME)
|
||||
|
||||
#define MB_STATS(NAME, STREAM)
|
||||
#define MB_STATS_OPT(NAME, STAGE_ONLY, SKIP_FIRST_N_SAMPLES, STREAM)
|
||||
|
||||
#define MB_CSV_EXPORT(NAME, STREAM)
|
||||
#define MB_CSV_EXPORT_OPT(NAME, STAGE_ONLY, SKIP_FIRST_N_SAMPLES, STREAM)
|
||||
#define MB_CSV_IMPORT(NAME, STREAM)
|
||||
|
||||
#define MB_PRINT(NAME, STREAM)
|
||||
#define MB_PRINT_OPT(NAME, STAGE_ONLY, SKIP_FIRST_N_SAMPLES, STREAM)
|
||||
|
||||
#define MB_INIT
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef pvAccessMBEpicsExportSharedSymbols
|
||||
# define epicsExportSharedSymbols
|
||||
# undef pvAccessMBEpicsExportSharedSymbols
|
||||
|
||||
@@ -19,7 +19,7 @@ using namespace std;
|
||||
namespace epics { namespace pvAccess {
|
||||
|
||||
class ChannelPipelineMonitorImpl :
|
||||
public Monitor,
|
||||
public PipelineMonitor,
|
||||
public PipelineControl,
|
||||
public std::tr1::enable_shared_from_this<ChannelPipelineMonitorImpl>
|
||||
{
|
||||
|
||||
@@ -2406,11 +2406,6 @@ namespace epics {
|
||||
}
|
||||
}
|
||||
|
||||
virtual void reportRemoteQueueStatus(int32 /*freeElements*/)
|
||||
{
|
||||
// noop for the client
|
||||
}
|
||||
|
||||
virtual void send(ByteBuffer* buffer, TransportSendControl* control) {
|
||||
control->startMessage((int8)CMD_MONITOR, 9);
|
||||
buffer->putInt(m_channel->getServerChannelID());
|
||||
@@ -2782,11 +2777,6 @@ namespace epics {
|
||||
m_monitorStrategy->release(monitorElement);
|
||||
}
|
||||
|
||||
virtual void reportRemoteQueueStatus(int32 freeElements)
|
||||
{
|
||||
m_monitorStrategy->reportRemoteQueueStatus(freeElements);
|
||||
}
|
||||
|
||||
virtual void lock()
|
||||
{
|
||||
// noop
|
||||
|
||||
@@ -1882,7 +1882,11 @@ void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom,
|
||||
{
|
||||
int32 nfree = payloadBuffer->getInt();
|
||||
ServerMonitorRequesterImpl::shared_pointer request = static_pointer_cast<ServerMonitorRequesterImpl>(channel->getRequest(ioid));
|
||||
request->getChannelMonitor()->reportRemoteQueueStatus(nfree);
|
||||
|
||||
Monitor::shared_pointer mp = request->getChannelMonitor();
|
||||
PipelineMonitor* pmp = dynamic_cast<PipelineMonitor*>(mp.get());
|
||||
if (pmp)
|
||||
pmp->reportRemoteQueueStatus(nfree);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1903,7 +1907,10 @@ void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom,
|
||||
if (ack)
|
||||
{
|
||||
int32 nfree = payloadBuffer->getInt();
|
||||
request->getChannelMonitor()->reportRemoteQueueStatus(nfree);
|
||||
Monitor::shared_pointer mp = request->getChannelMonitor();
|
||||
PipelineMonitor* pmp = dynamic_cast<PipelineMonitor*>(mp.get());
|
||||
if (pmp)
|
||||
pmp->reportRemoteQueueStatus(nfree);
|
||||
return;
|
||||
// note: not possible to ack and destroy
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user