hydrogen 1.2.3
OscServer.h
Go to the documentation of this file.
1/*
2 * Hydrogen
3 * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net]
4 * Copyright(c) 2008-2024 The hydrogen development team [hydrogen-devel@lists.sourceforge.net]
5 *
6 * http://www.hydrogen-music.org
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, see https://www.gnu.org/licenses
20 *
21 */
22
23#ifndef OSC_SERVER_H
24#define OSC_SERVER_H
25
26#if defined(H2CORE_HAVE_OSC) || _DOXYGEN_
27
28#include <lo/lo.h>
29
30
31#include <core/Object.h>
32#include <cassert>
33
34namespace lo
35{
36 class ServerThread;
37}
38
39namespace H2Core
40{
41 class Preferences;
42}
43
89class OscServer : public H2Core::Object<OscServer>
90{
92 public:
103 ~OscServer();
104
118 static void create_instance( H2Core::Preferences* pPreferences );
123 static OscServer* get_instance() { assert(__instance); return __instance; }
124
148 static QString qPrettyPrint(lo_type type,void * data);
149
199 bool init();
207 bool start();
210 bool stop();
255 void handleAction(std::shared_ptr<Action> pAction);
256
265 static void PLAY_Handler(lo_arg **argv, int i);
274 static void PLAY_STOP_TOGGLE_Handler(lo_arg **argv, int i);
283 static void PLAY_PAUSE_TOGGLE_Handler(lo_arg **argv, int i);
292 static void STOP_Handler(lo_arg **argv, int i);
301 static void PAUSE_Handler(lo_arg **argv, int i);
310 static void RECORD_READY_Handler(lo_arg **argv, int i);
319 static void RECORD_STROBE_TOGGLE_Handler(lo_arg **argv, int i);
328 static void RECORD_STROBE_Handler(lo_arg **argv, int i);
337 static void RECORD_EXIT_Handler(lo_arg **argv, int i);
346 static void MUTE_Handler(lo_arg **argv, int i);
355 static void UNMUTE_Handler(lo_arg **argv, int i);
364 static void MUTE_TOGGLE_Handler(lo_arg **argv, int i);
373 static void NEXT_BAR_Handler(lo_arg **argv, int i);
382 static void PREVIOUS_BAR_Handler(lo_arg **argv, int i);
391 static void BPM_Handler(lo_arg **argv, int i);
403 static void BPM_INCR_Handler(lo_arg **argv, int i);
415 static void BPM_DECR_Handler(lo_arg **argv, int i);
427 static void MASTER_VOLUME_RELATIVE_Handler(lo_arg **argv, int i);
436 static void MASTER_VOLUME_ABSOLUTE_Handler(lo_arg **argv, int i);
445 static void STRIP_VOLUME_RELATIVE_Handler(QString param1, QString param2);
454 static void STRIP_VOLUME_ABSOLUTE_Handler(int param1, float param2);
466 static void SELECT_NEXT_PATTERN_Handler(lo_arg **argv, int i);
478 static void SELECT_ONLY_NEXT_PATTERN_Handler(lo_arg **argv, int i);
490 static void SELECT_AND_PLAY_PATTERN_Handler(lo_arg **argv, int i);
500 static void FILTER_CUTOFF_LEVEL_ABSOLUTE_Handler(QString param1, QString param2);
509 static void BEATCOUNTER_Handler(lo_arg **argv, int i);
518 static void TAP_TEMPO_Handler(lo_arg **argv, int i);
530 static void PLAYLIST_SONG_Handler(lo_arg **argv, int i);
539 static void PLAYLIST_NEXT_SONG_Handler(lo_arg **argv, int i);
548 static void PLAYLIST_PREV_SONG_Handler(lo_arg **argv, int i);
557 static void TOGGLE_METRONOME_Handler(lo_arg **argv, int i);
569 static void SELECT_INSTRUMENT_Handler(lo_arg **argv, int i);
578 static void UNDO_ACTION_Handler(lo_arg **argv, int i);
587 static void REDO_ACTION_Handler(lo_arg **argv, int argc);
598 static void NEW_SONG_Handler(lo_arg **argv, int argc);
608 static void OPEN_SONG_Handler(lo_arg **argv, int argc);
616 static void SAVE_SONG_Handler(lo_arg **argv, int argc);
627 static void SAVE_SONG_AS_Handler(lo_arg **argv, int argc);
635 static void SAVE_PREFERENCES_Handler(lo_arg **argv, int argc);
643 static void QUIT_Handler(lo_arg **argv, int argc);
652 static void TIMELINE_ACTIVATION_Handler(lo_arg **argv, int argc);
661 static void TIMELINE_ADD_MARKER_Handler(lo_arg **argv, int argc);
669 static void TIMELINE_DELETE_MARKER_Handler(lo_arg **argv, int argc);
678 static void JACK_TRANSPORT_ACTIVATION_Handler(lo_arg **argv, int argc);
687 static void JACK_TIMEBASE_MASTER_ACTIVATION_Handler(lo_arg **argv, int argc);
696 static void SONG_MODE_ACTIVATION_Handler(lo_arg **argv, int argc);
705 static void LOOP_MODE_ACTIVATION_Handler(lo_arg **argv, int argc);
712 static void RELOCATE_Handler(lo_arg **argv, int argc);
724 static void NEW_PATTERN_Handler(lo_arg **argv, int argc);
734 static void OPEN_PATTERN_Handler(lo_arg **argv, int argc);
745 static void REMOVE_PATTERN_Handler(lo_arg **argv, int argc);
756 static void SONG_EDITOR_TOGGLE_GRID_CELL_Handler(lo_arg **argv, int argc);
766 static void LOAD_DRUMKIT_Handler( lo_arg **argv, int argc );
782 static void UPGRADE_DRUMKIT_Handler( lo_arg **argv, int argc );
793 static void VALIDATE_DRUMKIT_Handler( lo_arg **argv, int argc );
804 static void EXTRACT_DRUMKIT_Handler( lo_arg **argv, int argc );
833 static int generic_handler(const char *path, const char *types, lo_arg ** argv,
834 int argc, lo_message data, void *user_data);
835 static int incomingMessageLogging(const char *path, const char *types, lo_arg ** argv,
836 int argc, lo_message data, void *user_data);
837
838 private:
849 OscServer( H2Core::Preferences* pPreferences );
850
853 void broadcastMessage( const char* msgText, lo_message message);
854
872 lo::ServerThread* m_pServerThread;
883 std::list<lo_address> m_pClientRegistry;
884};
885
886#endif /* H2CORE_HAVE_OSC */
887
888#endif // OSC_SERVER_H
#define H2_OBJECT(name)
Definition Object.h:224
Manager for User Preferences File (singleton)
Definition Preferences.h:78
OSC Server implementation.
Definition OscServer.h:90
static void UPGRADE_DRUMKIT_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::upgradeDrumkit().
bool m_bInitialized
Used to determine whether the callback methods were already added to m_pServerThread.
Definition OscServer.h:864
static OscServer * get_instance()
Returns a pointer to the current OscServer singleton stored in __instance.
Definition OscServer.h:123
static void MUTE_TOGGLE_Handler(lo_arg **argv, int i)
Creates an Action of type MUTE_TOGGLE and passes its references to MidiActionManager::handleAction().
static void RECORD_READY_Handler(lo_arg **argv, int i)
Creates an Action of type RECORD_READY and passes its references to MidiActionManager::handleAction()...
static void EXTRACT_DRUMKIT_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::extractDrumkit().
static void PLAYLIST_PREV_SONG_Handler(lo_arg **argv, int i)
Creates an Action of type PLAYLIST_PREV_SONG and passes its references to MidiActionManager::handleAc...
static void PLAYLIST_SONG_Handler(lo_arg **argv, int i)
Creates an Action of type PLAYLIST_SONG and passes its references to MidiActionManager::handleAction(...
~OscServer()
Destructor freeing all addresses in m_pClientRegistry and setting __instance to nullptr.
static void REMOVE_PATTERN_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::removePattern().
std::list< lo_address > m_pClientRegistry
List of all OSC clients known to Hydrogen.
Definition OscServer.h:883
static void BEATCOUNTER_Handler(lo_arg **argv, int i)
Creates an Action of type BEATCOUNTER and passes its references to MidiActionManager::handleAction().
static void SONG_MODE_ACTIVATION_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::activateSongMode().
static int incomingMessageLogging(const char *path, const char *types, lo_arg **argv, int argc, lo_message data, void *user_data)
static void LOOP_MODE_ACTIVATION_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::activateLoopMode().
static void TIMELINE_ACTIVATION_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::activateTimeline().
static void PLAY_Handler(lo_arg **argv, int i)
Creates an Action of type PLAY and passes its references to MidiActionManager::handleAction().
H2Core::Preferences * m_pPreferences
Pointer to the H2Core::Preferences singleton.
Definition OscServer.h:859
static void UNDO_ACTION_Handler(lo_arg **argv, int i)
Creates an Action of type UNDO_ACTION and passes its references to MidiActionManager::handleAction().
static void VALIDATE_DRUMKIT_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::validateDrumkit().
static void BPM_Handler(lo_arg **argv, int i)
Creates sets the current tempo of Hydrogen to the provided value (first argument in argv).
static void TIMELINE_DELETE_MARKER_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::deleteTempoMarker().
OscServer(H2Core::Preferences *pPreferences)
Private constructor creating a new OSC server thread using the port H2Core::Preferences::m_nOscServer...
static void MASTER_VOLUME_ABSOLUTE_Handler(lo_arg **argv, int i)
Calls H2Core::CoreActionController::setMasterVolume() with the first argument in argv.
static void RELOCATE_Handler(lo_arg **argv, int argc)
static void JACK_TIMEBASE_MASTER_ACTIVATION_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::activateJackTimebaseMaster().
static void REDO_ACTION_Handler(lo_arg **argv, int argc)
Creates an Action of type REDO_ACTION and passes its references to MidiActionManager::handleAction().
static void MUTE_Handler(lo_arg **argv, int i)
Creates an Action of type MUTE and passes its references to MidiActionManager::handleAction().
static void TOGGLE_METRONOME_Handler(lo_arg **argv, int i)
Creates an Action of type TOGGLE_METRONOME and passes its references to MidiActionManager::handleActi...
static void NEW_PATTERN_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::newSong().
static void PLAY_STOP_TOGGLE_Handler(lo_arg **argv, int i)
Creates an Action of type PLAY/STOP_TOGGLE and passes its references to MidiActionManager::handleActi...
static QString qPrettyPrint(lo_type type, void *data)
Converts a data data of type type into a printable QString.
Definition OscServer.cpp:48
bool stop()
Stops the OSC server and makes it unavailable.
static void SELECT_AND_PLAY_PATTERN_Handler(lo_arg **argv, int i)
Creates an Action of type SELECT_AND_PLAY_PATTERN and passes its references to MidiActionManager::han...
static void JACK_TRANSPORT_ACTIVATION_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::activatedJackTransport().
static void SAVE_SONG_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::saveSong().
static void SAVE_PREFERENCES_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::savePreferences().
static void LOAD_DRUMKIT_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::setDrumkit().
static void PLAY_PAUSE_TOGGLE_Handler(lo_arg **argv, int i)
Creates an Action of type PLAY/PAUSE_TOGGLE and passes its references to MidiActionManager::handleAct...
static void STRIP_VOLUME_RELATIVE_Handler(QString param1, QString param2)
Creates an Action of type STRIP_VOLUME_RELATIVE and passes its references to MidiActionManager::handl...
lo::ServerThread * m_pServerThread
Object containing the actual thread with an OSC server running in.
Definition OscServer.h:872
static void UNMUTE_Handler(lo_arg **argv, int i)
Creates an Action of type UNMUTE and passes its references to MidiActionManager::handleAction().
static void SELECT_ONLY_NEXT_PATTERN_Handler(lo_arg **argv, int i)
Creates an Action of type SELECT_ONLY_NEXT_PATTERN and passes its references to MidiActionManager::ha...
static void TAP_TEMPO_Handler(lo_arg **argv, int i)
Creates an Action of type TAP_TEMPO and passes its references to MidiActionManager::handleAction().
static void OPEN_PATTERN_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::openPattern().
static void SELECT_NEXT_PATTERN_Handler(lo_arg **argv, int i)
Creates an Action of type SELECT_NEXT_PATTERN and passes its references to MidiActionManager::handleA...
static void SELECT_INSTRUMENT_Handler(lo_arg **argv, int i)
Creates an Action of type SELECT_INSTRUMENT and passes its references to MidiActionManager::handleAct...
static void OPEN_SONG_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::openSong().
static void BPM_DECR_Handler(lo_arg **argv, int i)
Creates an Action of type BPM_DECR and passes its references to MidiActionManager::handleAction().
static void RECORD_STROBE_TOGGLE_Handler(lo_arg **argv, int i)
Creates an Action of type RECORD/STROBE_TOGGLE and passes its references to MidiActionManager::handle...
static void NEW_SONG_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::newSong().
static void FILTER_CUTOFF_LEVEL_ABSOLUTE_Handler(QString param1, QString param2)
Creates an Action of type FILTER_CUTOFF_LEVEL_ABSOLUTE and passes its references to MidiActionManager...
static void PAUSE_Handler(lo_arg **argv, int i)
Creates an Action of type PAUSE and passes its references to MidiActionManager::handleAction().
static void TIMELINE_ADD_MARKER_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::addTempoMarker().
static void MASTER_VOLUME_RELATIVE_Handler(lo_arg **argv, int i)
Creates an Action of type MASTER_VOLUME_RELATIVE and passes its references to MidiActionManager::hand...
static void STOP_Handler(lo_arg **argv, int i)
Creates an Action of type STOP and passes its references to MidiActionManager::handleAction().
bool start()
Starts the OSC server and makes it available to handle commands.
static void STRIP_VOLUME_ABSOLUTE_Handler(int param1, float param2)
Calls H2Core::CoreActionController::setStripVolume() with both param1 and param2.
static int generic_handler(const char *path, const char *types, lo_arg **argv, int argc, lo_message data, void *user_data)
Catches any incoming messages and display them.
void handleAction(std::shared_ptr< Action > pAction)
Function called by H2Core::CoreActionController::initExternalControlInterfaces() to inform all client...
static OscServer * __instance
Object holding the current OscServer singleton.
Definition OscServer.h:98
static void QUIT_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::quit().
static void RECORD_EXIT_Handler(lo_arg **argv, int i)
Creates an Action of type EXIT and passes its references to MidiActionManager::handleAction().
static void NEXT_BAR_Handler(lo_arg **argv, int i)
Creates an Action of type >>_NEXT_BAR and passes its references to MidiActionManager::handleAction().
static void BPM_INCR_Handler(lo_arg **argv, int i)
Creates an Action of type BPM_INCR and passes its references to MidiActionManager::handleAction().
static void SONG_EDITOR_TOGGLE_GRID_CELL_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::songEditorToggleGridCell().
static void create_instance(H2Core::Preferences *pPreferences)
If __instance equals nullptr, a new OscServer singleton will be created by calling the OscServer() co...
static void RECORD_STROBE_Handler(lo_arg **argv, int i)
Creates an Action of type RECORD_STROBE and passes its references to MidiActionManager::handleAction(...
static void PREVIOUS_BAR_Handler(lo_arg **argv, int i)
Creates an Action of type <<_PREVIOUS_BAR and passes its references to MidiActionManager::handleActio...
static void PLAYLIST_NEXT_SONG_Handler(lo_arg **argv, int i)
Creates an Action of type PLAYLIST_NEXT_SONG and passes its references to MidiActionManager::handleAc...
bool init()
Registers all handler functions.
static void SAVE_SONG_AS_Handler(lo_arg **argv, int argc)
Triggers CoreActionController::saveSongAs().
void broadcastMessage(const char *msgText, lo_message message)
Helper function which sends a message with msgText to all connected clients.
Definition OscServer.h:35