summaryrefslogtreecommitdiffstats
path: root/src/Net/Signals/SignalBase.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Net/Signals/SignalBase.h')
-rw-r--r--src/Net/Signals/SignalBase.h43
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() {}
};
}