Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial

# InetWvIn.h

    00001 #ifndef STK_INETWVIN_H
    00002 #define STK_INETWVIN_H
    00003
    00004 #include "WvIn.h"
    00005 #include "TcpServer.h"
    00006 #include "UdpSocket.h"
    00007 #include "Thread.h"
    00008 #include "Mutex.h"
    00009
    00010 namespace stk {
    00011
    00012 /***************************************************/
    00036 /***************************************************/
    00037
    00038 typedef struct {
    00039   bool finished;
    00040   void *object;
    00041 } ThreadInfo;
    00042
    00043 class InetWvIn : public WvIn
    00044 {
    00045 public:
    00047
    00050   InetWvIn( unsigned long bufferFrames = 1024, unsigned int nBuffers = 8 );
    00051
    00053   ~InetWvIn();
    00054
    00056
    00063   void listen( int port = 2006, unsigned int nChannels = 1,
    00064                Stk::StkFormat format = STK_SINT16,
    00065                Socket::ProtocolType protocol = Socket::PROTO_TCP );
    00066
    00068
    00072   bool isConnected( void );
    00073
    00075
    00084   StkFloat lastOut( unsigned int channel = 0 );
    00085
    00087
    00097   StkFloat tick( unsigned int channel = 0 );
    00098
    00100
    00109   StkFrames& tick( StkFrames& frames );
    00110
    00111   // Called by the thread routine to receive data via the socket connection
    00112   // and fill the socket buffer.  This is not intended for general use but
    00113   // must be public for access from the thread.
    00114   void receive( void );
    00115
    00116 protected:
    00117
    00118   // Read buffered socket data into the data buffer ... will block if none available.
    00119   int readData( void );
    00120
    00121   Socket *soket_;
    00122   Thread thread_;
    00123   Mutex mutex_;
    00124   char *buffer_;
    00125   unsigned long bufferFrames_;
    00126   unsigned long bufferBytes_;
    00127   unsigned long bytesFilled_;
    00128   unsigned int nBuffers_;
    00129   unsigned long writePoint_;
    00130   unsigned long readPoint_;
    00131   long bufferCounter_;
    00132   int dataBytes_;
    00133   bool connected_;
    00134   int fd_;
    00135   ThreadInfo threadInfo_;
    00136   Stk::StkFormat dataType_;
    00137
    00138 };
    00139
    00140 inline StkFloat InetWvIn :: lastOut( unsigned int channel )
    00141 {
    00142 #if defined(_STK_DEBUG_)
    00143   if ( channel >= data_.channels() ) {
    00144     errorString_ << "InetWvIn::lastOut(): channel argument and data stream are incompatible!";
    00145     handleError( StkError::FUNCTION_ARGUMENT );
    00146   }
    00147 #endif
    00148
    00149   // If no connection and we've output all samples in the queue, return.
    00150   if ( !connected_ && bytesFilled_ == 0 && bufferCounter_ == 0 ) return 0.0;
    00151
    00152   return lastFrame_[channel];
    00153 }
    00154
    00155 } // stk namespace
    00156
    00157 #endif

The Synthesis ToolKit in C++ (STK)
©1995-2010 Perry R. Cook and Gary P. Scavone. All Rights Reserved.