This is Unofficial EPICS BASE Doxygen Site
pvac::ClientChannel::Impl Struct Reference
+ Inheritance diagram for pvac::ClientChannel::Impl:
+ Collaboration diagram for pvac::ClientChannel::Impl:

Public Types

typedef std::vector< ClientChannel::ConnectCallback * > listeners_t
 
- Public Types inherited from epics::pvAccess::ChannelRequester
typedef Channel operation_type
 

Public Member Functions

 Impl ()
 
virtual ~Impl ()
 
void cancel ()
 
virtual std::string getRequesterName () OVERRIDE FINAL
 
virtual void channelCreated (const pvd::Status &status, pva::Channel::shared_pointer const &channel) OVERRIDE FINAL
 
virtual void channelStateChange (pva::Channel::shared_pointer const &channel, pva::Channel::ConnectionState connectionState) OVERRIDE FINAL
 
- Public Member Functions inherited from epics::pvAccess::ChannelRequester
 POINTER_DEFINITIONS (ChannelRequester)
 
 ChannelRequester ()
 
virtual ~ChannelRequester ()
 
virtual void channelCreated (const epics::pvData::Status &status, Channel::shared_pointer const &channel)=0
 
virtual void channelStateChange (Channel::shared_pointer const &channel, Channel::ConnectionState connectionState)=0
 
virtual std::tr1::shared_ptr< const PeerInfogetPeerInfo ()
 Return information on connected peer if applicable. More...
 
- Public Member Functions inherited from epics::pvAccess::Requester
 POINTER_DEFINITIONS (Requester)
 
virtual ~Requester ()
 
virtual void message (std::string const &message, MessageType messageType=errorMessage)
 
- Public Member Functions inherited from pvac::detail::wrapped_shared_from_this< ClientChannel::Impl >
std::tr1::shared_ptr< ClientChannel::Implinternal_shared_from_this ()
 

Public Attributes

epicsMutex mutex
 
pva::Channel::shared_pointer channel
 
listeners_t listeners
 
bool listeners_inprogress
 
epicsEvent listeners_done
 

Static Public Attributes

static size_t num_instances
 
- Static Public Attributes inherited from epics::pvAccess::ChannelRequester
static size_t num_instances
 

Additional Inherited Members

- Static Public Member Functions inherited from pvac::detail::wrapped_shared_from_this< ClientChannel::Impl >
static std::tr1::shared_ptr< ClientChannel::Implbuild ()
 
static std::tr1::shared_ptr< ClientChannel::Implbuild (A a)
 
static std::tr1::shared_ptr< ClientChannel::Implbuild (A a, B b)
 

Detailed Description

Definition at line 36 of file client.cpp.

Member Typedef Documentation

Definition at line 42 of file client.cpp.

Constructor & Destructor Documentation

pvac::ClientChannel::Impl::Impl ( )
inline

Definition at line 49 of file client.cpp.

49 :listeners_inprogress(false) {REFTRACE_INCREMENT(num_instances);}
static size_t num_instances
Definition: client.cpp:47
virtual pvac::ClientChannel::Impl::~Impl ( )
inlinevirtual

Definition at line 50 of file client.cpp.

50 {REFTRACE_DECREMENT(num_instances);}
static size_t num_instances
Definition: client.cpp:47

Member Function Documentation

void pvac::ClientChannel::Impl::cancel ( )
inline

Definition at line 53 of file client.cpp.

54  {
55  // ClientChannel destroy implicitly removes all callbacks,
56  // but doesn't destroy the Channel or cancel Operations
57  Guard G(mutex);
58  while(listeners_inprogress) {
59  UnGuard U(G);
60  listeners_done.wait();
61  }
62  listeners.clear();
63  }
epicsEvent listeners_done
Definition: client.cpp:45
listeners_t listeners
Definition: client.cpp:43
virtual void pvac::ClientChannel::Impl::channelCreated ( const pvd::Status status,
pva::Channel::shared_pointer const &  channel 
)
inlinevirtual

Definition at line 67 of file client.cpp.

67 {}
virtual void pvac::ClientChannel::Impl::channelStateChange ( pva::Channel::shared_pointer const &  channel,
pva::Channel::ConnectionState  connectionState 
)
inlinevirtual

Definition at line 69 of file client.cpp.

70  {
71  listeners_t notify;
72  {
73  Guard G(mutex);
74  notify = listeners; // copy vector
75  listeners_inprogress = true;
76  }
77  try {
78  ConnectEvent evt;
79  evt.connected = connectionState==pva::Channel::CONNECTED;
80  if(evt.connected)
81  evt.peerName = channel->getRemoteAddress();
82  for(listeners_t::const_iterator it=notify.begin(), end=notify.end(); it!=end; ++it)
83  {
84  try {
85  (*it)->connectEvent(evt);
86  }catch(std::exception& e){
87  LOG(pva::logLevelError, "Unhandled exception in connection state listener: %s\n", e.what());
88 
89  Guard G(mutex);
90  for(listeners_t::iterator it2=listeners.begin(), end2=listeners.end(); it2!=end2; ++it2) {
91  if(*it==*it2) {
92  listeners.erase(it2);
93  break;
94  }
95  }
96  }
97  }
98  }catch(...){
99  {
100  Guard G(mutex);
101  listeners_inprogress = false;
102  }
103  listeners_done.signal();
104  }
105  {
106  Guard G(mutex);
107  listeners_inprogress = false;
108  }
109  listeners_done.signal();
110  }
pva::Channel::shared_pointer channel
Definition: client.cpp:40
#define LOG(level, format,...)
Definition: logger.h:48
epicsEvent listeners_done
Definition: client.cpp:45
listeners_t listeners
Definition: client.cpp:43
std::vector< ClientChannel::ConnectCallback * > listeners_t
Definition: client.cpp:42
virtual std::string pvac::ClientChannel::Impl::getRequesterName ( )
inlinevirtual

The requester must have a name.

Returns
The requester's name.

Implements epics::pvAccess::Requester.

Definition at line 65 of file client.cpp.

65 { return "ClientChannel::Impl"; }

Member Data Documentation

pva::Channel::shared_pointer pvac::ClientChannel::Impl::channel

Definition at line 40 of file client.cpp.

listeners_t pvac::ClientChannel::Impl::listeners

Definition at line 43 of file client.cpp.

epicsEvent pvac::ClientChannel::Impl::listeners_done

Definition at line 45 of file client.cpp.

bool pvac::ClientChannel::Impl::listeners_inprogress

Definition at line 44 of file client.cpp.

epicsMutex pvac::ClientChannel::Impl::mutex

Definition at line 39 of file client.cpp.

size_t pvac::ClientChannel::Impl::num_instances
static

Definition at line 47 of file client.cpp.


The documentation for this struct was generated from the following file: