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

#include "responseHandlers.h"

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

Public Types

typedef std::tr1::shared_ptr< ServerChannelProcessRequesterImplshared_pointer
 
typedef std::tr1::shared_ptr< const ServerChannelProcessRequesterImplconst_shared_pointer
 
- Public Types inherited from epics::pvAccess::ChannelProcessRequester
typedef ChannelProcess operation_type
 

Public Member Functions

virtual ~ServerChannelProcessRequesterImpl ()
 
virtual void channelProcessConnect (const epics::pvData::Status &status, ChannelProcess::shared_pointer const &channelProcess) OVERRIDE FINAL
 
virtual void processDone (const epics::pvData::Status &status, ChannelProcess::shared_pointer const &channelProcess) OVERRIDE FINAL
 
virtual void destroy () OVERRIDE FINAL
 
ChannelProcess::shared_pointer getChannelProcess ()
 
virtual std::tr1::shared_ptr< ChannelRequestgetOperation () OVERRIDE FINAL
 The Operation associated with this Requester, except for GetField and Monitor (which are special snowflakes...) More...
 
virtual void send (epics::pvData::ByteBuffer *buffer, TransportSendControl *control) OVERRIDE FINAL
 
- Public Member Functions inherited from epics::pvAccess::BaseChannelRequester
 POINTER_DEFINITIONS (BaseChannelRequester)
 
 BaseChannelRequester (ServerContextImpl::shared_pointer const &context, std::tr1::shared_ptr< ServerChannel > const &channel, const pvAccessID ioid, Transport::shared_pointer const &transport)
 
virtual ~BaseChannelRequester ()
 
bool startRequest (epics::pvData::int32 qos)
 
void stopRequest ()
 
epics::pvData::int32 getPendingRequest ()
 
virtual std::string getRequesterName () OVERRIDE FINAL
 
virtual void message (std::string const &message, epics::pvData::MessageType messageType) OVERRIDE FINAL
 
virtual void stats (Stats &s) const OVERRIDE FINAL
 Query current counter values. More...
 
- Public Member Functions inherited from epics::pvAccess::TransportSender
 POINTER_DEFINITIONS (TransportSender)
 
 TransportSender ()
 
virtual ~TransportSender ()
 
- Public Member Functions inherited from epics::pvAccess::Lockable
 POINTER_DEFINITIONS (Lockable)
 
virtual ~Lockable ()
 
virtual void lock ()
 
virtual void unlock ()
 
- Public Member Functions inherited from epics::pvAccess::fair_queue< T >::entry
 entry ()
 
 ~entry ()
 
- Public Member Functions inherited from epics::pvAccess::NetStats
virtual ~NetStats ()
 
- Public Member Functions inherited from epics::pvAccess::Destroyable
 POINTER_DEFINITIONS (Destroyable)
 
- Public Member Functions inherited from epics::pvAccess::ChannelProcessRequester
 POINTER_DEFINITIONS (ChannelProcessRequester)
 
virtual ~ChannelProcessRequester ()
 
- Public Member Functions inherited from epics::pvAccess::ChannelBaseRequester
 POINTER_DEFINITIONS (ChannelBaseRequester)
 
 ChannelBaseRequester ()
 
virtual ~ChannelBaseRequester ()
 
virtual void channelDisconnect (bool destroy)
 

Static Public Member Functions

static ChannelProcessRequester::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)
 
- Static Public Member Functions inherited from epics::pvAccess::BaseChannelRequester
static void message (Transport::shared_pointer const &transport, const pvAccessID ioid, const std::string message, const epics::pvData::MessageType messageType)
 
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)
 

Protected Member Functions

 ServerChannelProcessRequesterImpl (ServerContextImpl::shared_pointer const &context, std::tr1::shared_ptr< ServerChannel > const &channel, const pvAccessID ioid, Transport::shared_pointer const &transport)
 
void activate (epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
- Protected Member Functions inherited from epics::pvAccess::Destroyable
virtual ~Destroyable ()
 

Additional Inherited Members

- Public Attributes inherited from epics::pvAccess::TransportSender
size_t bytesTX
 
size_t bytesRX
 
- Static Public Attributes inherited from epics::pvAccess::BaseChannelRequester
static const epics::pvData::Status okStatus = Status()
 
static const epics::pvData::Status badCIDStatus
 
static const epics::pvData::Status badIOIDStatus
 
static const epics::pvData::Status noReadACLStatus
 
static const epics::pvData::Status noWriteACLStatus
 
static const epics::pvData::Status noProcessACLStatus
 
static const epics::pvData::Status otherRequestPendingStatus
 
static const epics::pvData::Status notAChannelRequestStatus
 
- Static Public Attributes inherited from epics::pvAccess::ChannelBaseRequester
static size_t num_instances
 
- Protected Attributes inherited from epics::pvAccess::BaseChannelRequester
const pvAccessID _ioid
 
const Transport::shared_pointer _transport
 
const std::tr1::shared_ptr< ServerChannel_channel
 
epics::pvData::Mutex _mutex
 

Detailed Description

Definition at line 642 of file responseHandlers.h.

Member Typedef Documentation

Constructor & Destructor Documentation

epics::pvAccess::ServerChannelProcessRequesterImpl::ServerChannelProcessRequesterImpl ( ServerContextImpl::shared_pointer const &  context,
std::tr1::shared_ptr< ServerChannel > const &  channel,
const pvAccessID  ioid,
Transport::shared_pointer const &  transport 
)
protected

Definition at line 2536 of file responseHandlers.cpp.

2538  :
2539  BaseChannelRequester(context, channel, ioid, transport), _channelProcess()
2540 {
2541 }
BaseChannelRequester(ServerContextImpl::shared_pointer const &context, std::tr1::shared_ptr< ServerChannel > const &channel, const pvAccessID ioid, Transport::shared_pointer const &transport)
virtual epics::pvAccess::ServerChannelProcessRequesterImpl::~ServerChannelProcessRequesterImpl ( )
inlinevirtual

Definition at line 659 of file responseHandlers.h.

659 {}

Member Function Documentation

void epics::pvAccess::ServerChannelProcessRequesterImpl::activate ( epics::pvData::PVStructure::shared_pointer const &  pvRequest)
protected

Definition at line 2554 of file responseHandlers.cpp.

2555 {
2557  shared_pointer thisPointer(shared_from_this());
2558  _channel->registerRequest(_ioid, thisPointer);
2559  INIT_EXCEPTION_GUARD(CMD_PROCESS, _channelProcess, _channel->getChannel()->createChannelProcess(thisPointer, pvRequest));
2560 }
const std::tr1::shared_ptr< ServerChannel > _channel
#define INIT_EXCEPTION_GUARD(cmd, var, code)
bool startRequest(epics::pvData::int32 qos)
std::tr1::shared_ptr< ServerChannelProcessRequesterImpl > shared_pointer
void epics::pvAccess::ServerChannelProcessRequesterImpl::channelProcessConnect ( const epics::pvData::Status status,
ChannelProcess::shared_pointer const &  channelProcess 
)
virtual

The client and server have both completed the createChannelProcess request.

Parameters
statusCompletion status.
channelProcessThe channelProcess interface or nullptr if the client could not become the record processor.

Implements epics::pvAccess::ChannelProcessRequester.

Definition at line 2562 of file responseHandlers.cpp.

2563 {
2564  {
2565  Lock guard(_mutex);
2566  _status = status;
2567  _channelProcess = channelProcess;
2568  }
2569  TransportSender::shared_pointer thisSender = shared_from_this();
2570  _transport->enqueueSendRequest(thisSender);
2571 
2572  // self-destruction
2573  if (!status.isSuccess())
2574  {
2575  destroy();
2576  }
2577 }
pvd::Status status
A lock for multithreading.
Definition: lock.h:36
const Transport::shared_pointer _transport
bool isSuccess() const
Definition: status.h:103
ChannelProcessRequester::shared_pointer epics::pvAccess::ServerChannelProcessRequesterImpl::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 
)
static

Definition at line 2543 of file responseHandlers.cpp.

2546 {
2547  // TODO use std::make_shared
2548  std::tr1::shared_ptr<ServerChannelProcessRequesterImpl> tp(new ServerChannelProcessRequesterImpl(context, channel, ioid, transport));
2549  ChannelProcessRequester::shared_pointer thisPointer = tp;
2550  static_cast<ServerChannelProcessRequesterImpl*>(thisPointer.get())->activate(pvRequest);
2551  return thisPointer;
2552 }
ServerChannelProcessRequesterImpl(ServerContextImpl::shared_pointer const &context, std::tr1::shared_ptr< ServerChannel > const &channel, const pvAccessID ioid, Transport::shared_pointer const &transport)
void activate(epics::pvData::PVStructure::shared_pointer const &pvRequest)
void epics::pvAccess::ServerChannelProcessRequesterImpl::destroy ( )
virtual

Destroy this instance.

Implements epics::pvAccess::Destroyable.

Definition at line 2589 of file responseHandlers.cpp.

2590 {
2591  // keep a reference to ourselves as the owner
2592  // could release its reference and we don't want to be
2593  // destroyed prematurely
2594  shared_pointer self(shared_from_this());
2595 
2596  {
2597  Lock guard(_mutex);
2598  _channel->unregisterRequest(_ioid);
2599 
2600  if (_channelProcess.get())
2601  {
2602  _channelProcess->destroy();
2603  }
2604  }
2605  // TODO
2606  _channelProcess.reset();
2607 }
const std::tr1::shared_ptr< ServerChannel > _channel
A lock for multithreading.
Definition: lock.h:36
std::tr1::shared_ptr< ServerChannelProcessRequesterImpl > shared_pointer
ChannelProcess::shared_pointer epics::pvAccess::ServerChannelProcessRequesterImpl::getChannelProcess ( )

Definition at line 2609 of file responseHandlers.cpp.

2610 {
2611  //Lock guard(_mutex);
2612  return _channelProcess;
2613 }
virtual std::tr1::shared_ptr<ChannelRequest> epics::pvAccess::ServerChannelProcessRequesterImpl::getOperation ( )
inlinevirtual

The Operation associated with this Requester, except for GetField and Monitor (which are special snowflakes...)

Implements epics::pvAccess::BaseChannelRequester.

Definition at line 666 of file responseHandlers.h.

666 { return getChannelProcess(); }
void epics::pvAccess::ServerChannelProcessRequesterImpl::processDone ( const epics::pvData::Status status,
ChannelProcess::shared_pointer const &  channelProcess 
)
virtual

The process request is done. This is always called with no locks held.

Parameters
statusCompletion status.
channelProcessThe channelProcess interface.

Implements epics::pvAccess::ChannelProcessRequester.

Definition at line 2579 of file responseHandlers.cpp.

2580 {
2581  {
2582  Lock guard(_mutex);
2583  _status = status;
2584  }
2585  TransportSender::shared_pointer thisSender = shared_from_this();
2586  _transport->enqueueSendRequest(thisSender);
2587 }
pvd::Status status
A lock for multithreading.
Definition: lock.h:36
const Transport::shared_pointer _transport
void epics::pvAccess::ServerChannelProcessRequesterImpl::send ( epics::pvData::ByteBuffer buffer,
TransportSendControl control 
)
virtual

Called by transport. By this call transport gives callee ownership over the buffer. Calls on TransportSendControl instance must be made from calling thread. Moreover, ownership is valid only for the time of call of this method. NOTE: these limitations allow efficient implementation.

Implements epics::pvAccess::TransportSender.

Definition at line 2615 of file responseHandlers.cpp.

2616 {
2617  const int32 request = getPendingRequest();
2618 
2619  control->startMessage((int32)CMD_PROCESS, sizeof(int32)/sizeof(int8) + 1);
2620  buffer->putInt(_ioid);
2621  buffer->putByte((int8)request);
2622  {
2623  Lock guard(_mutex);
2624  _status.serialize(buffer, control);
2625  }
2626 
2627  stopRequest();
2628 
2629  // lastRequest
2630  if ((QOS_DESTROY & request) != 0)
2631  {
2632  destroy();
2633  }
2634 }
int8_t int8
Definition: pvType.h:75
std::string request
EPICS_ALWAYS_INLINE void putInt(int32 value)
Definition: byteBuffer.h:537
A lock for multithreading.
Definition: lock.h:36
void serialize(ByteBuffer *buffer, SerializableControl *flusher) const
Definition: status.cpp:45
EPICS_ALWAYS_INLINE void putByte(int8 value)
Definition: byteBuffer.h:525
virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity, epics::pvData::int32 payloadSize=0)=0
int32_t int32
Definition: pvType.h:83

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