146 lines
4.5 KiB
C++
146 lines
4.5 KiB
C++
/* This file is part of Om. Copyright (C) 2006 Dave Robillard.
|
|
*
|
|
* Om is free software; you can redistribute it and/or modify it under the
|
|
* terms of the GNU General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option) any later
|
|
* version.
|
|
*
|
|
* Om is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef QUEUEDENGINEINTERFACE_H
|
|
#define QUEUEDENGINEINTERFACE_H
|
|
|
|
#include <inttypes.h>
|
|
#include <string>
|
|
#include <memory>
|
|
#include "util/CountedPtr.h"
|
|
#include "interface/ClientInterface.h"
|
|
#include "interface/ClientKey.h"
|
|
#include "QueuedEventSource.h"
|
|
#include "Responder.h"
|
|
using std::string;
|
|
|
|
namespace Om {
|
|
|
|
using Shared::ClientKey;
|
|
using Shared::ClientInterface;
|
|
|
|
|
|
/** A queued (preprocessed) event source / interface.
|
|
*
|
|
* This is the bridge between the EngineInterface presented to the client, and
|
|
* the EventSource that needs to be presented to the AudioDriver.
|
|
*
|
|
* This is sort of a state machine, \ref set_responder sets the Responder that
|
|
* will be used to send the response from all future function calls. Stateless
|
|
* protocols like UDP/OSC can use this to set a different response address for
|
|
* each event (eg incoming UDP port), but engine/client interfaces that don't
|
|
* need to change an 'address' constantly can just set it once on initialisation.
|
|
* Blocking control interfaces can be made by setting a Responder which signals
|
|
* the caller when the 'response' is 'sent'.
|
|
*
|
|
* If you do not register a responder, you have no way of knowing if your calls
|
|
* are successful.
|
|
*
|
|
* FIXME: this isn't really "queued" entirely, since some events aren't queued
|
|
* events and get pushed directly into the realtime event queue. Should that
|
|
* be separated into a different interface/client?
|
|
*/
|
|
class QueuedEngineInterface : public Om::QueuedEventSource
|
|
{
|
|
public:
|
|
QueuedEngineInterface(size_t queue_size);
|
|
virtual ~QueuedEngineInterface() {}
|
|
|
|
virtual void set_responder(CountedPtr<Responder> responder);
|
|
virtual void disable_responses();
|
|
|
|
// Client registration
|
|
virtual void register_client(ClientKey key, CountedPtr<ClientInterface> client);
|
|
virtual void unregister_client(ClientKey key);
|
|
|
|
|
|
// Engine commands
|
|
virtual void load_plugins();
|
|
virtual void activate();
|
|
virtual void deactivate();
|
|
virtual void quit();
|
|
|
|
// Object commands
|
|
|
|
virtual void create_patch(const string& path,
|
|
uint32_t poly);
|
|
|
|
virtual void create_node(const string& path,
|
|
const string& plugin_type,
|
|
const string& plugin_uri,
|
|
bool polyphonic);
|
|
|
|
virtual void rename(const string& old_path,
|
|
const string& new_name);
|
|
|
|
virtual void destroy(const string& path);
|
|
|
|
virtual void clear_patch(const string& patch_path);
|
|
|
|
virtual void enable_patch(const string& patch_path);
|
|
|
|
virtual void disable_patch(const string& patch_path);
|
|
|
|
virtual void connect(const string& src_port_path,
|
|
const string& dst_port_path);
|
|
|
|
virtual void disconnect(const string& src_port_path,
|
|
const string& dst_port_path);
|
|
|
|
virtual void disconnect_all(const string& node_path);
|
|
|
|
virtual void set_port_value(const string& port_path,
|
|
float val);
|
|
|
|
virtual void set_port_value(const string& port_path,
|
|
uint32_t voice,
|
|
float val);
|
|
|
|
virtual void set_port_value_queued(const string& port_path,
|
|
float val);
|
|
|
|
virtual void set_program(const string& node_path,
|
|
uint32_t bank,
|
|
uint32_t program);
|
|
|
|
virtual void midi_learn(const string& node_path);
|
|
|
|
virtual void set_metadata(const string& path,
|
|
const string& predicate,
|
|
const string& value);
|
|
|
|
// Requests //
|
|
|
|
virtual void ping();
|
|
|
|
virtual void request_port_value(const string& port_path);
|
|
|
|
virtual void request_plugins();
|
|
|
|
virtual void request_all_objects();
|
|
|
|
protected:
|
|
|
|
/** Where responses to current messages will go. */
|
|
CountedPtr<Responder> _responder;
|
|
};
|
|
|
|
|
|
} // namespace Om
|
|
|
|
#endif // QUEUEDENGINEINTERFACE_H
|
|
|