#pragma once #include #include #include #include "Swiften/Base/String.h" #include "Swiften/JID/JID.h" #include "Swiften/Network/Connection.h" namespace Swift { class Element; class Stanza; class PayloadParserFactoryCollection; class PayloadSerializerCollection; class StreamStack; class UserRegistry; class XMPPLayer; class ConnectionLayer; class Connection; class ByteArray; class ServerFromClientSession : public boost::enable_shared_from_this { public: ServerFromClientSession( const String& id, boost::shared_ptr connection, PayloadParserFactoryCollection* payloadParserFactories, PayloadSerializerCollection* payloadSerializers, UserRegistry* userRegistry); ~ServerFromClientSession(); void start(); void sendStanza(boost::shared_ptr); const JID& getJID() const { return jid_; } const JID& getDomain() const { return domain_; } boost::signal)> onStanzaReceived; boost::signal onSessionFinished; boost::signal onSessionStarted; boost::signal onDataWritten; boost::signal onDataRead; private: void handleDisconnected(const boost::optional& error); void handleElement(boost::shared_ptr); void handleStreamStart(const String& domain); private: String id_; boost::shared_ptr connection_; PayloadParserFactoryCollection* payloadParserFactories_; PayloadSerializerCollection* payloadSerializers_; UserRegistry* userRegistry_; bool authenticated_; bool initialized_; boost::shared_ptr xmppLayer_; boost::shared_ptr connectionLayer_; StreamStack* streamStack_; JID domain_; String user_; JID jid_; }; }