Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial

Messager.h
1 #ifndef STK_MESSAGER_H
2 #define STK_MESSAGER_H
3
4 #include "Stk.h"
5 #include "Skini.h"
6 #include <queue>
7
8 #if defined(__STK_REALTIME__)
9
10 #include "Mutex.h"
11 #include "Thread.h"
12 #include "TcpServer.h"
13 #include "RtMidi.h"
14
15 #endif // __STK_REALTIME__
16
17 namespace stk {
18
19 /***************************************************/
51 /***************************************************/
52
53 const int DEFAULT_QUEUE_LIMIT = 200;
54
55 class Messager : public Stk
56 {
57 public:
58
59 // This structure is used to share data among the various realtime
60 // messager threads. It must be public.
61 struct MessagerData {
62 Skini skini;
63 std::queue<Skini::Message> queue;
64 unsigned int queueLimit;
65 int sources;
66
67 #if defined(__STK_REALTIME__)
68 Mutex mutex;
69 RtMidiIn *midi;
70 TcpServer *socket;
71 std::vector<int> fd;
72 fd_set mask;
73 #endif
74
75 // Default constructor.
76 MessagerData()
77 :queueLimit(0), sources(0) {}
78 };
79
81 Messager();
82
84 ~Messager();
85
87
93 void popMessage( Skini::Message& message );
94
96 void pushMessage( Skini::Message& message );
97
99
107 bool setScoreFile( const char* filename );
108
109 #if defined(__STK_REALTIME__)
110
111
120 bool startStdInput();
121
123
134 bool startSocketInput( int port=2001 );
135
137
149 bool startMidiInput( int port=0 );
150
151 #endif
152
153 protected:
154
155 MessagerData data_;
156
157 #if defined(__STK_REALTIME__)
158 Thread stdinThread_;
159 Thread socketThread_;
160 #endif
161
162 };
163
164 } // stk namespace
165
166 #endif

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