27#ifndef NIDAS_DYNLD_UDPSAMPLEOUTPUT_H
28#define NIDAS_DYNLD_UDPSAMPLEOUTPUT_H
45class MultipleUDPSockets;
71 size_t write(
const struct iovec* iov,
int iovcnt);
159 unsigned short udpport);
165 std::vector<std::pair<nidas::util::Socket*,unsigned short> >
_sockets;
166 std::map<nidas::util::Inet4SocketAddress,nidas::core::ConnectionInfo>
_destinations;
Extra information associated with an IOChannel concerning the connection.
Definition ConnectionInfo.h:39
A channel for Input or Output of data.
Definition IOChannel.h:65
Definition MultipleUDPSockets.h:38
Implementation of portions of SampleOutput.
Definition SampleOutput.h:160
Interface of an output stream of samples.
Definition SampleOutput.h:49
Interface to a data sample.
Definition Sample.h:190
Thread that waits for connections to die.
Definition UDPSampleOutput.h:139
void addDestination(const nidas::core::ConnectionInfo &, unsigned short udpport)
A UDP request packet has arrived.
Definition UDPSampleOutput.cc:436
nidas::core::MultipleUDPSockets * _msock
Definition UDPSampleOutput.h:162
ConnectionMonitor(const ConnectionMonitor &)
No copying.
int _nfds
Definition UDPSampleOutput.h:170
std::list< std::pair< nidas::util::Socket *, unsigned short > > _pendingSockets
Definition UDPSampleOutput.h:163
~ConnectionMonitor()
Definition UDPSampleOutput.cc:412
void addConnection(nidas::util::Socket *, unsigned short udpport)
A TCP connection has been made.
Definition UDPSampleOutput.cc:462
ConnectionMonitor & operator=(const ConnectionMonitor &)
No assignment.
void removeConnection(nidas::util::Socket *, unsigned short udpport)
Definition UDPSampleOutput.cc:491
std::vector< std::pair< nidas::util::Socket *, unsigned short > > _sockets
Definition UDPSampleOutput.h:165
nidas::util::Mutex _sockLock
Definition UDPSampleOutput.h:168
bool _changed
Definition UDPSampleOutput.h:167
void updatePollfds()
Definition UDPSampleOutput.cc:515
std::list< std::pair< nidas::util::Socket *, unsigned short > > _pendingRemoveSockets
Definition UDPSampleOutput.h:164
ConnectionMonitor(nidas::core::MultipleUDPSockets *msock)
Definition UDPSampleOutput.cc:402
std::map< nidas::util::Inet4SocketAddress, nidas::core::ConnectionInfo > _destinations
Definition UDPSampleOutput.h:166
int run()
The method which will run in its own thread.
Definition UDPSampleOutput.cc:552
struct pollfd * _fds
Definition UDPSampleOutput.h:169
Worker thread that is run when a connection comes in, sending XML over a socket.
Definition UDPSampleOutput.h:115
nidas::util::Socket * _sock
Definition UDPSampleOutput.h:127
UDPSampleOutput * _output
Definition UDPSampleOutput.h:126
int run()
The method which will run in its own thread.
Definition UDPSampleOutput.cc:740
VariableListWorker(UDPSampleOutput *output, nidas::util::Socket *sock, bool keepOpen)
Constructor.
Definition UDPSampleOutput.cc:725
VariableListWorker(const VariableListWorker &)
No copying.
~VariableListWorker()
Definition UDPSampleOutput.cc:731
bool _keepOpen
Definition UDPSampleOutput.h:128
void interrupt()
Interrupt this thread.
Definition UDPSampleOutput.cc:734
VariableListWorker & operator=(const VariableListWorker &)
No assignment.
Thread that waits for a connection on a tcp socket, starting a VariableListWorker on each connection.
Definition UDPSampleOutput.h:182
std::list< VariableListWorker * > _workers
Definition UDPSampleOutput.h:195
UDPSampleOutput * _output
Definition UDPSampleOutput.h:192
XMLSocketListener(const XMLSocketListener &)
No copying.
int run()
The method which will run in its own thread.
Definition UDPSampleOutput.cc:595
void interrupt()
Interrupt this thread.
Definition UDPSampleOutput.cc:718
void checkWorkers()
Definition UDPSampleOutput.cc:681
nidas::util::ServerSocket * _sock
Definition UDPSampleOutput.h:193
~XMLSocketListener()
Definition UDPSampleOutput.cc:588
int _xmlPortNumber
Definition UDPSampleOutput.h:196
ConnectionMonitor * _monitor
Definition UDPSampleOutput.h:194
void fireWorkers()
Definition UDPSampleOutput.cc:701
XMLSocketListener(UDPSampleOutput *output, int xmlPortNumber, ConnectionMonitor *monitor)
Definition UDPSampleOutput.cc:577
XMLSocketListener & operator=(const XMLSocketListener &)
No assignment.
Interface of an output stream of samples.
Definition UDPSampleOutput.h:53
size_t _buflen
The actual buffer size.
Definition UDPSampleOutput.h:237
UDPSampleOutput(const UDPSampleOutput &)
No copying.
bool receive(const nidas::core::Sample *s)
Return true if SampleOutputBase considers the sample handled, such as if it is outside the clipping w...
Definition UDPSampleOutput.cc:221
char * _head
where we insert bytes into the buffer
Definition UDPSampleOutput.h:229
int _maxUsecs
Maximum number of microseconds between physical writes.
Definition UDPSampleOutput.h:252
nidas::util::Mutex _listenerLock
Definition UDPSampleOutput.h:213
void allocateBuffer(size_t len)
Definition UDPSampleOutput.cc:99
void addNumOutputBytes(int val)
Definition UDPSampleOutput.h:82
~UDPSampleOutput()
Definition UDPSampleOutput.cc:84
UDPSampleOutput & operator=(const UDPSampleOutput &)
No assignment.
unsigned short _multicastOutPort
Definition UDPSampleOutput.h:217
nidas::core::MultipleUDPSockets * _mochan
Definition UDPSampleOutput.h:203
nidas::core::SampleOutput * connected(nidas::core::IOChannel *)
Implementation of IOChannelRequester::connected().
Definition UDPSampleOutput.cc:122
void releaseProjectDOM()
Definition UDPSampleOutput.cc:366
nidas::util::RWLock _docRWLock
Definition UDPSampleOutput.h:211
void fromDOMElement(const xercesc::DOMElement *node)
Definition UDPSampleOutput.cc:371
long long _nbytesOut
Definition UDPSampleOutput.h:223
unsigned short _xmlPortNumber
Definition UDPSampleOutput.h:215
long long getNumOutputBytes() const
Total number of bytes written with this IOStream.
Definition UDPSampleOutput.h:80
char * _buffer
data buffer
Definition UDPSampleOutput.h:226
UDPSampleOutput()
Definition UDPSampleOutput.cc:49
bool _projectChanged
Definition UDPSampleOutput.h:207
xercesc::DOMDocument * _doc
Definition UDPSampleOutput.h:205
char * _tail
where we remove bytes from the buffer
Definition UDPSampleOutput.h:232
UDPSampleOutput * clone(nidas::core::IOChannel *iochannel)
This SampleOutput does not support cloning.
Definition UDPSampleOutput.cc:76
xercesc::DOMDocument * getProjectDOM()
Get a pointer to the current project DOM.
Definition UDPSampleOutput.cc:338
nidas::util::Mutex _docLock
Definition UDPSampleOutput.h:209
ConnectionMonitor * _monitor
Definition UDPSampleOutput.h:221
void flush()
Implementation of SampleClient::flush().
Definition UDPSampleOutput.h:63
nidas::core::dsm_time_t _lastWrite
Time of last physical write.
Definition UDPSampleOutput.h:247
XMLSocketListener * _listener
Definition UDPSampleOutput.h:219
size_t write(const struct iovec *iov, int iovcnt)
Definition UDPSampleOutput.cc:269
void close()
Definition UDPSampleOutput.cc:208
char * _eob
One past end of buffer.
Definition UDPSampleOutput.h:242
A C++ wrapper for a POSIX mutex.
Definition ThreadSupport.h:161
A C++ wrapper for a POSIX rwlock.
Definition ThreadSupport.h:379
A stream (TCP) socket that is used to listen for connections.
Definition Socket.h:981
A stream (TCP) socket.
Definition Socket.h:573
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
Structure sent back to client from the UDP feed server, in big-endian order, indicating what TCP port...
Definition UDPSampleOutput.h:273
char strings[0]
Definition UDPSampleOutput.h:282
unsigned int magic
Definition UDPSampleOutput.h:274
unsigned short int xmlTcpPort
Definition UDPSampleOutput.h:275
static const unsigned int MAGIC
Definition UDPSampleOutput.h:284
unsigned short int dataMulticastPort
Definition UDPSampleOutput.h:276
Structure which the client must send back to server on the TCP port.
Definition UDPSampleOutput.h:298
unsigned short int clientUdpPort
Definition UDPSampleOutput.h:300
unsigned int magic
Definition UDPSampleOutput.h:299