From 188e34375827915a9832ddb1db4b94494bbee455 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 1 Aug 2007 14:10:46 +0000 Subject: Clean up engine/client interfaces. Hide Response, now an internal engine implementation detail (and not a problem for script bindings anymore). git-svn-id: http://svn.drobilla.net/lad/ingen@666 a436a847-0d15-0410-975c-d299462d15a1 --- src/common/interface/ClientInterface.hpp | 89 ++++++++++++++++++-------------- src/common/interface/EngineInterface.hpp | 11 ++-- src/common/interface/Responder.hpp | 71 ------------------------- 3 files changed, 53 insertions(+), 118 deletions(-) delete mode 100644 src/common/interface/Responder.hpp (limited to 'src/common/interface') diff --git a/src/common/interface/ClientInterface.hpp b/src/common/interface/ClientInterface.hpp index a13b870c..4993c4f5 100644 --- a/src/common/interface/ClientInterface.hpp +++ b/src/common/interface/ClientInterface.hpp @@ -18,6 +18,7 @@ #ifndef CLIENTINTERFACE_H #define CLIENTINTERFACE_H +#include #include #include #include @@ -38,10 +39,11 @@ public: virtual ~ClientInterface() {} - /** Wrapper for engine->register_client to appease SWIG */ - virtual void subscribe(EngineInterface* engine) = 0; - - virtual void response(int32_t id, bool success, std::string msg) = 0; + inline const std::string& uri() const { return _uri; } + + virtual void response_ok(int32_t id) = 0; + + virtual void response_error(int32_t id, const std::string& msg) = 0; virtual void enable() = 0; @@ -60,65 +62,72 @@ public: /** Transfers are 'weak' bundles. These are used to break a large group * of similar/related messages into larger chunks (solely for communication * efficiency). A bunch of messages in a transfer will arrive as 1 or more - * bundles (so a transfer can exceep the maximum bundle (packet) size). + * bundles (so a transfer can exceed the maximum bundle (packet) size). */ virtual void transfer_begin() = 0; virtual void transfer_end() = 0; - virtual void error(std::string msg) = 0; + virtual void error(const std::string& msg) = 0; virtual void num_plugins(uint32_t num_plugins) = 0; - virtual void new_plugin(std::string uri, - std::string type_uri, - std::string name) = 0; + virtual void new_plugin(const std::string& uri, + const std::string& type_uri, + const std::string& name) = 0; - virtual void new_patch(std::string path, uint32_t poly) = 0; + virtual void new_patch(const std::string& path, uint32_t poly) = 0; - virtual void new_node(std::string plugin_uri, - std::string node_path, - bool is_polyphonic, - uint32_t num_ports) = 0; + virtual void new_node(const std::string& plugin_uri, + const std::string& node_path, + bool is_polyphonic, + uint32_t num_ports) = 0; - virtual void new_port(std::string path, - std::string data_type, - bool is_output) = 0; + virtual void new_port(const std::string& path, + const std::string& data_type, + bool is_output) = 0; - virtual void patch_enabled(std::string path) = 0; + virtual void patch_enabled(const std::string& path) = 0; - virtual void patch_disabled(std::string path) = 0; + virtual void patch_disabled(const std::string& path) = 0; - virtual void patch_cleared(std::string path) = 0; + virtual void patch_cleared(const std::string& path) = 0; - virtual void object_renamed(std::string old_path, - std::string new_path) = 0; + virtual void object_renamed(const std::string& old_path, + const std::string& new_path) = 0; - virtual void object_destroyed(std::string path) = 0; + virtual void object_destroyed(const std::string& path) = 0; - virtual void connection(std::string src_port_path, - std::string dst_port_path) = 0; + virtual void connection(const std::string& src_port_path, + const std::string& dst_port_path) = 0; - virtual void disconnection(std::string src_port_path, - std::string dst_port_path) = 0; + virtual void disconnection(const std::string& src_port_path, + const std::string& dst_port_path) = 0; - virtual void metadata_update(std::string subject_path, - std::string predicate, - Raul::Atom value) = 0; + virtual void metadata_update(const std::string& subject_path, + const std::string& predicate, + const Raul::Atom& value) = 0; - virtual void control_change(std::string port_path, - float value) = 0; + virtual void control_change(const std::string& port_path, + float value) = 0; - virtual void program_add(std::string node_path, - uint32_t bank, - uint32_t program, - std::string program_name) = 0; + virtual void program_add(const std::string& node_path, + uint32_t bank, + uint32_t program, + const std::string& program_name) = 0; - virtual void program_remove(std::string node_path, - uint32_t bank, - uint32_t program) = 0; + virtual void program_remove(const std::string& node_path, + uint32_t bank, + uint32_t program) = 0; protected: - ClientInterface() {} + ClientInterface(const std::string& uri) : _uri(uri) {} + ClientInterface() { + static char uri_buf[20]; + snprintf(uri_buf, 127, "%p", this); + _uri = uri_buf; + } + + std::string _uri; }; diff --git a/src/common/interface/EngineInterface.hpp b/src/common/interface/EngineInterface.hpp index 09860e31..192357a7 100644 --- a/src/common/interface/EngineInterface.hpp +++ b/src/common/interface/EngineInterface.hpp @@ -29,8 +29,6 @@ namespace Ingen { /** Shared code used on both client side and engine side (abstract interfaces). */ namespace Shared { -class Responder; - /** The (only) interface clients use to communicate with the engine. * @@ -42,12 +40,11 @@ public: virtual ~EngineInterface() {} // Responses - virtual void set_responder(SharedPtr responder) = 0; virtual void set_next_response_id(int32_t id) = 0; virtual void disable_responses() = 0; // Client registration - virtual void register_client(const string& uri, ClientInterface* client) = 0; + virtual void register_client(ClientInterface* client) = 0; virtual void unregister_client(const string& uri) = 0; @@ -112,9 +109,9 @@ public: virtual void midi_learn(const string& node_path) = 0; - virtual void set_metadata(const string& path, - const string& predicate, - const Raul::Atom& value) = 0; + virtual void set_metadata(const string& path, + const string& predicate, + const Raul::Atom& value) = 0; // Requests // diff --git a/src/common/interface/Responder.hpp b/src/common/interface/Responder.hpp deleted file mode 100644 index 463a3471..00000000 --- a/src/common/interface/Responder.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/* This file is part of Ingen. - * Copyright (C) 2007 Dave Robillard - * - * Ingen 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. - * - * Ingen 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., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef RESPONDER_H -#define RESPONDER_H - -#include -#include -#include -#include "interface/ClientInterface.hpp" - -namespace Ingen { -namespace Shared { - - -/** Class to handle responding to clients. - * - * This is an abstract base class to fully abstract the details of client - * communication from the internals of the engine. - * - * Note that this class only handles sending responses to commands from - * clients, (ie OK or an error), not notifications (ie new node, - * disconnection) - that's what ClientInterface is for. If a command is - * a request, the Responder can be used to find the ClientInterface - * (by URI) which should receive the response. - * - * ClientInterface and Responder are seperate because responding might not - * actually get exposed to the client interface (eg in simulated blocking - * interfaces that wait for responses before returning). - * - * Note for messages that have a "response" and some broadcasted effect - * (eg setting a port value) the "response" MUST be sent first since Responder - * is responsible for controlling whether the client wishes to receive the - * notification. - */ -class Responder -{ -public: - Responder() {} - virtual ~Responder() {} - - virtual std::string client_uri() { return ""; } - - virtual ClientInterface* client() { return NULL; } - - virtual void set_id(int32_t id) {} - - virtual void respond_ok() {} - virtual void respond_error(const std::string& msg) {} -}; - - -} // namespace Shared -} // namespace Ingen - -#endif // RESPONDER_H - -- cgit v1.2.1