This is Unofficial EPICS BASE Doxygen Site
pvas::detail::SharedChannel Struct Reference

#include "sharedstateimpl.h"

+ Inheritance diagram for pvas::detail::SharedChannel:
+ Collaboration diagram for pvas::detail::SharedChannel:

Public Member Functions

 SharedChannel (const std::tr1::shared_ptr< SharedPV > &owner, const pva::ChannelProvider::shared_pointer provider, const std::string &channelName, const requester_type::shared_pointer &requester)
 
virtual ~SharedChannel ()
 
virtual void destroy () OVERRIDE FINAL
 
virtual std::tr1::shared_ptr< pva::ChannelProvidergetProvider () OVERRIDE FINAL
 
virtual std::string getRemoteAddress () OVERRIDE FINAL
 
virtual std::string getChannelName () OVERRIDE FINAL
 
virtual std::tr1::shared_ptr< pva::ChannelRequestergetChannelRequester () OVERRIDE FINAL
 
virtual void getField (pva::GetFieldRequester::shared_pointer const &requester, std::string const &subField) OVERRIDE FINAL
 
virtual pva::ChannelPut::shared_pointer createChannelPut (pva::ChannelPutRequester::shared_pointer const &requester, pvd::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL
 
virtual pva::ChannelRPC::shared_pointer createChannelRPC (pva::ChannelRPCRequester::shared_pointer const &requester, pvd::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL
 
virtual pva::Monitor::shared_pointer createMonitor (pva::MonitorRequester::shared_pointer const &requester, pvd::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL
 
- Public Member Functions inherited from epics::pvAccess::Channel
 POINTER_DEFINITIONS (Channel)
 
 Channel ()
 
virtual ~Channel ()
 
virtual std::string getRequesterName ()
 
virtual void message (std::string const &message, epics::pvData::MessageType messageType)
 
virtual ConnectionState getConnectionState ()
 
virtual bool isConnected ()
 
virtual void getField (GetFieldRequester::shared_pointer const &requester, std::string const &subField)
 
virtual AccessRights getAccessRights (epics::pvData::PVField::shared_pointer const &pvField)
 
virtual ChannelProcess::shared_pointer createChannelProcess (ChannelProcessRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
virtual ChannelGet::shared_pointer createChannelGet (ChannelGetRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
virtual ChannelPut::shared_pointer createChannelPut (ChannelPutRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
virtual ChannelPutGet::shared_pointer createChannelPutGet (ChannelPutGetRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
virtual ChannelRPC::shared_pointer createChannelRPC (ChannelRPCRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
virtual Monitor::shared_pointer createMonitor (MonitorRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
virtual ChannelArray::shared_pointer createChannelArray (ChannelArrayRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
virtual void printInfo ()
 
virtual void printInfo (std::ostream &out)
 
- 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 epics::pvAccess::Destroyable
 POINTER_DEFINITIONS (Destroyable)
 

Public Attributes

const std::tr1::shared_ptr< SharedPVowner
 
const std::string channelName
 
const requester_type::weak_pointer requester
 
const pva::ChannelProvider::weak_pointer provider
 
bool dead
 

Static Public Attributes

static size_t num_instances
 
- Static Public Attributes inherited from epics::pvAccess::Channel
static size_t num_instances
 
static const char * ConnectionStateNames [] = { "NEVER_CONNECTED", "CONNECTED", "DISCONNECTED", "DESTROYED" }
 

Additional Inherited Members

- Public Types inherited from epics::pvAccess::Channel
enum  ConnectionState { NEVER_CONNECTED, CONNECTED, DISCONNECTED, DESTROYED }
 
typedef ChannelRequester requester_type
 
- Protected Member Functions inherited from epics::pvAccess::Destroyable
virtual ~Destroyable ()
 

Detailed Description

Definition at line 26 of file sharedstateimpl.h.

Constructor & Destructor Documentation

pvas::detail::SharedChannel::SharedChannel ( const std::tr1::shared_ptr< SharedPV > &  owner,
const pva::ChannelProvider::shared_pointer  provider,
const std::string &  channelName,
const requester_type::shared_pointer &  requester 
)

Definition at line 31 of file sharedstate_channel.cpp.

35  :owner(owner)
39  ,dead(false)
40 {
41  REFTRACE_INCREMENT(num_instances);
42 
43  if(owner->debugLvl>5) {
44  errlogPrintf("%s : Open channel to %s > %p\n",
45  requester->getRequesterName().c_str(),
46  channelName.c_str(),
47  this);
48  }
49 
50  {
51  Guard G(owner->mutex);
52  owner->channels.push_back(this);
53  }
54 }
const requester_type::weak_pointer requester
const std::tr1::shared_ptr< SharedPV > owner
const pva::ChannelProvider::weak_pointer provider
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105
const std::string channelName
pvas::detail::SharedChannel::~SharedChannel ( )
virtual

Definition at line 56 of file sharedstate_channel.cpp.

57 {
58  destroy();
59  REFTRACE_DECREMENT(num_instances);
60 }
virtual void destroy() OVERRIDE FINAL

Member Function Documentation

pva::ChannelPut::shared_pointer pvas::detail::SharedChannel::createChannelPut ( pva::ChannelPutRequester::shared_pointer const &  requester,
pvd::PVStructure::shared_pointer const &  pvRequest 
)
virtual

Definition at line 141 of file sharedstate_channel.cpp.

144 {
145  std::tr1::shared_ptr<SharedPut> ret(new SharedPut(shared_from_this(), requester, pvRequest));
146 
148  pvd::Status sts;
149  std::string warning;
150  SharedPV::Handler::shared_pointer handler;
151  try {
152  {
153  Guard G(owner->mutex);
154  if(dead) {
155  sts = pvd::Status::error("Dead Channel");
156 
157  } else {
158  // ~SharedPut removes
159  owner->puts.push_back(ret.get());
160  if(owner->current) {
161  ret->mapper.compute(*owner->current, *pvRequest, owner->config.mapperMode);
162  type = ret->mapper.requested();
163  warning = ret->mapper.warnings();
164  }
165 
166  if(!owner->channels.empty() && !owner->notifiedConn) {
167  handler = owner->handler;
168  owner->notifiedConn = true;
169  }
170  }
171  }
172  if(!warning.empty())
173  requester->message(warning, pvd::warningMessage);
174  if(type || !sts.isOK())
175  requester->channelPutConnect(sts, ret, type);
176  }catch(std::runtime_error& e){
177  ret.reset();
178  type.reset();
179  requester->channelPutConnect(pvd::Status::error(e.what()), ret, type);
180  }
181  if(handler) {
182  handler->onFirstConnect(owner);
183  }
184  return ret;
185 }
const requester_type::weak_pointer requester
static Status error(const std::string &m)
Definition: status.h:50
pvd::StructureConstPtr type
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
const std::tr1::shared_ptr< SharedPV > owner
bool isOK() const
Definition: status.h:95
pva::ChannelRPC::shared_pointer pvas::detail::SharedChannel::createChannelRPC ( pva::ChannelRPCRequester::shared_pointer const &  requester,
pvd::PVStructure::shared_pointer const &  pvRequest 
)
virtual

Definition at line 187 of file sharedstate_channel.cpp.

190 {
191  std::tr1::shared_ptr<SharedRPC> ret(new SharedRPC(shared_from_this(), requester, pvRequest));
192  ret->connected = true;
193 
194  pvd::Status sts;
195  {
196  Guard G(owner->mutex);
197  if(dead) {
198  sts = pvd::Status::error("Dead Channel");
199 
200  } else {
201  owner->rpcs.push_back(ret.get());
202  }
203  }
204  requester->channelRPCConnect(sts, ret);
205  return ret;
206 }
const requester_type::weak_pointer requester
static Status error(const std::string &m)
Definition: status.h:50
const std::tr1::shared_ptr< SharedPV > owner
pva::Monitor::shared_pointer pvas::detail::SharedChannel::createMonitor ( pva::MonitorRequester::shared_pointer const &  requester,
pvd::PVStructure::shared_pointer const &  pvRequest 
)
virtual

Definition at line 208 of file sharedstate_channel.cpp.

211 {
212  SharedMonitorFIFO::Config mconf;
213  SharedPV::Handler::shared_pointer handler;
214  mconf.dropEmptyUpdates = owner->config.dropEmptyUpdates;
215  mconf.mapperMode = owner->config.mapperMode;
216 
217  std::tr1::shared_ptr<SharedMonitorFIFO> ret(new SharedMonitorFIFO(shared_from_this(), requester, pvRequest, &mconf));
218 
219  bool notify;
220  pvd::Status sts;
221  {
222  Guard G(owner->mutex);
223  if(dead) {
224  sts = pvd::Status::error("Dead Channel");
225  notify = false;
226 
227  } else {
228  owner->monitors.push_back(ret.get());
229  notify = !!owner->type;
230  if(notify) {
231  ret->open(owner->type);
232  // post initial update
233  ret->post(*owner->current, owner->valid);
234  }
235 
236  if(!owner->channels.empty() && !owner->notifiedConn) {
237  handler = owner->handler;
238  owner->notifiedConn = true;
239  }
240  }
241  }
242  if(!sts.isOK()) {
243  requester->monitorConnect(sts, pvd::MonitorPtr(), pvd::StructureConstPtr());
244  ret.reset();
245 
246  } else {
247  if(notify) {
248  ret->notify();
249  }
250  if(handler) {
251  handler->onFirstConnect(owner);
252  }
253  }
254  return ret;
255 }
const requester_type::weak_pointer requester
static Status error(const std::string &m)
Definition: status.h:50
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
const std::tr1::shared_ptr< SharedPV > owner
bool isOK() const
Definition: status.h:95
std::tr1::shared_ptr< Monitor > MonitorPtr
Definition: monitor.h:44
void pvas::detail::SharedChannel::destroy ( )
virtual

Destroy this instance.

Implements epics::pvAccess::Destroyable.

Definition at line 62 of file sharedstate_channel.cpp.

63 {
64  std::tr1::shared_ptr<SharedPV::Handler> handler;
65  {
66  Guard G(owner->mutex);
67 
68  if(dead) return;
69  dead = true;
70 
71  bool wasempty = owner->channels.empty();
72  owner->channels.remove(this);
73  if(!wasempty && owner->channels.empty() && owner->notifiedConn) {
74  handler = owner->handler;
75  owner->notifiedConn = false;
76  }
77  }
78  if(handler) {
79  handler->onLastDisconnect(owner);
80  }
81  if(owner->debugLvl>5)
82  {
83  pva::ChannelRequester::shared_pointer req(requester.lock());
84  errlogPrintf("%s : Close channel to %s > %p\n",
85  req ? req->getRequesterName().c_str() : "<Defunct>",
86  channelName.c_str(),
87  this);
88  }
89 }
const requester_type::weak_pointer requester
const std::tr1::shared_ptr< SharedPV > owner
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105
const std::string channelName
std::string pvas::detail::SharedChannel::getChannelName ( )
virtual

The name passed to ChannelProvider::createChannel()

Implements epics::pvAccess::Channel.

Definition at line 101 of file sharedstate_channel.cpp.

102 {
103  return channelName;
104 }
const std::string channelName
std::tr1::shared_ptr< pva::ChannelRequester > pvas::detail::SharedChannel::getChannelRequester ( )
virtual

The ChannelRequester passed to ChannelProvider::createChannel()

Exceptions
std::tr1::bad_weak_ptr

Implements epics::pvAccess::Channel.

Definition at line 106 of file sharedstate_channel.cpp.

107 {
108  return requester.lock();
109 }
const requester_type::weak_pointer requester
void pvas::detail::SharedChannel::getField ( pva::GetFieldRequester::shared_pointer const &  requester,
std::string const &  subField 
)
virtual

Definition at line 111 of file sharedstate_channel.cpp.

112 {
113  pvd::FieldConstPtr desc;
114  pvd::Status sts;
115  SharedPV::Handler::shared_pointer handler;
116  {
117  Guard G(owner->mutex);
118  if(dead) {
119  sts = pvd::Status::error("Dead Channel");
120 
121  } else {
122  if(owner->type) {
123  desc = owner->type;
124  }
125 
126  if(!owner->channels.empty() && !owner->notifiedConn) {
127  handler = owner->handler;
128  owner->notifiedConn = true;
129  }
130  owner->getfields.push_back(requester);
131  }
132  }
133  if(desc || !sts.isOK()) {
134  requester->getDone(sts, desc);
135  }
136  if(handler) {
137  handler->onFirstConnect(owner);
138  }
139 }
const requester_type::weak_pointer requester
static Status error(const std::string &m)
Definition: status.h:50
const std::tr1::shared_ptr< SharedPV > owner
std::tr1::shared_ptr< const Field > FieldConstPtr
Definition: pvIntrospect.h:137
bool isOK() const
Definition: status.h:95
std::tr1::shared_ptr< pva::ChannelProvider > pvas::detail::SharedChannel::getProvider ( )
virtual

The ChannelProvider from which this Channel was requested. May never be NULL.

Implements epics::pvAccess::Channel.

Definition at line 91 of file sharedstate_channel.cpp.

92 {
93  return provider.lock();
94 }
const pva::ChannelProvider::weak_pointer provider
std::string pvas::detail::SharedChannel::getRemoteAddress ( )
virtual

Returns the channel's remote address, signal name, etc... For example:

  • client side channel would return server's address, e.g. "/192.168.1.101:5064"
  • server side channel would return underlying bus address, e.g. "#C0 S1".

The value returned here will changed depending on the connection status. A disconnected channel should return an empty() string.

Implements epics::pvAccess::Channel.

Definition at line 96 of file sharedstate_channel.cpp.

97 {
98  return getChannelName(); // for lack of anything better to do...
99 }
virtual std::string getChannelName() OVERRIDE FINAL

Member Data Documentation

const std::string pvas::detail::SharedChannel::channelName

Definition at line 32 of file sharedstateimpl.h.

bool pvas::detail::SharedChannel::dead

Definition at line 36 of file sharedstateimpl.h.

size_t pvas::detail::SharedChannel::num_instances
static

Definition at line 29 of file sharedstateimpl.h.

const std::tr1::shared_ptr<SharedPV> pvas::detail::SharedChannel::owner

Definition at line 31 of file sharedstateimpl.h.

const pva::ChannelProvider::weak_pointer pvas::detail::SharedChannel::provider

Definition at line 34 of file sharedstateimpl.h.

const requester_type::weak_pointer pvas::detail::SharedChannel::requester

Definition at line 33 of file sharedstateimpl.h.


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