nidas v1.2.3
|
A class for serializing Samples on an OutputStream. More...
#include <SampleOutputStream.h>
Static Public Member Functions | |
static const XMLCh * | getNamespaceURI () |
Protected Member Functions | |
SampleOutputStream * | clone (IOChannel *iochannel) |
SampleOutputStream (SampleOutputStream &, IOChannel *) | |
Copy constructor, with a new IOChannel. | |
size_t | write (const Sample *samp, bool streamFlush) |
size_t | incrementDiscardedSamples () |
SampleConnectionRequester * | getSampleConnectionRequester () |
void | disconnect () |
Close the IOChannel and notify whoever did the requestConnection that it is time to disconnect, perhaps because of an IOException. | |
Protected Attributes | |
IOStream * | _iostream |
std::string | _name |
Private Member Functions | |
SampleOutputStream (const SampleOutputStream &) | |
No copy. | |
SampleOutputStream & | operator= (const SampleOutputStream &) |
No assignment. | |
Private Attributes | |
int | _maxUsecs |
Maximum number of microseconds between physical writes. | |
dsm_time_t | _lastFlushTT |
Timetag of last flush of IOStream. | |
nidas::util::Mutex | _tagsMutex |
std::list< SampleTag * > | _requestedTags |
std::list< const SampleTag * > | _constRequestedTags |
IOChannel * | _iochan |
SampleConnectionRequester * | _connectionRequester |
dsm_time_t | _nextFileTime |
HeaderSource * | _headerSource |
const DSMConfig * | _dsm |
size_t | _nsamplesDiscarded |
std::map< std::string, Parameter * > | _parameters |
Map of parameters by name. | |
std::list< const Parameter * > | _constParameters |
List of const pointers to Parameters for providing via getParameters(). | |
std::list< const SampleTag * > | _sourceTags |
SampleOutput * | _original |
Pointer to the SampleOutput that I was cloned from. | |
float | _latency |
int | _reconnectDelaySecs |
dsm_time_t | _startTime |
Clipping time window. | |
dsm_time_t | _endTime |
Static Private Attributes | |
static XMLCh * | namespaceURI = 0 |
A class for serializing Samples on an OutputStream.
SampleOutputStream::SampleOutputStream | ( | ) |
References nidas::core::getSample(), and USECS_PER_SEC.
Referenced by clone().
SampleOutputStream::SampleOutputStream | ( | IOChannel * | iochan, |
SampleConnectionRequester * | rqstr = 0 ) |
Create a SampleOutputStream with a connected IOChannel.
References _iostream, _maxUsecs, nidas::core::SampleOutputBase::getIOChannel(), nidas::core::SampleOutputBase::getLatency(), nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), nidas::core::SampleOutputBase::setName(), and USECS_PER_SEC.
|
protected |
Copy constructor, with a new IOChannel.
References _iostream, _maxUsecs, nidas::core::SampleOutputBase::getIOChannel(), nidas::core::SampleOutputBase::getLatency(), nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), nidas::core::SampleOutputBase::setName(), and USECS_PER_SEC.
|
private |
No copy.
Add a parameter to this DSMSensor.
DSMSensor will then own the pointer and will delete it in its destructor. If a Parameter exists with the same name, it will be replaced with the new Parameter.
References nidas::core::SampleOutputBase::_constParameters, nidas::core::SampleOutputBase::_parameters, and nidas::core::getSample().
Referenced by nidas::core::SampleOutputBase::fromDOMElement().
nidas::util::InvalidParameterException |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_constRequestedTags, nidas::core::SampleOutputBase::_requestedTags, nidas::core::SampleOutputBase::_tagsMutex, and nidas::core::getSample().
Referenced by nidas::dynld::raf::CVIOutput::addRequestedSampleTag(), and nidas::core::SampleOutputBase::SampleOutputBase().
nidas::util::InvalidParameterException |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_sourceTags, nidas::core::SampleOutputBase::_tagsMutex, and nidas::core::getSample().
Referenced by nidas::core::SampleOutputBase::addSourceSampleTags(), and nidas::core::SampleOutputBase::SampleOutputBase().
|
virtualinherited |
nidas::util::InvalidParameterException |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::addSourceSampleTag(), and nidas::core::getSample().
|
protectedvirtual |
Implements nidas::core::SampleOutput.
References SampleOutputStream().
|
virtual |
nidas::util::IOException |
Reimplemented from nidas::core::SampleOutputBase.
References _iostream, nidas::core::SampleOutputBase::close(), and VLOG.
Referenced by ARLIngest::run(), NidsMerge::run(), and SensorExtract::run().
|
virtual |
Implementation of IOChannelRequester::connected().
How an IOChannel indicates that it has received a connection.
Reimplemented from nidas::core::SampleOutputBase.
References nidas::core::SampleOutputBase::connected(), and nidas::core::getSample().
|
inherited |
nidas::util::IOException |
References nidas::core::SampleOutputBase::_headerSource, nidas::core::SampleOutputBase::_nextFileTime, nidas::core::IOChannel::createFile(), nidas::core::SampleOutputBase::getIOChannel(), nidas::core::HeaderSource::sendDefaultHeader(), and nidas::core::HeaderSource::sendHeader().
Referenced by nidas::dynld::AsciiOutput::receive(), and nidas::dynld::raf::CVIOutput::receive().
|
protectedinherited |
Close the IOChannel and notify whoever did the requestConnection that it is time to disconnect, perhaps because of an IOException.
This is typically called in the receive() method of a SampleOutput if it gets an IOException when writing data. A common implementation of a connection requester is to delete this SampleOutput after the removing it from the sample stream. So the caller method should immediately return after calling disconnect().
nidas::util::IOException |
References nidas::core::SampleOutputBase::_connectionRequester, nidas::core::SampleOutputBase::close(), nidas::core::SampleConnectionRequester::disconnect(), nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), and ILOG.
Referenced by nidas::dynld::AsciiOutput::receive(), and nidas::dynld::raf::CVIOutput::receive().
|
virtual |
Ask that this SampleClient send out any buffered Samples that it may be holding.
)
Implements nidas::core::SampleClient.
References _iostream, nidas::core::IOStream::flush(), nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), VLOG, and WLOG.
Referenced by ARLIngest::run(), NidsMerge::run(), SensorExtract::run(), and write().
nidas::util::InvalidParameterException |
Implements nidas::core::DOMable.
Reimplemented in nidas::dynld::UDPSampleOutput.
References nidas::core::SampleOutputBase::addParameter(), nidas::core::IOChannel::createIOChannel(), nidas::core::Parameter::createParameter(), nidas::core::SampleOutputBase::getDSMConfig(), nidas::core::Project::getInstance(), nidas::core::SampleOutputBase::getIOChannel(), nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), nidas::core::SampleOutputBase::setIOChannel(), nidas::core::SampleOutputBase::setLatency(), nidas::core::SampleOutputBase::setName(), and WLOG.
Referenced by nidas::dynld::UDPSampleOutput::fromDOMElement().
|
virtualinherited |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_iochan, and nidas::core::IOChannel::getFd().
|
inlinevirtualinherited |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_iochan.
Referenced by nidas::dynld::AsciiOutput::AsciiOutput(), nidas::dynld::AsciiOutput::AsciiOutput(), nidas::dynld::AsciiOutput::connect(), nidas::core::SampleOutputBase::createNextFile(), nidas::dynld::raf::CVIOutput::CVIOutput(), nidas::dynld::raf::CVIOutput::CVIOutput(), nidas::core::SampleOutputBase::fromDOMElement(), nidas::dynld::RawSampleOutputStream::fromDOMElement(), nidas::dynld::UDPSampleOutput::fromDOMElement(), nidas::dynld::AsciiOutput::printHeader(), nidas::dynld::RawSampleOutputStream::RawSampleOutputStream(), nidas::dynld::RawSampleOutputStream::RawSampleOutputStream(), nidas::dynld::AsciiOutput::receive(), nidas::dynld::raf::CVIOutput::receive(), nidas::dynld::raf::CVIOutput::requestConnection(), SampleOutputStream(), SampleOutputStream(), nidas::dynld::raf::CVIOutput::setIOChannel(), and nidas::dynld::UDPSampleOutput::write().
|
inline |
Get the IOStream of this SampleOutputStream.
SampleOutputStream owns the pointer and will delete the IOStream in its destructor. The IOStream is available after a SammpleOutputStream is constructed with an connected IOChannel, or after the connected() method has been called and before close().
References _iostream.
|
inlinevirtualinherited |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_latency.
Referenced by SampleOutputStream(), and SampleOutputStream().
|
inlinevirtualinherited |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_name.
Referenced by nidas::dynld::UDPSampleOutput::ConnectionMonitor::addConnection(), nidas::dynld::AsciiOutput::AsciiOutput(), nidas::dynld::AsciiOutput::AsciiOutput(), nidas::dynld::UDPSampleOutput::XMLSocketListener::checkWorkers(), nidas::core::SampleOutputBase::close(), nidas::dynld::raf::CVIOutput::CVIOutput(), nidas::dynld::raf::CVIOutput::CVIOutput(), nidas::core::SampleOutputBase::disconnect(), nidas::dynld::UDPSampleOutput::XMLSocketListener::fireWorkers(), flush(), nidas::core::SampleOutputBase::fromDOMElement(), nidas::dynld::UDPSampleOutput::fromDOMElement(), nidas::dynld::RawSampleOutputStream::RawSampleOutputStream(), nidas::dynld::RawSampleOutputStream::RawSampleOutputStream(), nidas::dynld::AsciiOutput::receive(), nidas::dynld::raf::CVIOutput::receive(), nidas::dynld::UDPSampleOutput::ConnectionMonitor::removeConnection(), SampleOutputStream(), SampleOutputStream(), nidas::dynld::raf::CVIOutput::setIOChannel(), and setLatency().
References nidas::core::DOMable::namespaceURI.
Referenced by nidas::dynld::UDPSampleOutput::getProjectDOM(), nidas::core::Dataset::toDOMElement(), nidas::core::ProjectConfig::toDOMElement(), nidas::core::Dataset::toDOMParent(), nidas::core::Datasets::toDOMParent(), nidas::core::ProjectConfig::toDOMParent(), nidas::core::ProjectConfigs::toDOMParent(), nidas::core::DSMConfig::toDOMParent(), nidas::core::DSMSensor::toDOMParent(), nidas::core::Project::toDOMParent(), nidas::core::SampleTag::toDOMParent(), nidas::core::Site::toDOMParent(), nidas::core::ServerSocket::toDOMParent(), nidas::core::Variable::toDOMParent(), nidas::core::Datasets::writeXML(), and nidas::core::ProjectConfigs::writeXML().
|
inlineinherited |
References nidas::core::SampleOutputBase::_nextFileTime.
Referenced by nidas::dynld::AsciiOutput::receive(), and nidas::dynld::raf::CVIOutput::receive().
|
inlineinherited |
|
inlinevirtualinherited |
Get pointer to SampleOutput that was cloned.
Will be NULL if this SampleOutput is an un-cloned original.
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_original.
Fetch a parameter by name.
Returns a NULL pointer if no such parameter exists.
References nidas::core::SampleOutputBase::_parameters.
|
inlineinherited |
Get list of parameters.
References nidas::core::SampleOutputBase::_constParameters.
Referenced by nidas::dynld::UDPSampleOutput::fromDOMElement().
|
virtualinherited |
Base class implementation.
If setReconnectDelaySecs() has been called on this SampleOutput, then that value will be returned. Otherwise this will return the value of the IOChannel.
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_iochan, nidas::core::SampleOutputBase::_reconnectDelaySecs, and nidas::core::IOChannel::getReconnectDelaySecs().
|
inlineprotectedinherited |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_sourceTags, nidas::core::SampleOutputBase::_tagsMutex, and nidas::core::getSample().
|
inlineprotectedinherited |
|
inlinevirtualinherited |
Implements nidas::core::SampleOutput.
|
private |
No assignment.
Return true if SampleOutputBase considers the sample handled, such as if it is outside the clipping window.
Otherwise return false to indicate the subclass should handle the sample.
Reimplemented from nidas::core::SampleOutputBase.
References nidas::core::getSample(), NLOG, VLOG, and WLOG.
Referenced by SensorExtract::run().
|
virtualinherited |
Request a connection, but don't wait for it.
Requester will be notified via SampleConnectionRequester interface when the connection has been made. It is not necessary to call this method if a SampleOutput is constructed with a connected IOChannel.
nidas::util::IOException |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_connectionRequester, nidas::core::SampleOutputBase::_iochan, nidas::core::getSample(), and nidas::core::IOChannel::requestConnection().
Referenced by nidas::dynld::AsciiOutput::requestConnection(), and nidas::dynld::raf::CVIOutput::requestConnection().
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_dsm, and nidas::core::getSample().
|
inlinevirtualinherited |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_headerSource, and nidas::core::getSample().
Referenced by ARLIngest::run(), NidsMerge::run(), and SensorExtract::run().
Set the IOChannel for this SampleOutput.
This IOChannel is not yet connected. The IOChannel must be connected before the SampleOutput is used for I/O, using the requestConnection() method, or by IOChannel::connect() followed by SampleOutput::connected(IOChannel*).
Reimplemented in nidas::dynld::raf::CVIOutput.
References nidas::core::SampleOutputBase::_iochan, nidas::core::SampleOutputBase::getDSMConfig(), nidas::core::getSample(), and nidas::core::IOChannel::setDSMConfig().
Referenced by nidas::dynld::AsciiOutput::connect(), nidas::core::SampleOutputBase::connected(), nidas::core::SampleOutputBase::fromDOMElement(), and nidas::dynld::raf::CVIOutput::setIOChannel().
Outgoing data is buffered in an IOStream.
The stream will be flushed when the difference between successive time tags exceeds this value. This is a useful parameter for real-time applications.
val | Number of seconds between physical writes. Default is set in SampleOutputBase. |
nidas::util::InvalidParameterException |
Reimplemented from nidas::core::SampleOutputBase.
References _maxUsecs, nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), nidas::core::SampleOutputBase::setLatency(), and USECS_PER_SEC.
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_name, and nidas::core::getSample().
Referenced by nidas::dynld::AsciiOutput::AsciiOutput(), nidas::dynld::AsciiOutput::AsciiOutput(), nidas::core::SampleOutputBase::connected(), nidas::dynld::raf::CVIOutput::CVIOutput(), nidas::dynld::raf::CVIOutput::CVIOutput(), nidas::core::SampleOutputBase::fromDOMElement(), nidas::dynld::RawSampleOutputStream::RawSampleOutputStream(), nidas::dynld::RawSampleOutputStream::RawSampleOutputStream(), SampleOutputStream(), SampleOutputStream(), and nidas::dynld::raf::CVIOutput::setIOChannel().
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_reconnectDelaySecs, and nidas::core::getSample().
Referenced by nidas::dynld::raf::SyncServer::init().
|
inherited |
The sample output can have a time window which clips the samples outside the window.
Only samples at or after startTime
and before endTime
will be passed along. One or both of start and end time can be zero, in which case only the non-zero times are used to clip samples.
References nidas::core::SampleOutputBase::_endTime, nidas::core::SampleOutputBase::_startTime, and nidas::util::UTime::toUsecs().
Referenced by nidas::core::NidasApp::setOutputClipping().
|
virtualinherited |
Add my content into a DOMElement.
xercesc::DOMException |
Reimplemented in nidas::core::DSMConfig, nidas::core::DSMSensor, nidas::core::Project, nidas::core::SampleTag, nidas::core::Site, nidas::core::ServerSocket, and nidas::core::Variable.
Referenced by nidas::core::ServerSocket::toDOMParent().
|
virtualinherited |
Create a DOMElement and append it to the parent.
xercesc::DOMException |
Reimplemented in nidas::core::DSMConfig, nidas::core::DSMSensor, nidas::core::Project, nidas::core::SampleTag, nidas::core::Site, nidas::core::ServerSocket, and nidas::core::Variable.
nidas::util::IOException |
References _iostream, nidas::core::getSample(), nidas::core::SampleHeader::getSizeOf(), LOG_VERBOSE, and nidas::core::IOStream::write().
Raw write method, typically used to write the initial header.
nidas::util::IOException |
Implements nidas::core::SampleOutput.
References nidas::core::SampleOutputBase::_iochan, nidas::core::getSample(), len, and nidas::core::IOChannel::write().
nidas::util::IOException |
References _iostream, flush(), len, and nidas::core::IOStream::write().
|
privateinherited |
List of const pointers to Parameters for providing via getParameters().
Referenced by nidas::core::SampleOutputBase::addParameter(), and nidas::core::SampleOutputBase::getParameters().
|
privateinherited |
|
privateinherited |
|
privateinherited |
Referenced by nidas::core::SampleOutputBase::close(), nidas::core::SampleOutputBase::connected(), nidas::core::SampleOutputBase::getFd(), nidas::core::SampleOutputBase::getIOChannel(), nidas::core::SampleOutputBase::getReconnectDelaySecs(), nidas::core::SampleOutputBase::requestConnection(), nidas::core::SampleOutputBase::SampleOutputBase(), nidas::core::SampleOutputBase::setIOChannel(), nidas::core::SampleOutputBase::write(), and nidas::core::SampleOutputBase::~SampleOutputBase().
|
protected |
Referenced by close(), flush(), getIOStream(), SampleOutputStream(), SampleOutputStream(), write(), write(), and ~SampleOutputStream().
|
private |
Timetag of last flush of IOStream.
|
privateinherited |
|
private |
Maximum number of microseconds between physical writes.
Referenced by SampleOutputStream(), SampleOutputStream(), and setLatency().
|
protectedinherited |
Referenced by nidas::core::SampleOutputBase::getName(), and nidas::core::SampleOutputBase::setName().
|
privateinherited |
|
privateinherited |
|
privateinherited |
Pointer to the SampleOutput that I was cloned from.
Referenced by nidas::core::SampleOutputBase::getOriginal().
|
privateinherited |
Map of parameters by name.
Referenced by nidas::core::SampleOutputBase::addParameter(), nidas::core::SampleOutputBase::getParameter(), and nidas::core::SampleOutputBase::~SampleOutputBase().
|
privateinherited |
|
privateinherited |
|
privateinherited |
Clipping time window.
Samples outside the given time window will not pass.
Referenced by nidas::core::SampleOutputBase::receive(), and nidas::core::SampleOutputBase::setTimeClippingWindow().
|
mutableprivateinherited |
|
staticprivateinherited |
Referenced by nidas::core::DOMable::getNamespaceURI().