nidas v1.2.3
SampleOutput.h
Go to the documentation of this file.
1// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4; -*-
2// vim: set shiftwidth=4 softtabstop=4 expandtab:
3/*
4 ********************************************************************
5 ** NIDAS: NCAR In-situ Data Acquistion Software
6 **
7 ** 2006, Copyright University Corporation for Atmospheric Research
8 **
9 ** This program is free software; you can redistribute it and/or modify
10 ** it under the terms of the GNU General Public License as published by
11 ** the Free Software Foundation; either version 2 of the License, or
12 ** (at your option) any later version.
13 **
14 ** This program is distributed in the hope that it will be useful,
15 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ** GNU General Public License for more details.
18 **
19 ** The LICENSE.txt file accompanying this software contains
20 ** a copy of the GNU General Public License. If it is not found,
21 ** write to the Free Software Foundation, Inc.,
22 ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 **
24 ********************************************************************
25*/
26
27#ifndef NIDAS_CORE_SAMPLEOUTPUT_H
28#define NIDAS_CORE_SAMPLEOUTPUT_H
29
30#include "Sample.h"
31#include "SampleClient.h"
32#include "Parameter.h"
33#include "IOStream.h"
34#include "HeaderSource.h"
35#include "ConnectionRequester.h"
36
37#include <nidas/util/UTime.h>
38// #include <nidas/util/McSocket.h>
39
40namespace nidas { namespace core {
41
42class DSMConfig;
43class SampleTag;
44
49{
50public:
51
52 virtual ~SampleOutput() {}
53
58 virtual SampleOutput* getOriginal() const = 0;
59
60 virtual void setName(const std::string& val) = 0;
61
62 virtual const std::string& getName() const = 0;
63
64 virtual bool isRaw() const = 0;
65
75 virtual void addRequestedSampleTag(SampleTag* tag) = 0;
76
77 virtual std::list<const SampleTag*> getRequestedSampleTags() const = 0;
78
87 virtual void addSourceSampleTag(const SampleTag* tag) = 0;
88
92 virtual void addSourceSampleTags(const std::list<const SampleTag*>& tags) = 0;
93
94 virtual std::list<const SampleTag*> getSourceSampleTags() const = 0;
95
108
116 virtual int getReconnectDelaySecs() const = 0;
117
118 virtual void setReconnectDelaySecs(int val) = 0;
119
120 virtual int getFd() const = 0;
121
122 virtual IOChannel* getIOChannel() const = 0;
123
130 virtual size_t write(const void* buf, size_t len) = 0;
131
135 virtual void close() = 0;
136
137 virtual void setHeaderSource(HeaderSource* val) = 0;
138
139 virtual void setDSMConfig(const DSMConfig* val) = 0;
140
141 virtual const DSMConfig* getDSMConfig() const = 0;
142
146 virtual void setLatency(float val) = 0;
147
148 virtual float getLatency() const = 0;
149
150protected:
151
152 virtual SampleOutput* clone(IOChannel* iochannel) = 0;
153
154};
155
160{
161public:
162
164
171
173
182 virtual void setIOChannel(IOChannel* val);
183
185 {
186 return _original;
187 }
188
189 void setName(const std::string& val) { _name = val; }
190
191 const std::string& getName() const { return _name; }
192
193 bool isRaw() const { return false; }
194
199
200 std::list<const SampleTag*> getRequestedSampleTags() const;
201
205 void addSourceSampleTag(const SampleTag* tag);
206
210 void addSourceSampleTags(const std::list<const SampleTag*>& tags);
211
212 std::list<const SampleTag*> getSourceSampleTags() const;
213
223
232
238 int getReconnectDelaySecs() const;
239
240 void setReconnectDelaySecs(int val);
241
242 int getFd() const;
243
247 void close();
248
250
255
262 size_t write(const void* buf, size_t len);
263
267 void fromDOMElement(const xercesc::DOMElement* node);
268
269 IOChannel* getIOChannel() const { return _iochan; }
270
272 {
274 }
275
276 void setDSMConfig(const DSMConfig* val)
277 {
278 _dsm = val;
279 }
280
281 const DSMConfig* getDSMConfig() const
282 {
283 return _dsm;
284 }
285
287
294 void addParameter(Parameter* val);
295
299 const std::list<const Parameter*>& getParameters() const
300 {
301 return _constParameters;
302 }
303
308 const Parameter* getParameter(const std::string& name) const;
309
320 void setLatency(float val)
321 {
322 _latency = val;
323 }
324
325 float getLatency() const { return _latency; }
326
334 void
336 const nidas::util::UTime& endTime);
337
343 bool receive(const Sample *s);
344
345protected:
350
352
357
358 std::string _name;
359
373 void disconnect();
374
375private:
376
378
379 std::list<SampleTag*> _requestedTags;
380
381 std::list<const SampleTag*> _constRequestedTags;
382
384
386
388
390
392
394
398 std::map<std::string,Parameter*> _parameters;
399
404 std::list<const Parameter*> _constParameters;
405
406 std::list<const SampleTag*> _sourceTags;
407
412
413 float _latency;
414
416
423
428
433
434};
435
436}} // namespace nidas namespace core
437
438#endif
Interface of an object that can be instantiated from a DOM element, via the fromDOMElement method,...
Definition DOMable.h:51
Class that should include all that is configurable about a DSM.
Definition DSMConfig.h:55
An interface for sending a SampleHeader to a SampleOutput.
Definition HeaderSource.h:43
Interface for an object that requests connections to Inputs or Outputs.
Definition IOChannel.h:56
A channel for Input or Output of data.
Definition IOChannel.h:65
Definition Parameter.h:47
Pure virtual interface of a client of Samples.
Definition SampleClient.h:38
Interface for an object that requests connections SampleOutputs.
Definition ConnectionRequester.h:43
Implementation of portions of SampleOutput.
Definition SampleOutput.h:160
bool receive(const Sample *s)
Return true if SampleOutputBase considers the sample handled, such as if it is outside the clipping w...
Definition SampleOutput.cc:381
void fromDOMElement(const xercesc::DOMElement *node)
Definition SampleOutput.cc:303
void requestConnection(SampleConnectionRequester *)
Request a connection, but don't wait for it.
Definition SampleOutput.cc:193
IOChannel * _iochan
Definition SampleOutput.h:383
virtual void setIOChannel(IOChannel *val)
Set the IOChannel for this SampleOutput.
Definition SampleOutput.cc:184
int getFd() const
Definition SampleOutput.cc:178
void setReconnectDelaySecs(int val)
Definition SampleOutput.cc:123
SampleConnectionRequester * getSampleConnectionRequester()
Definition SampleOutput.h:353
int getReconnectDelaySecs() const
Base class implementation.
Definition SampleOutput.cc:116
SampleOutputBase & operator=(const SampleOutputBase &)
No assignment.
void addRequestedSampleTag(SampleTag *tag)
Definition SampleOutput.cc:128
void setName(const std::string &val)
Definition SampleOutput.h:189
std::list< SampleTag * > _requestedTags
Definition SampleOutput.h:379
void setTimeClippingWindow(const nidas::util::UTime &startTime, const nidas::util::UTime &endTime)
The sample output can have a time window which clips the samples outside the window.
Definition SampleOutput.cc:394
std::list< const SampleTag * > getSourceSampleTags() const
Definition SampleOutput.cc:163
size_t _nsamplesDiscarded
Definition SampleOutput.h:393
IOChannel * getIOChannel() const
Definition SampleOutput.h:269
dsm_time_t getNextFileTime() const
Definition SampleOutput.h:249
HeaderSource * _headerSource
Definition SampleOutput.h:389
std::map< std::string, Parameter * > _parameters
Map of parameters by name.
Definition SampleOutput.h:398
SampleOutput * connected(IOChannel *ochan)
Implementation of IOChannelRequester::connected().
Definition SampleOutput.cc:203
int _reconnectDelaySecs
Definition SampleOutput.h:415
std::list< const SampleTag * > _sourceTags
Definition SampleOutput.h:406
void setHeaderSource(HeaderSource *val)
Definition SampleOutput.h:271
std::list< const SampleTag * > _constRequestedTags
Definition SampleOutput.h:381
SampleConnectionRequester * _connectionRequester
Definition SampleOutput.h:385
float getLatency() const
Definition SampleOutput.h:325
nidas::util::Mutex _tagsMutex
Definition SampleOutput.h:377
void createNextFile(dsm_time_t)
Definition SampleOutput.cc:276
const DSMConfig * _dsm
Definition SampleOutput.h:391
const std::list< const Parameter * > & getParameters() const
Get list of parameters.
Definition SampleOutput.h:299
dsm_time_t _endTime
Definition SampleOutput.h:422
void close()
Definition SampleOutput.cc:169
void setLatency(float val)
Set desired latency, providing some control over the response time vs buffer efficiency tradeoff.
Definition SampleOutput.h:320
const DSMConfig * getDSMConfig() const
Definition SampleOutput.h:281
size_t write(const void *buf, size_t len)
Raw write method, typically used to write the initial header.
Definition SampleOutput.cc:289
bool isRaw() const
Definition SampleOutput.h:193
void setDSMConfig(const DSMConfig *val)
Definition SampleOutput.h:276
~SampleOutputBase()
Definition SampleOutput.cc:99
const Parameter * getParameter(const std::string &name) const
Fetch a parameter by name.
Definition SampleOutput.cc:269
SampleOutput * _original
Pointer to the SampleOutput that I was cloned from.
Definition SampleOutput.h:411
SampleOutput * getOriginal() const
Get pointer to SampleOutput that was cloned.
Definition SampleOutput.h:184
size_t incrementDiscardedSamples()
Definition SampleOutput.h:351
SampleOutputBase(const SampleOutputBase &)
No copy.
std::list< const SampleTag * > getRequestedSampleTags() const
Definition SampleOutput.cc:138
void addSourceSampleTag(const SampleTag *tag)
Definition SampleOutput.cc:144
size_t getNumDiscardedSamples() const
Definition SampleOutput.h:286
void disconnect()
Close the IOChannel and notify whoever did the requestConnection that it is time to disconnect,...
Definition SampleOutput.cc:230
float _latency
Definition SampleOutput.h:413
std::string _name
Definition SampleOutput.h:358
dsm_time_t _startTime
Clipping time window.
Definition SampleOutput.h:421
std::list< const Parameter * > _constParameters
List of const pointers to Parameters for providing via getParameters().
Definition SampleOutput.h:404
dsm_time_t _nextFileTime
Definition SampleOutput.h:387
const std::string & getName() const
Definition SampleOutput.h:191
void addParameter(Parameter *val)
Add a parameter to this DSMSensor.
Definition SampleOutput.cc:244
void addSourceSampleTags(const std::list< const SampleTag * > &tags)
Definition SampleOutput.cc:151
SampleOutputBase()
Definition SampleOutput.cc:42
Interface of an output stream of samples.
Definition SampleOutput.h:49
virtual int getReconnectDelaySecs() const =0
Derived classes implement this to indicate whether a connection should be requested again if one fail...
virtual void close()=0
virtual int getFd() const =0
virtual IOChannel * getIOChannel() const =0
virtual const DSMConfig * getDSMConfig() const =0
virtual void setLatency(float val)=0
virtual void addSourceSampleTags(const std::list< const SampleTag * > &tags)=0
virtual void setName(const std::string &val)=0
virtual std::list< const SampleTag * > getRequestedSampleTags() const =0
virtual const std::string & getName() const =0
virtual std::list< const SampleTag * > getSourceSampleTags() const =0
virtual void addRequestedSampleTag(SampleTag *tag)=0
Some SampleOutputs don't send out all the Samples that they receive.
virtual void setHeaderSource(HeaderSource *val)=0
virtual float getLatency() const =0
virtual void setDSMConfig(const DSMConfig *val)=0
virtual bool isRaw() const =0
virtual SampleOutput * getOriginal() const =0
Get pointer to SampleOutput that was cloned.
virtual void requestConnection(SampleConnectionRequester *)=0
Request a connection, of this SampleOutput, but don't wait for it.
virtual ~SampleOutput()
Definition SampleOutput.h:52
virtual void addSourceSampleTag(const SampleTag *tag)=0
Some SampleOutputs like to be informed of what SampleTags they will be receiving from their SampleSou...
virtual SampleOutput * clone(IOChannel *iochannel)=0
virtual size_t write(const void *buf, size_t len)=0
Plain raw write, typically only used to write an initial header.
virtual void setReconnectDelaySecs(int val)=0
Class describing a group of variables that are sampled and handled together.
Definition SampleTag.h:88
Interface to a data sample.
Definition Sample.h:190
A C++ wrapper for a POSIX mutex.
Definition ThreadSupport.h:161
A class for parsing, formatting and doing operations on time, based on Unix time conventions,...
Definition UTime.h:95
Sample * getSample(sampleType type, unsigned int len)
A convienence method for getting a sample of an enumerated type from a pool.
Definition Sample.cc:70
long long dsm_time_t
Posix time in microseconds, the number of non-leap microseconds since 1970 Jan 1 00:00 UTC.
Definition Sample.h:62
Root namespace for the NCAR In-Situ Data Acquisition Software.
Definition A2DConverter.h:31
int len
Definition sing.cc:948