From 4e8811b819e66b72befe4eb2012f36fcae438a5c Mon Sep 17 00:00:00 2001
From: David Robillard <d@drobilla.net>
Date: Thu, 7 Jan 2010 02:16:13 +0000
Subject: Shrink ClientBroadcaster code via macro.

git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2354 a436a847-0d15-0410-975c-d299462d15a1
---
 src/engine/ClientBroadcaster.cpp  | 138 ++------------------------------------
 src/engine/ClientBroadcaster.hpp  |  52 +++++++++-----
 src/engine/HTTPEngineReceiver.cpp |   6 +-
 3 files changed, 47 insertions(+), 149 deletions(-)

(limited to 'src/engine')

diff --git a/src/engine/ClientBroadcaster.cpp b/src/engine/ClientBroadcaster.cpp
index 1da56af6..482d25e6 100644
--- a/src/engine/ClientBroadcaster.cpp
+++ b/src/engine/ClientBroadcaster.cpp
@@ -89,42 +89,10 @@ ClientBroadcaster::client(const URI& uri)
 
 
 void
-ClientBroadcaster::bundle_begin()
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->bundle_begin();
-}
-
-
-void
-ClientBroadcaster::bundle_end()
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->bundle_end();
-}
-
-
-void
-ClientBroadcaster::transfer_begin()
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->transfer_begin();
-}
-
-
-void
-ClientBroadcaster::transfer_end()
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->transfer_end();
-}
-
-
-void
-ClientBroadcaster::error(const string& msg)
+ClientBroadcaster::send_plugins(const NodeFactory::Plugins& plugins)
 {
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->error(msg);
+	for (Clients::const_iterator c = _clients.begin(); c != _clients.end(); ++c)
+		send_plugins_to((*c).second, plugins);
 }
 
 
@@ -142,108 +110,16 @@ ClientBroadcaster::send_plugins_to(ClientInterface* client, const NodeFactory::P
 }
 
 
-void
-ClientBroadcaster::send_plugins(const NodeFactory::Plugins& plugins)
-{
-	for (Clients::const_iterator c = _clients.begin(); c != _clients.end(); ++c)
-		send_plugins_to((*c).second, plugins);
-}
-
-
-void
-ClientBroadcaster::del(const Path& path)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->del(path);
-}
-
-
-void
-ClientBroadcaster::connect(const Path& src_port_path, const Path& dst_port_path)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->connect(src_port_path, dst_port_path);
-}
-
-
-void
-ClientBroadcaster::disconnect(const Path& src_port_path, const Path& dst_port_path)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->disconnect(src_port_path, dst_port_path);
-}
-
-
-void
-ClientBroadcaster::put(const Raul::URI& subject, const Shared::Resource::Properties& properties)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->put(subject, properties);
-}
-
-
-/** Send notification of a property update.
+/** Send an object to all clients.
  *
- * Like control changes, does not send update to client that set the property, if applicable.
- */
-void
-ClientBroadcaster::set_property(const URI& subject, const URI& key, const Atom& value)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->set_property(subject, key, value);
-}
-
-
-/** Send notification of a control change.
- *
- * If responder is specified, the notification will not be send to the address of
- * that responder (to avoid sending redundant information back to clients and
- * forcing clients to ignore things to avoid feedback loops etc).
- */
-void
-ClientBroadcaster::set_port_value(const Path& port_path, const Raul::Atom& value)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->set_port_value(port_path, value);
-}
-
-
-void
-ClientBroadcaster::set_voice_value(const Path& port_path, uint32_t voice, const Raul::Atom& value)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->set_voice_value(port_path, voice, value);
-}
-
-
-void
-ClientBroadcaster::activity(const Path& path)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->activity(path);
-}
-
-
-/** Send an object.
- *
- * @param p         Object to send
+ * @param o         Object to send
  * @param recursive If true send all children of object
  */
 void
-ClientBroadcaster::send_object(const GraphObjectImpl* p, bool recursive)
-{
-	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		ObjectSender::send_object((*i).second, p, recursive);
-}
-
-
-/** Sends notification of an GraphObject's renaming
- */
-void
-ClientBroadcaster::move(const Path& old_path, const Path& new_path)
+ClientBroadcaster::send_object(const GraphObjectImpl* o, bool recursive)
 {
 	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i)
-		(*i).second->move(old_path, new_path);
+		ObjectSender::send_object((*i).second, o, recursive);
 }
 
 
diff --git a/src/engine/ClientBroadcaster.hpp b/src/engine/ClientBroadcaster.hpp
index 85524416..cfe0a14f 100644
--- a/src/engine/ClientBroadcaster.hpp
+++ b/src/engine/ClientBroadcaster.hpp
@@ -56,35 +56,57 @@ public:
 
 	void send_object(const GraphObjectImpl* p, bool recursive);
 
+#define BROADCAST(msg, ...) \
+	for (Clients::const_iterator i = _clients.begin(); i != _clients.end(); ++i) \
+		(*i).second->msg(__VA_ARGS__)
+
+
 	// CommonInterface
 
-	void bundle_begin();
-	void bundle_end();
+	void bundle_begin() { BROADCAST(bundle_begin); }
+	void bundle_end()   { BROADCAST(bundle_end); }
 
 	void put(const Raul::URI&                    uri,
-	         const Shared::Resource::Properties& properties);
+	         const Shared::Resource::Properties& properties) {
+		BROADCAST(put, uri, properties);
+	}
 
 	void move(const Raul::Path& old_path,
-	          const Raul::Path& new_path);
+	          const Raul::Path& new_path) {
+		BROADCAST(move, old_path, new_path);
+	}
 
-	void del(const Raul::Path& path);
+	void del(const Raul::Path& path) {
+		BROADCAST(del, path);
+	}
 
 	void connect(const Raul::Path& src_port_path,
-	             const Raul::Path& dst_port_path);
+	             const Raul::Path& dst_port_path) {
+		BROADCAST(connect, src_port_path, dst_port_path);
+	}
 
 	void disconnect(const Raul::Path& src_port_path,
-	                const Raul::Path& dst_port_path);
+	                const Raul::Path& dst_port_path) {
+		BROADCAST(disconnect, src_port_path, dst_port_path);
+	}
 
 	void set_property(const Raul::URI&  subject,
 	                  const Raul::URI&  predicate,
-	                  const Raul::Atom& value);
+	                  const Raul::Atom& value) {
+		BROADCAST(set_property, subject, predicate, value);
+	}
 
 	void set_port_value(const Raul::Path& port_path,
-	                    const Raul::Atom& value);
+	                    const Raul::Atom& value) {
+		BROADCAST(set_port_value, port_path, value);
+	}
 
 	void set_voice_value(const Raul::Path& port_path,
 	                     uint32_t          voice,
-	                     const Raul::Atom& value);
+	                     const Raul::Atom& value) {
+		BROADCAST(set_voice_value, port_path, voice, value);
+	}
+
 
 	// ClientInterface
 
@@ -93,12 +115,10 @@ public:
 	void response_ok(int32_t id) {} ///< N/A
 	void response_error(int32_t id, const std::string& msg) {} ///< N/A
 
-	void transfer_begin();
-	void transfer_end();
-
-	void error(const std::string& msg);
-
-	void activity(const Raul::Path& path);
+	void transfer_begin()                 { BROADCAST(transfer_begin); }
+	void transfer_end()                   { BROADCAST(transfer_end); }
+	void error(const std::string& msg)    { BROADCAST(error, msg); }
+	void activity(const Raul::Path& path) { BROADCAST(activity, path); }
 
 private:
 	typedef std::map<Raul::URI, Shared::ClientInterface*> Clients;
diff --git a/src/engine/HTTPEngineReceiver.cpp b/src/engine/HTTPEngineReceiver.cpp
index d28e1a24..16369bde 100644
--- a/src/engine/HTTPEngineReceiver.cpp
+++ b/src/engine/HTTPEngineReceiver.cpp
@@ -34,6 +34,8 @@
 #include "EventSource.hpp"
 #include "ThreadManager.hpp"
 
+#define LOG(s) s << "[HTTPEngineReceiver] "
+
 using namespace std;
 using namespace Raul;
 
@@ -51,7 +53,7 @@ HTTPEngineReceiver::HTTPEngineReceiver(Engine& engine, uint16_t port)
 
 	soup_server_add_handler(_server, NULL, message_callback, this, NULL);
 
-	info << "Started HTTP server on port " << soup_server_get_port(_server) << endl;
+	LOG(info) << "Started HTTP server on port " << soup_server_get_port(_server) << endl;
 	Thread::set_name("HTTP Receiver");
 
 	if (!engine.world()->parser || !engine.world()->serialiser)
@@ -157,7 +159,7 @@ HTTPEngineReceiver::message_callback(SoupServer* server, SoupMessage* msg, const
 	}
 
 	if (!Path::is_valid(path)) {
-		error << "Bad HTTP path: " << path << endl;
+		LOG(error) << "Bad HTTP path: " << path << endl;
 		soup_message_set_status (msg, SOUP_STATUS_BAD_REQUEST);
 		const string& err = (boost::format("Bad path: %1%") % path).str();
 		soup_message_set_response(msg, "text/plain", SOUP_MEMORY_COPY,
-- 
cgit v1.2.1