我正在制作一个 xmpp 客户端,但我对扩展有很多疑问..
我确实需要一个用户的旧消息列表,所以..我正在使用 QXmppArchiveManager 类。所以我做了一个这样的课程:
...
class QXmppArchiveManager;
class MessageController : public QXmppClient
{
...
private:
QNetworkAccessManager *nam_;
QXmppClient *xmppClient_;
QXmppArchiveManager *archiveMng_;
QDateTime m_startDate;
QDateTime m_endDate;
protected slots:
virtual void onConnected();
virtual void onMessageReceived(const QXmppMessage &);
virtual void archiveListReceived(const QList<QXmppArchiveChat> &chats, const QXmppResultSetReply &rsmReply);
}
并实现
...
void MessageController::onConnected() //before client connects listener...
{
QXmppResultSetQuery rsmQuery;
rsmQuery.setMax(0);
m_startDate = QDateTime::currentDateTime().addDays(-201);
m_endDate = QDateTime::currentDateTime();
archiveMng_->listCollections("", m_startDate, m_endDate, rsmQuery);
}
void MessageController::connect()
{
xmppClient_ = new QXmppClient();
QObject::connect( xmppClient_, SIGNAL( connected() ), this, SLOT( onConnected() ) );
QObject::connect( xmppClient_, SIGNAL( messageReceived( QXmppMessage ) ), this, SLOT( onMessageReceived( QXmppMessage ) ) );
archiveMng_ = new QXmppArchiveManager;
xmppClient_->addExtension(archiveMng_);
QObject::connect(archiveMng_, SIGNAL(archiveChatReceived(QXmppArchiveChat, QXmppResultSetReply)),
SLOT(archiveChatReceived(QXmppArchiveChat, QXmppResultSetReply)));
QObject::connect(archiveMng_, SIGNAL(archiveListReceived(QList<QXmppArchiveChat>, QXmppResultSetReply)),
SLOT(archiveListReceived(QList<QXmppArchiveChat>, QXmppResultSetReply)));
xmppClient_->logger()->setLoggingType( QXmppLogger::StdoutLogging );
QXmppConfiguration config;
config.setDomain("(censored)");
config.setHost("(censored)");
config.setPort(5222);
config.setUser((censored));
config.setPassword((censored));
config.setResource("Android-Client");
xmppClient_->connectToServer( config );
}
void MessageController::archiveChatReceived(const QXmppArchiveChat &chat, const QXmppResultSetReply &rsmReply)
{
qDebug() << "archiveChatReceived";
}
void MessageController::archiveListReceived(const QList<QXmppArchiveChat> &chats, const QXmppResultSetReply &rsmReply)
{
qDebug() << "archiveListReceived";
}
问题是......这段代码没有调用这个监听器,在这种情况下不是调用“archiveListReceived”。
我该如何解决?
谢谢