Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial
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. |