/* * Copyright (c) 2015-2017 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include namespace Swift { template class SWIFTEN_API S5BTransportSession : public TransportSession { public: S5BTransportSession( std::shared_ptr session, std::shared_ptr readStream) : session(session), readStream(readStream) { initialize(); } S5BTransportSession( std::shared_ptr session, std::shared_ptr writeStream) : session(session), writeStream(writeStream) { initialize(); } virtual ~S5BTransportSession() override { } virtual void start() override { if (readStream) { session->startSending(readStream); } else { session->startReceiving(writeStream); } } virtual void stop() override { session->stop(); } private: void initialize() { finishedConnection = session->onFinished.connect(boost::bind(boost::ref(onFinished), _1)); bytesSentConnection = session->onBytesSent.connect(boost::bind(boost::ref(onBytesSent), _1)); } private: std::shared_ptr session; std::shared_ptr readStream; std::shared_ptr writeStream; boost::signals2::scoped_connection finishedConnection; boost::signals2::scoped_connection bytesSentConnection; }; }