/** * @class wosh::GTalkBot * @brief Service providing GTalkBot features * * http://code.google.com/apis/talk/libjingle * * * INCLUDEPATH += /usr/include LIBS += -L/usr/lib LIBS += -lgloox * * * * * **************************************************************************** * @version $Id: GTalkBot.h 14 2009-03-02 20:29:02Z alex $ * @author Alessandro Polo ****************************************************************************/ /* Copyright (c) 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_GTalkBot_H__ #define __WOSH_GTalkBot_H__ #include #include #include #include #include #include "IGTalkBotListener.h" #include #include #include #include #include namespace gloox { class Client; }; using namespace std; namespace wosh { namespace services { class GTalkBot : public ThreadWorker, public gloox::ConnectionListener, public gloox::LogHandler, public gloox::SubscriptionHandler, public gloox::MessageHandler, public gloox::PresenceHandler { public: GTalkBot(); virtual ~GTalkBot(); virtual void quitThread(); bool sendMessage( const std::string& user, const std::string& message ); /** @name Setup * @{ ******************************************************************************/ public: //@} /** @name Setters * @{ ******************************************************************************/ public: bool setServer( const std::string& address, int port ); bool setServerAddress( const std::string& address ); bool setServerPort( int port ); bool setAccount( const std::string& name, const std::string& pwd ); bool setAccountUserName( const std::string& name ); bool setAccountUserPassword( const std::string& pwd ); bool setAutoPresence( bool value ); bool setPriority( int value ); void setGTalkBotListener( IGTalkBotListener* listener ); //@} /** @name Getters * @{ ******************************************************************************/ public: inline const std::string& getServerAddress() const { return this->xmppServerAddress; } inline int getServerPort() const { return this->xmppServerPort; } inline const std::string& getAccountName() const { return this->xmppAccountName; } bool getAutoPresence() const { return this->xmppAutoPresence; } int getPriority() const { return this->xmppPriority; } 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 * @see running * @see */ virtual void runThread(); //@} protected: std::string xmppServerAddress; int xmppServerPort; std::string xmppAccountName; std::string xmppAccountPwd; int xmppPriority; bool xmppAutoPresence; IGTalkBotListener* gtalkListener; ///< callbacks for stats (such as GTalkBotBundle*) gloox::Client* xmppJclient; }; // class def }; // namespace services }; // namespace wosh #endif //__WOSH_GTalkBot_H__