diff options
Diffstat (limited to 'Swiften/StreamStack/StreamStack.h')
-rw-r--r-- | Swiften/StreamStack/StreamStack.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/Swiften/StreamStack/StreamStack.h b/Swiften/StreamStack/StreamStack.h new file mode 100644 index 0000000..87c522d --- /dev/null +++ b/Swiften/StreamStack/StreamStack.h @@ -0,0 +1,44 @@ +#pragma once + +#include <boost/shared_ptr.hpp> +#include <boost/signal.hpp> +#include <vector> + +#include "Swiften/Elements/Stanza.h" +#include "Swiften/Base/foreach.h" + +namespace Swift { + class XMPPLayer; + class LowLayer; + class StreamLayer; + + class StreamStack { + public: + StreamStack(boost::shared_ptr<XMPPLayer> xmppLayer, boost::shared_ptr<LowLayer> physicalLayer); + ~StreamStack(); + + void addLayer(boost::shared_ptr<StreamLayer>); + + boost::shared_ptr<XMPPLayer> getXMPPLayer() const { + return xmppLayer_; + } + + template<typename T> boost::shared_ptr<T> getLayer() { + foreach(const boost::shared_ptr<StreamLayer>& streamLayer, layers_) { + boost::shared_ptr<T> layer = boost::dynamic_pointer_cast<T>(streamLayer); + if (layer) { + return layer; + } + } + return boost::shared_ptr<T>(); + } + + private: + boost::shared_ptr<XMPPLayer> xmppLayer_; + boost::shared_ptr<LowLayer> physicalLayer_; + std::vector< boost::shared_ptr<StreamLayer> > layers_; + boost::bsignals::connection xmppReadSlotConnection_; + boost::bsignals::connection xmppWriteSignalConnection_; + std::vector< boost::bsignals::connection > writeSignalConnections_; + }; +} |