/** * @class GTalkBotImpl * @brief Service providing GTalkBot features * * @note * Required OS: \c Linux * Required Library: \c QT, \c libgloox * * QMake/g++ configuration: * @code * INCLUDEPATH += /usr/include * LIBS += -L/usr/lib * LIBS += -lgloox * @endcode * * On Debian-based system, execute as root: * @code * $ apt-get install libgloox-dev * @endcode * * * @see http://code.google.com/apis/talk/libjingle * **************************************************************************** * @version $Id: GTalkBotImpl.h 506 2009-09-15 00:17:20Z alex $ * @author Alessandro Polo ****************************************************************************/ /* Copyright (c) 2007-2009, WOSH - Wide Open Smart Home * by Alessandro Polo - OpenSmartHome.com * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the OpenSmartHome.com WOSH nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY Alessandro Polo ''AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL Alessandro Polo BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ****************************************************************************/ #ifndef __WOSH_Implementations_GTalkBotImpl_H__ #define __WOSH_Implementations_GTalkBotImpl_H__ #include #include #include #include "IGTalkBotListener.h" #include #include #include #include #include namespace gloox { class Client; }; using namespace std; using namespace wosh; class GTalkBotImpl : public wosh::ThreadWorker, public gloox::ConnectionListener, public gloox::LogHandler, public gloox::SubscriptionHandler, public gloox::MessageHandler, public gloox::PresenceHandler { public: /** * @brief Default constructor. Init vars. */ GTalkBotImpl(); /** * @brief Deconstructor. If thread is stll running, it will be stopped. */ virtual ~GTalkBotImpl(); public: /** * @brief Send a text message to given account name [example: asd123@gmail.com] * @param user [in] recipent of the message * @param message [in] message to be sent */ bool sendMessage( const std::string& user, const std::string& message ); //@} /** @name Setters * @{ ******************************************************************************/ public: /** * @brief Set server address and port. Provided for convenience * @param address [in] address of the server * @param port [in] port of the server * @return false when internal thread is running, true else */ bool setServer( const std::string& address, int port ); /** * @brief Set server address and port. Provided for convenience * @param address [in] address of the server (IP:PORT) * @return false when internal thread is running, true else */ bool setServerAddress( const std::string& address ); /** * @brief Set server port * @param port [in] port of the server * @return false when internal thread is running, true else */ bool setServerPort( int port ); /** * @brief Set server account name and password. Provided for convenience * @param username [in] username used to log on the server * @param password [in] username used to log on the server * @return false when internal thread is running, true else */ bool setAccount( const std::string& username, const std::string& password ); /** * @brief Set account username * @param username [in] username used to log on the server * @return false when internal thread is running, true else */ bool setAccountUserName( const std::string& username ); /** * @brief Set account password * @param password [in] username used to log on the server * @return false when internal thread is running, true else */ bool setAccountUserPassword( const std::string& password ); /** * @brief Set auto-presence of the user (account) * @param value [in] true to set auto-presence * @return false when internal thread is running, true else */ bool setAutoPresence( bool value ); /** * @brief Set priority of the account (login) * @param value [in] true to set auto-presence * @return false when internal thread is running, true else */ bool setPriority( int value ); /** * @brief Set the IGTalkBotListener interface for callbacks. * @param listener [in] pointer to object which implements callback-functions * @note Call this method only once, after creation, it's not reetrant! */ void setGTalkBotListener( IGTalkBotListener* listener ); //@} /** @name Getters * @{ ******************************************************************************/ public: /** * @brief Get server address * @return address as string */ inline const std::string& getServerAddress() const { return this->xmppServerAddress; } /** * @brief Get server port * @return server port */ inline int getServerPort() const { return this->xmppServerPort; } /** * @brief Get account username * @return account username */ inline const std::string& getAccountName() const { return this->xmppAccountName; } /** * @brief Get AutoPresence * @return AutoPresence */ bool getAutoPresence() const { return this->xmppAutoPresence; } /** * @brief Get priority * @return priority */ int getPriority() const { return this->xmppPriority; } /** * @brief Get getGTalkBotListener interface class for callbacks. * @return pointer to object which implements callback-functions */ inline IGTalkBotListener* getGTalkBotListener() { return this->gtalkListener; } //@} /** @name gloox::LogHandler Interface * @{ ******************************************************************************/ public: virtual void handleLog( gloox::LogLevel level, gloox::LogArea area, const std::string& message ); //@} /** @name gloox::ConnectionListener Interface * @{ ******************************************************************************/ public: virtual void onConnect(); virtual void onDisconnect( gloox::ConnectionError e ); virtual bool onTLSConnect( const gloox::CertInfo& info ); //@} /** @name gloox::MessageHandler Interface * @{ ******************************************************************************/ public: virtual void handleMessage( gloox::Stanza* stanza ) { handleMessage(stanza, NULL); } virtual void handleMessage( gloox::Stanza* stanza, gloox::MessageSession* ); //@} /** @name gloox::PresenceHandler Interface * @{ ******************************************************************************/ public: virtual void handlePresence( gloox::Stanza* stanza ); //@} /** @name gloox::SubscriptionHandler Interface * @{ ******************************************************************************/ public: virtual void handleSubscription( gloox::Stanza* stanza ); //@} /** @name Internal methods * @{ ******************************************************************************/ protected: /** * @brief Listen/Write loop, managed by gloox::Client * @see running * @see xmppJclient */ virtual void runThread(); //@} protected: std::string xmppServerAddress; ///< address of the server int xmppServerPort; ///< port of the server std::string xmppAccountName; ///< Account username of the bot, you should create an account for it std::string xmppAccountPwd; ///< Account password of the bot, you should create an account for it int xmppPriority; ///< account priority bool xmppAutoPresence; ///< account auto-presence IGTalkBotListener* gtalkListener; ///< callbacks for stats (such as GTalkBotBundle*) gloox::Client* xmppJclient; ///< the real implementation from libgloox }; // class def #endif //__WOSH_Implementations_GTalkBotImpl_H__