#ifndef SWIFTEN_Client_H #define SWIFTEN_Client_H #include #include #include "Swiften/Client/Session.h" #include "Swiften/Client/ClientError.h" #include "Swiften/Elements/Presence.h" #include "Swiften/Elements/Message.h" #include "Swiften/JID/JID.h" #include "Swiften/Base/String.h" #include "Swiften/Base/IDGenerator.h" #include "Swiften/Client/StanzaChannel.h" #include "Swiften/Queries/IQRouter.h" #include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" #include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h" #include "Swiften/Network/BoostIOServiceThread.h" namespace Swift { class TLSLayerFactory; class ConnectionFactory; class Session; class Client : public StanzaChannel, public IQRouter { public: Client(const JID& jid, const String& password); ~Client(); void setCertificate(const String& certificate); void connect(); void disconnect(); virtual void sendIQ(boost::shared_ptr); virtual void sendMessage(boost::shared_ptr); virtual void sendPresence(boost::shared_ptr); public: boost::signal onError; boost::signal onConnected; boost::signal onDataRead; boost::signal onDataWritten; private: void send(boost::shared_ptr); virtual String getNewIQID(); void handleElement(boost::shared_ptr); void handleSessionError(Session::SessionError error); void handleNeedCredentials(); void handleDataRead(const ByteArray&); void handleDataWritten(const ByteArray&); private: BoostIOServiceThread boostIOServiceThread_; JID jid_; String password_; IDGenerator idGenerator_; ConnectionFactory* connectionFactory_; TLSLayerFactory* tlsLayerFactory_; FullPayloadParserFactoryCollection payloadParserFactories_; FullPayloadSerializerCollection payloadSerializers_; Session* session_; String certificate_; }; } #endif