diff --git a/api/messagelistener.h b/api/messagelistener.h new file mode 100644 index 0000000000000000000000000000000000000000..7e2fb202fe895cd2d97f4516ee1a381c1d7df01f --- /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 56c8f7ecdae1e5f0c50e22750cacd0dca31e75f9..4505a53ec2ec70ff1fda287a752cd20dc365fa2e 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 c584a7b4ab44aba225bc8864b037885e427fae0e..5d22aaeaf28a1d3bda6d8a32c1fdd54bbf23964b 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 b9dddf132d6835c4142037aa4a2a7c2f959b1e26..2e76b8ecb90bcae57badcc66613e12639b7cbdb9 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 2372d8a6f6f86659d91b5769544995cef37fe9a5..5dfb32fc012b6566980d62478e6861a5d3edb66d 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 e7a6359f56d0070b39b4b9294690ceb6440d44d9..b835cc43c46552fc8e4ba3cba483ca3c1b4ad976 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 d26b06f07cd04cae55370907eba46c30540f16c9..510e3606af9bdaa0283f4fe2c8b3ce8b925bbae2 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 );