This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::ServerMonitorHandler Class Reference

#include "responseHandlers.h"

+ Inheritance diagram for epics::pvAccess::ServerMonitorHandler:
+ Collaboration diagram for epics::pvAccess::ServerMonitorHandler:

Public Member Functions

 ServerMonitorHandler (ServerContextImpl::shared_pointer const &context)
 
virtual ~ServerMonitorHandler ()
 
virtual void handleResponse (osiSockAddr *responseFrom, Transport::shared_pointer const &transport, epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize, epics::pvData::ByteBuffer *payloadBuffer) OVERRIDE FINAL
 
- Public Member Functions inherited from epics::pvAccess::AbstractServerResponseHandler
 AbstractServerResponseHandler (ServerContextImpl::shared_pointer const &context, std::string description)
 
virtual ~AbstractServerResponseHandler ()
 
- Public Member Functions inherited from epics::pvAccess::ResponseHandler
 POINTER_DEFINITIONS (ResponseHandler)
 
 ResponseHandler (Context *context, const std::string &description)
 
virtual ~ResponseHandler ()
 

Additional Inherited Members

- Static Public Attributes inherited from epics::pvAccess::ResponseHandler
static size_t num_instances
 
- Protected Attributes inherited from epics::pvAccess::AbstractServerResponseHandler
ServerContextImpl::shared_pointer _context
 
- Protected Attributes inherited from epics::pvAccess::ResponseHandler
std::string _description
 
epics::pvData::int32 _debugLevel
 

Detailed Description

Monitor request handler.

Definition at line 455 of file responseHandlers.h.

Constructor & Destructor Documentation

epics::pvAccess::ServerMonitorHandler::ServerMonitorHandler ( ServerContextImpl::shared_pointer const &  context)
inline

Definition at line 458 of file responseHandlers.h.

458  :
459  AbstractServerResponseHandler(context, "Monitor request") {
460  }
AbstractServerResponseHandler(ServerContextImpl::shared_pointer const &context, std::string description)
virtual epics::pvAccess::ServerMonitorHandler::~ServerMonitorHandler ( )
inlinevirtual

Definition at line 461 of file responseHandlers.h.

461 {}

Member Function Documentation

void epics::pvAccess::ServerMonitorHandler::handleResponse ( osiSockAddr responseFrom,
Transport::shared_pointer const &  transport,
epics::pvData::int8  version,
epics::pvData::int8  command,
std::size_t  payloadSize,
epics::pvData::ByteBuffer payloadBuffer 
)
virtual

Handle response.

Parameters
[in]responseFromremote address of the responder, 0 if unknown.
[in]transportresponse source transport.
[in]versionmessage version.
[in]payloadSizesize of this message data available in the payloadBuffer.
[in]payloadBuffermessage payload data. Note that this might not be the only message in the buffer. Code must not manipulate buffer.

Reimplemented from epics::pvAccess::ResponseHandler.

Definition at line 1768 of file responseHandlers.cpp.

1770  {
1772  transport, version, command, payloadSize, payloadBuffer);
1773 
1774  detail::BlockingServerTCPTransportCodec* casTransport(static_cast<detail::BlockingServerTCPTransportCodec*>(transport.get()));
1775  assert(!!casTransport);
1776 
1777  transport->ensureData(2*sizeof(int32)/sizeof(int8)+1);
1778  const pvAccessID sid = payloadBuffer->getInt();
1779  const pvAccessID ioid = payloadBuffer->getInt();
1780 
1781  // mode
1782  const int8 qosCode = payloadBuffer->getByte();
1783 
1784  ServerChannel::shared_pointer channel = casTransport->getChannel(sid);
1785  if (!channel.get())
1786  {
1788  return;
1789  }
1790 
1791  const bool init = (QOS_INIT & qosCode) != 0;
1792  if (init)
1793  {
1794  // pvRequest
1795  PVStructure::shared_pointer pvRequest(SerializationHelper::deserializePVRequest(payloadBuffer, transport.get()));
1796 
1797  // create...
1799 
1800  // pipelining monitor (i.e. w/ flow control)
1801  const bool ack = (QOS_GET_PUT & qosCode) != 0;
1802  if (ack)
1803  {
1804  transport->ensureData(4);
1805  int32 nfree = payloadBuffer->getInt();
1806 
1807  request->ack(nfree);
1808  }
1809 
1810  }
1811  else
1812  {
1813  const bool lastRequest = (QOS_DESTROY & qosCode) != 0;
1814  const bool get = (QOS_GET & qosCode) != 0;
1815  const bool process = (QOS_PROCESS & qosCode) != 0;
1816  const bool ack = (QOS_GET_PUT & qosCode) != 0;
1817 
1819  if (!request.get())
1820  {
1822  return;
1823  }
1824  atomic::add(request->bytesRX, payloadSize);
1825 
1826  if (ack)
1827  {
1828  transport->ensureData(4);
1829  int32 nfree = payloadBuffer->getInt();
1830  request->ack(nfree);
1831  return;
1832  // note: not possible to ack and destroy
1833  }
1834 
1835  /*
1836  if (!request->startRequest(qosCode))
1837  {
1838  BaseChannelRequester::sendFailureMessage((int8)CMD_MONITOR, transport, ioid, qosCode, BaseChannelRequester::otherRequestPendingStatus);
1839  return;
1840  }
1841  */
1842 
1843  if (process)
1844  {
1845  if (get)
1846  request->getChannelMonitor()->start();
1847  else
1848  request->getChannelMonitor()->stop();
1849  //request.stopRequest();
1850  }
1851  else if (get)
1852  {
1853  // not supported
1854  }
1855 
1856  if (lastRequest)
1857  request->destroy();
1858  }
1859 }
int8_t int8
Definition: pvType.h:75
std::string request
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
epicsInt32 pvAccessID
Definition: pvaDefs.h:18
EPICS_ALWAYS_INLINE int8 getByte()
Definition: byteBuffer.h:617
virtual void handleResponse(osiSockAddr *responseFrom, Transport::shared_pointer const &transport, epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize, epics::pvData::ByteBuffer *payloadBuffer)
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
static const epics::pvData::Status badIOIDStatus
EPICS_ALWAYS_INLINE int32 getInt()
Definition: byteBuffer.h:629
static const epics::pvData::Status badCIDStatus
static epics::pvData::PVStructure::shared_pointer deserializePVRequest(epics::pvData::ByteBuffer *payloadBuffer, epics::pvData::DeserializableControl *control)
std::tr1::shared_ptr< ServerMonitorRequesterImpl > shared_pointer
ServerContextImpl::shared_pointer _context
static void sendFailureMessage(const epics::pvData::int8 command, Transport::shared_pointer const &transport, const pvAccessID ioid, const epics::pvData::int8 qos, const epics::pvData::Status status)
static shared_pointer create(ServerContextImpl::shared_pointer const &context, std::tr1::shared_ptr< ServerChannel > const &channel, const pvAccessID ioid, Transport::shared_pointer const &transport, epics::pvData::PVStructure::shared_pointer const &pvRequest)
int32_t int32
Definition: pvType.h:83

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