1 /* 2 SPDX-FileCopyrightText: 2017-2019 Krzysztof Nowicki <krissn@op.pl> 3 4 SPDX-License-Identifier: LGPL-2.0-or-later 5 */ 6 7 #include "fakeewsserverthread.h" 8 9 #include <QEventLoop> 10 11 #include "fakeewsserver_debug.h" 12 FakeEwsServerThread(QObject * parent)13FakeEwsServerThread::FakeEwsServerThread(QObject *parent) 14 : QThread(parent) 15 , mPortNumber(0) 16 , mIsRunning(0) 17 { 18 } 19 ~FakeEwsServerThread()20FakeEwsServerThread::~FakeEwsServerThread() 21 { 22 } 23 run()24void FakeEwsServerThread::run() 25 { 26 qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Starting fake server thread"); 27 mMutex.lock(); 28 mServer.reset(new FakeEwsServer(nullptr)); 29 bool ok = mServer->start(); 30 mMutex.unlock(); 31 32 if (ok) { 33 qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread started."); 34 mPortNumber = mServer->portNumber(); 35 Q_EMIT serverStarted(ok); 36 mIsRunning = 1; 37 exec(); 38 qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread terminating."); 39 } else { 40 Q_EMIT serverStarted(ok); 41 qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread start failed."); 42 } 43 44 mMutex.lock(); 45 mServer.reset(); 46 mMutex.unlock(); 47 } 48 setDialog(const FakeEwsServer::DialogEntry::List & dialog)49void FakeEwsServerThread::setDialog(const FakeEwsServer::DialogEntry::List &dialog) 50 { 51 QMutexLocker lock(&mMutex); 52 53 if (mServer) { 54 mServer->setDialog(dialog); 55 } 56 } 57 setDefaultReplyCallback(const FakeEwsServer::DialogEntry::ReplyCallback & defaultReplyCallback)58void FakeEwsServerThread::setDefaultReplyCallback(const FakeEwsServer::DialogEntry::ReplyCallback &defaultReplyCallback) 59 { 60 QMutexLocker lock(&mMutex); 61 62 if (mServer) { 63 mServer->setDefaultReplyCallback(defaultReplyCallback); 64 } 65 } 66 setOverrideReplyCallback(const FakeEwsServer::DialogEntry::ReplyCallback & overrideReplyCallback)67void FakeEwsServerThread::setOverrideReplyCallback(const FakeEwsServer::DialogEntry::ReplyCallback &overrideReplyCallback) 68 { 69 QMutexLocker lock(&mMutex); 70 71 if (mServer) { 72 mServer->setOverrideReplyCallback(overrideReplyCallback); 73 } 74 } 75 queueEventsXml(const QStringList & events)76void FakeEwsServerThread::queueEventsXml(const QStringList &events) 77 { 78 QMutexLocker lock(&mMutex); 79 80 if (mServer) { 81 metaObject()->invokeMethod(this, "doQueueEventsXml", Q_ARG(QStringList, events)); 82 } 83 } 84 doQueueEventsXml(const QStringList & events)85void FakeEwsServerThread::doQueueEventsXml(const QStringList &events) 86 { 87 mServer->queueEventsXml(events); 88 } 89 waitServerStarted() const90bool FakeEwsServerThread::waitServerStarted() const 91 { 92 QEventLoop loop; 93 { 94 QMutexLocker lock(&mMutex); 95 if (isFinished()) { 96 return false; 97 } 98 if (mIsRunning) { 99 return true; 100 } 101 connect(this, &FakeEwsServerThread::serverStarted, this, [&loop](bool ok) { 102 loop.exit(ok ? 1 : 0); 103 }); 104 } 105 return loop.exec(); 106 } 107