From 9cde188fcb8cc7ff30f28ec898d72ce1575496ca Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 9 Feb 2015 21:37:31 +0000 Subject: Fix broadcasting to several clients. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5550 a436a847-0d15-0410-975c-d299462d15a1 --- src/server/Broadcaster.hpp | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) (limited to 'src/server/Broadcaster.hpp') diff --git a/src/server/Broadcaster.hpp b/src/server/Broadcaster.hpp index e33594a4..b610f2a2 100644 --- a/src/server/Broadcaster.hpp +++ b/src/server/Broadcaster.hpp @@ -14,12 +14,11 @@ along with Ingen. If not, see . */ -#ifndef INGEN_ENGINE_CLIENTBROADCASTER_HPP -#define INGEN_ENGINE_CLIENTBROADCASTER_HPP +#ifndef INGEN_ENGINE_BROADCASTER_HPP +#define INGEN_ENGINE_BROADCASTER_HPP #include #include -#include #include #include #include @@ -45,10 +44,10 @@ public: Broadcaster(); ~Broadcaster(); - void register_client(const Raul::URI& uri, SPtr client); - bool unregister_client(const Raul::URI& uri); + void register_client(SPtr client); + bool unregister_client(SPtr client); - void set_broadcast(const Raul::URI& client, bool broadcast); + void set_broadcast(SPtr client, bool broadcast); /** Ignore a client when broadcasting. * @@ -86,16 +85,14 @@ public: Broadcaster& broadcaster; }; - SPtr client(const Raul::URI& uri); - void send_plugins(const BlockFactory::Plugins& plugin_list); void send_plugins_to(Interface*, const BlockFactory::Plugins& plugin_list); #define BROADCAST(msg, ...) \ std::lock_guard lock(_clients_mutex); \ for (const auto& c : _clients) { \ - if (c.second != _ignore_client) { \ - c.second->msg(__VA_ARGS__); \ + if (c != _ignore_client) { \ + c->msg(__VA_ARGS__); \ } \ } \ @@ -160,17 +157,17 @@ public: private: friend class Transfer; - typedef std::map< Raul::URI, SPtr > Clients; + typedef std::set> Clients; - std::mutex _clients_mutex; - Clients _clients; - std::set _broadcastees; - std::atomic _must_broadcast; - unsigned _bundle_depth; - SPtr _ignore_client; + std::mutex _clients_mutex; + Clients _clients; + std::set< SPtr > _broadcastees; + std::atomic _must_broadcast; + unsigned _bundle_depth; + SPtr _ignore_client; }; } // namespace Server } // namespace Ingen -#endif // INGEN_ENGINE_CLIENTBROADCASTER_HPP +#endif // INGEN_ENGINE_BROADCASTER_HPP -- cgit v1.2.1