QXmpp Version:0.3.0
QXmppClient.h
00001 /*
00002  * Copyright (C) 2008-2011 The QXmpp developers
00003  *
00004  * Author:
00005  *  Manjeet Dahiya
00006  *
00007  * Source:
00008  *  http://code.google.com/p/qxmpp
00009  *
00010  * This file is a part of QXmpp library.
00011  *
00012  * This library is free software; you can redistribute it and/or
00013  * modify it under the terms of the GNU Lesser General Public
00014  * License as published by the Free Software Foundation; either
00015  * version 2.1 of the License, or (at your option) any later version.
00016  *
00017  * This library is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00020  * Lesser General Public License for more details.
00021  *
00022  */
00023 
00024 #ifndef QXMPPCLIENT_H
00025 #define QXMPPCLIENT_H
00026 
00027 #include <QObject>
00028 #include <QAbstractSocket>
00029 
00030 #include "QXmppConfiguration.h"
00031 #include "QXmppLogger.h"
00032 #include "QXmppPresence.h"
00033 
00034 class QXmppClientExtension;
00035 class QXmppClientPrivate;
00036 class QXmppPresence;
00037 class QXmppMessage;
00038 class QXmppPacket;
00039 class QXmppIq;
00040 class QXmppStream;
00041 
00042 // managers
00043 class QXmppDiscoveryIq;
00044 class QXmppReconnectionManager;
00045 class QXmppRosterManager;
00046 class QXmppVCardManager;
00047 class QXmppVersionManager;
00048 
00050 
00052 
00079 
00080 class QXmppClient : public QXmppLoggable
00081 {
00082     Q_OBJECT
00083     Q_ENUMS(Error State)
00084     Q_PROPERTY(QXmppLogger* logger READ logger WRITE setLogger NOTIFY loggerChanged)
00085     Q_PROPERTY(State state READ state NOTIFY stateChanged)
00086 
00087 public:
00090     enum Error
00091     {
00092         NoError,            
00093         SocketError,        
00094         KeepAliveError,     
00095         XmppStreamError,    
00096     };
00097 
00099     enum State
00100     {
00101         DisconnectedState,  
00102         ConnectingState,    
00103         ConnectedState,     
00104     };
00105 
00106     QXmppClient(QObject *parent = 0);
00107     ~QXmppClient();
00108 
00109     bool addExtension(QXmppClientExtension* extension);
00110     bool removeExtension(QXmppClientExtension* extension);
00111 
00112     QList<QXmppClientExtension*> extensions();
00113 
00126     template<typename T>
00127     T* findExtension()
00128     {
00129         QList<QXmppClientExtension*> list = extensions();
00130         for (int i = 0; i < list.size(); ++i)
00131         {
00132             T* extension = qobject_cast<T*>(list.at(i));
00133             if(extension)
00134                 return extension;
00135         }
00136         return 0;
00137     }
00138 
00139     void connectToServer(const QXmppConfiguration&,
00140                          const QXmppPresence& initialPresence = 
00141                          QXmppPresence());
00142     void connectToServer(const QString &jid,
00143                          const QString &password);
00144     void disconnectFromServer();
00145     bool isConnected() const;
00146 
00147     QXmppPresence clientPresence() const;
00148     void setClientPresence(const QXmppPresence &presence);
00149     void addProperCapability(QXmppPresence &presence);
00150 
00151     QXmppConfiguration &configuration();
00152     QXmppLogger *logger() const;
00153     void setLogger(QXmppLogger *logger);
00154 
00155     QAbstractSocket::SocketError socketError();
00156     State state() const;
00157     QXmppStanza::Error::Condition xmppStreamError();
00158 
00159     QXmppRosterManager& rosterManager();
00160     QXmppVCardManager& vCardManager();
00161     QXmppVersionManager& versionManager();
00162 
00163     QXmppReconnectionManager* reconnectionManager();
00164     bool setReconnectionManager(QXmppReconnectionManager*);
00165 
00166 signals:
00167 
00187     void connected();
00188 
00191     void disconnected();
00192 
00198     void error(QXmppClient::Error);
00199 
00201     void loggerChanged(QXmppLogger *logger);
00202 
00207     void messageReceived(const QXmppMessage &message);
00208 
00213     void presenceReceived(const QXmppPresence &presence);
00214 
00219     void iqReceived(const QXmppIq &iq);
00220 
00222     void stateChanged(State state);
00223 
00225     // Deprecated in release 0.3.0
00226     // Use QXmppDiscoveryManager::informationReceived(const QXmppDiscoveryIq&)
00227     // Notifies that an XMPP service discovery iq stanza is received.
00228     void discoveryIqReceived(const QXmppDiscoveryIq&);
00230 
00231 public slots:
00232     bool sendPacket(const QXmppPacket&);
00233     void sendMessage(const QString& bareJid, const QString& message);
00234 
00235 private slots:
00236     void _q_elementReceived(const QDomElement &element, bool &handled);
00237     void _q_socketStateChanged(QAbstractSocket::SocketState state);
00238     void _q_streamConnected();
00239     void _q_streamDisconnected();
00240 
00241 private:
00242     QXmppClientPrivate * const d;
00243 };
00244 
00245 #endif // QXMPPCLIENT_H
 All Classes Functions Enumerations Enumerator Properties