Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial
00001 #ifndef STK_MESSAGER_H 00002 #define STK_MESSAGER_H 00003 00004 #include "Stk.h" 00005 #include "Skini.h" 00006 #include <queue> 00007 00008 #if defined(__STK_REALTIME__) 00009 00010 #include "Mutex.h" 00011 #include "Thread.h" 00012 #include "TcpServer.h" 00013 #include "RtMidi.h" 00014 00015 #endif // __STK_REALTIME__ 00016 00017 namespace stk { 00018 00019 /***************************************************/ 00051 /***************************************************/ 00052 00053 const int DEFAULT_QUEUE_LIMIT = 200; 00054 00055 class Messager : public Stk 00056 { 00057 public: 00058 00059 // This structure is used to share data among the various realtime 00060 // messager threads. It must be public. 00061 struct MessagerData { 00062 Skini skini; 00063 std::queue<Skini::Message> queue; 00064 unsigned int queueLimit; 00065 int sources; 00066 00067 #if defined(__STK_REALTIME__) 00068 Mutex mutex; 00069 RtMidiIn *midi; 00070 TcpServer *socket; 00071 std::vector<int> fd; 00072 fd_set mask; 00073 #endif 00074 00075 // Default constructor. 00076 MessagerData() 00077 :queueLimit(0), sources(0) {} 00078 }; 00079 00081 Messager(); 00082 00084 ~Messager(); 00085 00087 00093 void popMessage( Skini::Message& message ); 00094 00096 void pushMessage( Skini::Message& message ); 00097 00099 00107 bool setScoreFile( const char* filename ); 00108 00109 #if defined(__STK_REALTIME__) 00111 00120 bool startStdInput(); 00121 00123 00134 bool startSocketInput( int port=2001 ); 00135 00137 00149 bool startMidiInput( int port=0 ); 00150 00151 #endif 00152 00153 protected: 00154 00155 MessagerData data_; 00156 00157 #if defined(__STK_REALTIME__) 00158 Thread stdinThread_; 00159 Thread socketThread_; 00160 #endif 00161 00162 }; 00163 00164 } // stk namespace 00165 00166 #endif
The Synthesis ToolKit in C++ (STK) |
©1995-2010 Perry R. Cook and Gary P. Scavone. All Rights Reserved. |