From 36df8345e41bde95de170cd105d5d2ba1459a1b3 Mon Sep 17 00:00:00 2001 From: Dennis Beier <nanovim@gmail.com> Date: Sun, 16 Sep 2018 12:41:19 +0200 Subject: [PATCH] implemented subscriper in meteorDDP class --- api/messagelistener.h | 16 ++++++++++++++++ api/meteorddp.cpp | 10 ++++++++++ api/meteorddp.h | 5 ++++- engine.pro | 3 ++- rocketchatserver.cpp | 10 ++++++++-- rocketchatserver.h | 5 ++++- services/messageservice.cpp | 1 - 7 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 api/messagelistener.h diff --git a/api/messagelistener.h b/api/messagelistener.h new file mode 100644 index 0000000..7e2fb20 --- /dev/null +++ b/api/messagelistener.h @@ -0,0 +1,16 @@ +#ifndef MESSAGELISTENER_H +#define MESSAGELISTENER_H + +#include <QJsonObject> +#include <QMutexLocker> +#include <QObject> + + +class MessageListener: public QObject{ +Q_OBJECT +public: + virtual bool handlesMessage(QJsonObject object) = 0; +}; + +#endif // MESSAGELISTENER_H + diff --git a/api/meteorddp.cpp b/api/meteorddp.cpp index 56c8f7e..4505a53 100755 --- a/api/meteorddp.cpp +++ b/api/meteorddp.cpp @@ -58,6 +58,16 @@ void MeteorDDP::init( const QString &pUri ) mLastPing = currentTime; } +void MeteorDDP::registerMessageHandler(MessageListener &listener) +{ + connect(this, &MeteorDDP::messageReceived , &listener, &MessageListener::handlesMessage); +} + +void MeteorDDP::registerMessageHandler(MessageListener *listener) +{ + connect(this, &MeteorDDP::messageReceived , listener, &MessageListener::handlesMessage); +} + void MeteorDDP::connectWithServer() { QJsonObject msgObj; diff --git a/api/meteorddp.h b/api/meteorddp.h index c584a7b..5d22aae 100755 --- a/api/meteorddp.h +++ b/api/meteorddp.h @@ -29,6 +29,7 @@ #include <QtWebSockets/QtWebSockets> #include "websocket/websocket.h" #include "ddpRequests/ddprequest.h" +#include "messagelistener.h" /** @@ -59,7 +60,8 @@ class MeteorDDP : public QObject void setUserId( const QString &pUserId ); void init( const QString &pServer ); - + void registerMessageHandler(MessageListener &); + void registerMessageHandler(MessageListener *); private: QJsonParseError *mError; @@ -88,6 +90,7 @@ class MeteorDDP : public QObject uint mMaxTimeout = 0; QSet<QString> mReceivedEvents; + signals: void websocketConnected(); void ddpConnected(); diff --git a/engine.pro b/engine.pro index b9dddf1..2e76b8e 100644 --- a/engine.pro +++ b/engine.pro @@ -202,7 +202,8 @@ HEADERS += \ ddpRequests/rocketchatgetroombyid.h \ ddpRequests/rocketchatjoinroomrequest.h \ ddpRequests/rocketchatgetroomidbynameorid.h \ - ddpRequests/rocketchatspotlightrequest.h + ddpRequests/rocketchatspotlightrequest.h \ + api/messagelistener.h linux{ diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp index 2372d8a..5dfb32f 100755 --- a/rocketchatserver.cpp +++ b/rocketchatserver.cpp @@ -70,7 +70,7 @@ void RocketChatServerData::init() QMetaObject::invokeMethod( mRestApi, "init" ); - connect( mDdpApi, &MeteorDDP::messageReceived, this, &RocketChatServerData::onDDPMessageReceived, Qt::UniqueConnection ); + mDdpApi->registerMessageHandler(this); connect( mDdpApi, &MeteorDDP::ddpConnected, this, &RocketChatServerData::onDDPConnected, Qt::UniqueConnection ); connect( mDdpApi, &MeteorDDP::ddpDisconnected, this, &RocketChatServerData::onDDPDisonnected, Qt::UniqueConnection ); @@ -95,7 +95,6 @@ void RocketChatServerData::init() mChannelService = new RocketChatChannelService( this, mMessageService ); mChannelService->setDdp( mDdpApi ); mChannelService->setChannels( mChannels ); - connect( mChannelService, &RocketChatChannelService::channelsLoaded, this, &RocketChatServerData::onChannelsLoaded, Qt::UniqueConnection ); connect( mChannelService, &RocketChatChannelService::usersLoaded, this, &RocketChatServerData::onUsersLoaded, Qt::UniqueConnection ); connect( mChannelService, &RocketChatChannelService::directChannelReady, this, &RocketChatServerData::switchChannelByName, Qt::UniqueConnection ); @@ -509,6 +508,13 @@ void RocketChatServerData::onUnreadCountChanged() emit unreadCountChanged( QStringLiteral( "default" ), number ); } +bool RocketChatServerData::handlesMessage(QJsonObject message) +{ + qDebug() << "RocketChatServerData message handler"; + onDDPMessageReceived(message); + return true; +} + EmojiRepo *RocketChatServerData::getEmojiRepo() const { return mEmojiRepo; diff --git a/rocketchatserver.h b/rocketchatserver.h index e7a6359..b835cc4 100755 --- a/rocketchatserver.h +++ b/rocketchatserver.h @@ -108,7 +108,7 @@ enum class ConnectionState { ONLINE }; -class RocketChatServerData : public QObject +class RocketChatServerData : public MessageListener { Q_OBJECT @@ -349,6 +349,9 @@ class RocketChatServerData : public QObject void loggingIn(); void historyReady(); + // MessageListener interface +public: + bool handlesMessage(QJsonObject object); }; #endif // ROCKETCHATSERVER_H diff --git a/services/messageservice.cpp b/services/messageservice.cpp index d26b06f..510e360 100644 --- a/services/messageservice.cpp +++ b/services/messageservice.cpp @@ -170,7 +170,6 @@ QSharedPointer<RocketChatMessage> MessageService::parseMessage( const QJsonObjec if ( Q_LIKELY( timestampObject.contains( QStringLiteral( "$date" ) ) ) ) { timestamp = timestampObject[QStringLiteral( "$date" )].toDouble(); - } QDateTime date = QDateTime::fromMSecsSinceEpoch( timestamp ); -- GitLab