nidas  v1.2-1520
Public Member Functions | Static Public Member Functions | Private Attributes | List of all members
nidas::core::IOChannel Class Referenceabstract

A channel for Input or Output of data. More...

#include <IOChannel.h>

Inheritance diagram for nidas::core::IOChannel:
Inheritance graph
[legend]

Public Member Functions

 IOChannel ()
 
 IOChannel (const IOChannel &x)
 
IOChanneloperator= (const IOChannel &rhs)
 
virtual ~IOChannel ()
 
virtual IOChannelclone () const =0
 Derived classes must provide clone. More...
 
virtual void setName (const std::string &val)=0
 
virtual const std::string & getName () const =0
 
virtual void setRequestType (enum McSocketRequest)
 
virtual enum McSocketRequest getRequestType () const
 
virtual bool isNewInput () const
 Some IOChannels, namely FileSet, which opens successive files, need to indicate when a read is from the start of a new file. More...
 
virtual void requestConnection (IOChannelRequester *)=0 throw (nidas::util::IOException)
 After the IOChannel is configured, a user of IOChannel calls requestConnection to get things started. More...
 
virtual int getReconnectDelaySecs () const
 
virtual void setNonBlocking (bool val)=0 throw (nidas::util::IOException)
 
virtual bool isNonBlocking () const =0 throw (nidas::util::IOException)
 
virtual IOChannelconnect ()=0 throw (nidas::util::IOException,nidas::util::UnknownHostException)
 Establish a connection. More...
 
virtual const ConnectionInfogetConnectionInfo () const
 What is the IP address of the host at the other end of the connection. More...
 
virtual void setConnectionInfo (const ConnectionInfo &val)
 
virtual size_t getBufferSize () const throw ()
 Return suggested buffer length. More...
 
virtual size_t read (void *buf, size_t len)=0 throw (nidas::util::IOException)
 Physical read method which must be implemented in derived classes. More...
 
virtual size_t write (const void *buf, size_t len)=0 throw (nidas::util::IOException)
 Physical write method which must be implemented in derived classes. More...
 
virtual size_t write (const struct iovec *iov, int iovcnt)=0 throw (nidas::util::IOException)
 Physical write method which must be implemented in derived classes. More...
 
virtual void flush () throw (nidas::util::IOException)
 Default flush implementation does nothing. More...
 
virtual void close ()=0 throw (nidas::util::IOException)
 
virtual int getFd () const =0
 
virtual dsm_time_t createFile (dsm_time_t t, bool exact)
 Request that an IOChannel open a new file, with a name based on a time. More...
 
virtual bool writeNidasHeader () const
 Should the NIDAS header be written to this IOChannel? NIDAS headers are not written to DatagramSockets, because there is no guarantee they will get there. More...
 
virtual void setDSMConfig (const DSMConfig *val)
 What DSM is this IOChannel connected to? More...
 
virtual const DSMConfiggetDSMConfig () const
 What DSM is this IOChannel connected to? May be NULL. More...
 
virtual void fromDOMElement (const xercesc::DOMElement *)=0 throw (nidas::util::InvalidParameterException)
 Initialize myself from a xercesc::DOMElement. More...
 
virtual xercesc::DOMElement * toDOMParent (xercesc::DOMElement *parent, bool complete) const throw (xercesc::DOMException)
 Create a DOMElement and append it to the parent. More...
 
virtual xercesc::DOMElement * toDOMElement (xercesc::DOMElement *node, bool complete) const throw (xercesc::DOMException)
 Add my content into a DOMElement. More...
 

Static Public Member Functions

static IOChannelcreateIOChannel (const xercesc::DOMElement *node) throw (nidas::util::InvalidParameterException)
 
static const XMLCh * getNamespaceURI ()
 

Private Attributes

const DSMConfig_dsm
 
ConnectionInfo _conInfo
 

Detailed Description

A channel for Input or Output of data.

Constructor & Destructor Documentation

IOChannel::IOChannel ( )
nidas::core::IOChannel::IOChannel ( const IOChannel x)
inline
virtual nidas::core::IOChannel::~IOChannel ( )
inlinevirtual

Member Function Documentation

virtual IOChannel* nidas::core::IOChannel::clone ( ) const
pure virtual
virtual void nidas::core::IOChannel::close ( )
throw (nidas::util::IOException
)
pure virtual
virtual IOChannel* nidas::core::IOChannel::connect ( )
throw (nidas::util::IOException,
nidas::util::UnknownHostException
)
pure virtual
virtual dsm_time_t nidas::core::IOChannel::createFile ( dsm_time_t  t,
bool  exact 
)
inlinevirtual

Request that an IOChannel open a new file, with a name based on a time.

This should be implemented by derived classes which write to disk files. Other derived classes (e.g. sockets) can just use this default implementation - basically ignoring the request.

Parameters
tTime to use when creating file name.
exactUse exact time when creating file name, else the time is adjusted to an even time interval.

Reimplemented in nidas::core::FileSet.

Referenced by nidas::core::IOStream::createFile().

IOChannel * IOChannel::createIOChannel ( const xercesc::DOMElement *  node)
throw (nidas::util::InvalidParameterException
)
static
virtual void nidas::core::IOChannel::flush ( )
throw (nidas::util::IOException
)
inlinevirtual
virtual void nidas::core::DOMable::fromDOMElement ( const xercesc::DOMElement *  )
throw (nidas::util::InvalidParameterException
)
pure virtualinherited

Initialize myself from a xercesc::DOMElement.

Implemented in nidas::core::DSMSensor, nidas::dynld::SampleInputStream, nidas::core::CalFile, nidas::core::Variable, nidas::core::ServerSocket, nidas::core::SampleTag, nidas::core::Polynomial, nidas::core::Site, nidas::core::Project, nidas::core::CharacterSensor, nidas::core::Linear, nidas::core::SampleOutputBase, nidas::core::SampleIOProcessor, nidas::core::Socket, nidas::core::DSMConfig, nidas::dynld::isff::GOESXmtr, nidas::core::DatagramSocket, nidas::core::VariableConverter, nidas::core::SerialSensor, nidas::core::McSocket, nidas::core::McSocketUDP, nidas::core::UnixIOChannel, nidas::core::FileSet, nidas::dynld::raf::DSMArincSensor, nidas::core::FsMount, nidas::dynld::isff::GOESOutput, nidas::dynld::raf::CVIProcessor, nidas::dynld::isff::CS_Krypton, nidas::core::DSMService, nidas::core::DSMServer, nidas::dynld::psql::PSQLChannel, nidas::dynld::raf::IRIGSensor, nidas::dynld::psql::PSQLSampleOutput, nidas::dynld::isff::Wind2D, nidas::dynld::UDPSampleOutput, nidas::core::MultipleUDPSockets, nidas::core::DSMCatalog, nidas::dynld::RawSampleInputStream, nidas::core::SensorCatalog, nidas::dynld::RawSampleService, nidas::core::ServiceCatalog, nidas::dynld::raf::LamsSensor, nidas::dynld::raf::Arinc_IRS, and nidas::dynld::RawSampleOutputStream.

Referenced by nidas::core::DSMService::fromDOMElement(), nidas::dynld::isff::GOESOutput::fromDOMElement(), nidas::core::DSMConfig::fromDOMElement(), nidas::core::SampleIOProcessor::fromDOMElement(), nidas::core::SampleOutputBase::fromDOMElement(), and nidas::dynld::SampleInputStream::fromDOMElement().

virtual size_t nidas::core::IOChannel::getBufferSize ( ) const
throw (
)
inlinevirtual
virtual const ConnectionInfo& nidas::core::IOChannel::getConnectionInfo ( ) const
inlinevirtual

What is the IP address of the host at the other end of the connection.

If this IOChannel is not a socket then return INADDR_ANY, using the default constructor of an Inet4Address. Socket subclasses should override this.

Referenced by nidas::dynld::SampleInputStream::setIOChannel().

virtual const DSMConfig* nidas::core::IOChannel::getDSMConfig ( ) const
inlinevirtual

What DSM is this IOChannel connected to? May be NULL.

Referenced by nidas::core::FileSet::setDir(), and nidas::core::FileSet::setFileName().

virtual int nidas::core::IOChannel::getFd ( ) const
pure virtual
virtual const std::string& nidas::core::IOChannel::getName ( ) const
pure virtual
static const XMLCh* nidas::core::DOMable::getNamespaceURI ( )
inlinestaticinherited
virtual int nidas::core::IOChannel::getReconnectDelaySecs ( ) const
inlinevirtual
virtual enum McSocketRequest nidas::core::IOChannel::getRequestType ( ) const
inlinevirtual
virtual bool nidas::core::IOChannel::isNewInput ( ) const
inlinevirtual

Some IOChannels, namely FileSet, which opens successive files, need to indicate when a read is from the start of a new file.

This method is used by code which may need to do special things at the beginning of a file, like read a SampleInputHeader.

Reimplemented in nidas::core::UnixIOChannel, nidas::core::McSocketUDP, nidas::core::McSocket, nidas::core::Socket, nidas::core::DatagramSocket, and nidas::core::FileSet.

Referenced by nidas::core::IOStream::read().

virtual bool nidas::core::IOChannel::isNonBlocking ( ) const
throw (nidas::util::IOException
)
pure virtual
IOChannel& nidas::core::IOChannel::operator= ( const IOChannel rhs)
inline

References _dsm.

virtual size_t nidas::core::IOChannel::read ( void *  buf,
size_t  len 
)
throw (nidas::util::IOException
)
pure virtual
virtual void nidas::core::IOChannel::requestConnection ( IOChannelRequester )
throw (nidas::util::IOException
)
pure virtual

After the IOChannel is configured, a user of IOChannel calls requestConnection to get things started.

It is like opening a device, but in the case of server sockets, it just starts a thread to wait on connections. Only when the IOChannelRequester::connected() method is called back is the channel actually open and ready for IO. The IOChannel* returned by IOChannelRequester::connected may be another instance of an IOChannel.

Implemented in nidas::core::ServerSocket, nidas::dynld::isff::GOESXmtr, nidas::core::McSocketUDP, nidas::core::FileSet, nidas::core::McSocket, nidas::core::UnixIOChannel, nidas::core::DatagramSocket, and nidas::core::Socket.

Referenced by nidas::dynld::XMLConfigService::schedule().

virtual void nidas::core::IOChannel::setConnectionInfo ( const ConnectionInfo val)
inlinevirtual
virtual void nidas::core::IOChannel::setDSMConfig ( const DSMConfig val)
inlinevirtual
virtual void nidas::core::IOChannel::setName ( const std::string &  val)
pure virtual
virtual void nidas::core::IOChannel::setNonBlocking ( bool  val)
throw (nidas::util::IOException
)
pure virtual
virtual void nidas::core::IOChannel::setRequestType ( enum McSocketRequest  )
inlinevirtual
xercesc::DOMElement * DOMable::toDOMElement ( xercesc::DOMElement *  node,
bool  complete 
) const
throw (xercesc::DOMException
)
virtualinherited
xercesc::DOMElement * DOMable::toDOMParent ( xercesc::DOMElement *  parent,
bool  complete 
) const
throw (xercesc::DOMException
)
virtualinherited
virtual size_t nidas::core::IOChannel::write ( const void *  buf,
size_t  len 
)
throw (nidas::util::IOException
)
pure virtual
virtual size_t nidas::core::IOChannel::write ( const struct iovec *  iov,
int  iovcnt 
)
throw (nidas::util::IOException
)
pure virtual

Physical write method which must be implemented in derived classes.

Returns the number of bytes written, which may be less than the number requested.

Implemented in nidas::dynld::isff::SE_GOESXmtr, nidas::core::ServerSocket, nidas::core::Socket, nidas::core::McSocket, nidas::core::McSocketUDP, nidas::core::FileSet, nidas::core::DatagramSocket, nidas::core::UnixIOChannel, nidas::dynld::isff::SimGOESXmtr, and nidas::core::MultipleUDPSockets.

virtual bool nidas::core::IOChannel::writeNidasHeader ( ) const
inlinevirtual

Should the NIDAS header be written to this IOChannel? NIDAS headers are not written to DatagramSockets, because there is no guarantee they will get there.

Reimplemented in nidas::core::DatagramSocket.

Referenced by nidas::dynld::SampleInputStream::setIOChannel().

Member Data Documentation

ConnectionInfo nidas::core::IOChannel::_conInfo
private
const DSMConfig* nidas::core::IOChannel::_dsm
private

Referenced by operator=().


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