1 /***************************************************************************
2  *                                                                         *
3  *   LinuxSampler - modular, streaming capable sampler                     *
4  *                                                                         *
5  *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *
6  *   Copyright (C) 2005 - 2008 Christian Schoenebeck                       *
7  *                                                                         *
8  *   This program is free software; you can redistribute it and/or modify  *
9  *   it under the terms of the GNU General Public License as published by  *
10  *   the Free Software Foundation; either version 2 of the License, or     *
11  *   (at your option) any later version.                                   *
12  *                                                                         *
13  *   This program is distributed in the hope that it will be useful,       *
14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
16  *   GNU General Public License for more details.                          *
17  *                                                                         *
18  *   You should have received a copy of the GNU General Public License     *
19  *   along with this program; if not, write to the Free Software           *
20  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston,                 *
21  *   MA  02111-1307  USA                                                   *
22  ***************************************************************************/
23 
24 #ifndef __LSCPEVENT_H_
25 #define __LSCPEVENT_H_
26 #include <iostream>
27 #include <sstream>
28 #include <string>
29 #include <list>
30 #include "../Sampler.h"
31 #include "../common/global.h"
32 #include "../common/Exception.h"
33 
34 namespace LinuxSampler {
35 
36 /**
37  * Helper class for producing result sets
38  */
39 class LSCPEvent {
40     public:
41 	    /**
42 	     * Event types
43 	     **/
44 	    enum event_t {
45 		    event_audio_device_count,
46 		    event_audio_device_info,
47 		    event_midi_device_count,
48 		    event_midi_device_info,
49 		    event_channel_count,
50 		    event_voice_count,
51 		    event_stream_count,
52 		    event_buffer_fill,
53 		    event_channel_info,
54 		    event_fx_send_count,
55 		    event_fx_send_info,
56 		    event_midi_instr_map_count,
57 		    event_midi_instr_map_info,
58 		    event_midi_instr_count,
59 		    event_midi_instr_info,
60             event_db_instr_dir_count,
61 		    event_db_instr_dir_info,
62             event_db_instr_count,
63 		    event_db_instr_info,
64             event_db_instrs_job_info,
65 		    event_misc,
66 		    event_total_stream_count,
67 		    event_total_voice_count,
68 		    event_global_info,
69 		    event_channel_midi,
70 		    event_device_midi,
71                     event_fx_instance_count,
72                     event_fx_instance_info,
73                     event_send_fx_chain_count,
74                     event_send_fx_chain_info
75 	    };
76 
77 	    /* This constructor will do type lookup based on name
78 	     **/
79 	    LSCPEvent(String eventName) throw (Exception);
80 
81 	    /* These constructors are used to create event and fill it with data for sending
82 	     * These will be used by the thread that wants to send an event to all clients
83 	     * that are subscribed to it
84 	     **/
85 	    LSCPEvent(event_t eventType, int uiData);
86 	    LSCPEvent(event_t eventType, String sData);
87 	    LSCPEvent(event_t eventType, int uiData1, int uiData2);
88 	    LSCPEvent(event_t eventType, int uiData1, int uiData2, String sData3, int uiData4, int uiData5);
89 	    LSCPEvent(event_t eventType, String sData, int uiData);
90 	    LSCPEvent(event_t eventType, String sData, double dData);
91 	    LSCPEvent(event_t eventType, int uiData, String sData);
92 	    LSCPEvent(event_t eventType, int uiData1, String sData2, int uiData3, int uiData4);
93 	    LSCPEvent(event_t eventType, int uiData1, int uiData2, int uiData3);
94         LSCPEvent(event_t eventType, String sData1, String sData2, String sData3);
95 	    String Produce( void );
96 
97 	    /* Returns event type */
GetType(void)98 	    event_t GetType( void ) { return type; }
99 
100 	    /* These methods are used to registed and unregister an event */
101 	    static void RegisterEvent(event_t eventType, String EventName);
102 	    static void UnregisterEvent(event_t eventType);
103 
104 	    /* This method returns a name for events of a given type */
105 	    static String Name(event_t eventType);
106 
107 	    /* This method returs a list of all event types registered */
108 	    static std::list<event_t> List( void );
109 
110     private:
111 	    String storage;
112 	    event_t type;
113 
114 	    static std::map<event_t, String> EventNames;
115 };
116 
117 }
118 
119 #endif // __LSCPEVENT_H_
120