Add TDLib message receiver

This commit is contained in:
Sebastian J. Wolf 2020-08-10 20:17:13 +02:00
parent 6d864b3623
commit ef9b234698
5 changed files with 63 additions and 9 deletions

View file

@ -15,6 +15,7 @@ TARGET = harbour-fernschreiber
CONFIG += sailfishapp sailfishapp_i18n CONFIG += sailfishapp sailfishapp_i18n
SOURCES += src/harbour-fernschreiber.cpp \ SOURCES += src/harbour-fernschreiber.cpp \
src/tdlibreceiver.cpp \
src/tdlibwrapper.cpp src/tdlibwrapper.cpp
DISTFILES += qml/harbour-fernschreiber.qml \ DISTFILES += qml/harbour-fernschreiber.qml \
@ -70,5 +71,6 @@ INSTALLS += telegram 86.png 108.png 128.png 172.png 256.png \
fernschreiber.desktop gui images fernschreiber.desktop gui images
HEADERS += \ HEADERS += \
src/tdlibreceiver.h \
src/tdlibsecrets.h \ src/tdlibsecrets.h \
src/tdlibwrapper.h src/tdlibwrapper.h

27
src/tdlibreceiver.cpp Normal file
View file

@ -0,0 +1,27 @@
#include "tdlibreceiver.h"
TDLibReceiver::TDLibReceiver(void *tdLibClient, QObject *parent) : QThread(parent)
{
this->tdLibClient = tdLibClient;
this->isActive = true;
}
void TDLibReceiver::setActive(const bool &active)
{
qDebug() << "[TDLibReceiver] setActive " << active;
this->isActive = active;
}
void TDLibReceiver::receiverLoop()
{
qDebug() << "[TDLibReceiver] Starting receiver loop";
const double WAIT_TIMEOUT = 5.0;
while (this->isActive) {
const char *result = td_json_client_receive(this->tdLibClient, WAIT_TIMEOUT);
if (result) {
qDebug() << "[TDLibReceiver] Raw result: " << result;
// parse the result as JSON object and process it as an incoming update or an answer to a previously sent request
}
}
qDebug() << "[TDLibReceiver] Stopping receiver loop";
}

25
src/tdlibreceiver.h Normal file
View file

@ -0,0 +1,25 @@
#ifndef TDLIBRECEIVER_H
#define TDLIBRECEIVER_H
#include <QDebug>
#include <QThread>
#include <td/telegram/td_json_client.h>
class TDLibReceiver : public QThread
{
Q_OBJECT
void run() Q_DECL_OVERRIDE {
receiverLoop();
}
public:
explicit TDLibReceiver(void *tdLibClient, QObject *parent = nullptr);
void setActive(const bool &active);
private:
void *tdLibClient;
bool isActive;
void receiverLoop();
};
#endif // TDLIBRECEIVER_H

View file

@ -23,18 +23,17 @@ TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
{ {
qDebug() << "[TDLibWrapper] Initializing TD Lib..."; qDebug() << "[TDLibWrapper] Initializing TD Lib...";
this->tdLibClient = td_json_client_create(); this->tdLibClient = td_json_client_create();
//this->testIt(); this->tdLibReceiver = new TDLibReceiver(this->tdLibClient, this);
this->tdLibReceiver->start();
} }
TDLibWrapper::~TDLibWrapper() TDLibWrapper::~TDLibWrapper()
{ {
qDebug() << "[TDLibWrapper] Destroying TD Lib..."; qDebug() << "[TDLibWrapper] Destroying TD Lib...";
this->tdLibReceiver->setActive(false);
while (this->tdLibReceiver->isRunning()) {
QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
}
td_json_client_destroy(this->tdLibClient); td_json_client_destroy(this->tdLibClient);
} }
void TDLibWrapper::testIt()
{
qDebug() << "[TDLibWrapper] Test it!";
td_json_client_send(this->tdLibClient, "BLUBB");
}

View file

@ -1,9 +1,11 @@
#ifndef TDLIBWRAPPER_H #ifndef TDLIBWRAPPER_H
#define TDLIBWRAPPER_H #define TDLIBWRAPPER_H
#include <QCoreApplication>
#include <QObject> #include <QObject>
#include <QDebug> #include <QDebug>
#include <td/telegram/td_json_client.h> #include <td/telegram/td_json_client.h>
#include "tdlibreceiver.h"
class TDLibWrapper : public QObject class TDLibWrapper : public QObject
{ {
@ -12,8 +14,6 @@ public:
explicit TDLibWrapper(QObject *parent = nullptr); explicit TDLibWrapper(QObject *parent = nullptr);
~TDLibWrapper(); ~TDLibWrapper();
Q_INVOKABLE void testIt();
signals: signals:
public slots: public slots:
@ -21,6 +21,7 @@ public slots:
private: private:
void *tdLibClient; void *tdLibClient;
TDLibReceiver *tdLibReceiver;
}; };