summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-08-01 14:10:46 +0000
committerDavid Robillard <d@drobilla.net>2007-08-01 14:10:46 +0000
commit188e34375827915a9832ddb1db4b94494bbee455 (patch)
tree2acbb717536af9a82949dcaa324360ed14bf5302 /src/common
parent1a77934531b0ddfc4392ccffbdde0058c2dbab68 (diff)
downloadingen-188e34375827915a9832ddb1db4b94494bbee455.tar.gz
ingen-188e34375827915a9832ddb1db4b94494bbee455.tar.bz2
ingen-188e34375827915a9832ddb1db4b94494bbee455.zip
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
Diffstat (limited to 'src/common')
-rw-r--r--src/common/interface/ClientInterface.hpp89
-rw-r--r--src/common/interface/EngineInterface.hpp11
-rw-r--r--src/common/interface/Responder.hpp71
3 files changed, 53 insertions, 118 deletions
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 <stdio.h>
#include <string>
#include <inttypes.h>
#include <raul/Atom.hpp>
@@ -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> 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 <http://drobilla.net>
- *
- * 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 <inttypes.h>
-#include <string>
-#include <raul/SharedPtr.hpp>
-#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), <b>not</b> 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
-