diff options
Diffstat (limited to 'src/Net/Signals/SignalBase.h')
-rw-r--r-- | src/Net/Signals/SignalBase.h | 43 |
1 files changed, 8 insertions, 35 deletions
diff --git a/src/Net/Signals/SignalBase.h b/src/Net/Signals/SignalBase.h index 9e2de62..ea1b1e9 100644 --- a/src/Net/Signals/SignalBase.h +++ b/src/Net/Signals/SignalBase.h @@ -23,54 +23,27 @@ #include "Connection.h" #include <set> -#include <boost/signals.hpp> -#include <boost/thread/locks.hpp> #include <boost/thread/mutex.hpp> namespace Mad { namespace Net { namespace Signals { -template <typename SignalType, typename FunctionType> class SignalBase : private boost::noncopyable { - public: - typedef boost::slot<FunctionType> slot_type; + private: + friend class Connection; - protected: - typedef SignalType signal_type; + unsigned long connectionId; - std::set<boost::signals::connection> connections; + protected: boost::mutex mutex; - signal_type signal; - - SignalBase() {} - ~SignalBase() { - // Wait for other threads - boost::lock_guard<boost::mutex> lock(mutex); + Connection getNewConnection() { + return Connection(this, connectionId++); } - public: - Connection connect(const slot_type &slot) { - boost::lock_guard<boost::mutex> lock(mutex); - - boost::signals::connection con(signal.connect(slot)); - - connections.insert(con); - return con; - } - - void disconnect(const Connection &connection) { - boost::lock_guard<boost::mutex> lock(mutex); - - std::set<boost::signals::connection>::iterator it = connections.find(connection.connection); - - if(it == connections.end()) - return; - - it->disconnect(); - connections.erase(it); - } + SignalBase() : connectionId(0) {} + virtual ~SignalBase() {} }; } |