File indexing completed on 2025-02-16 04:50:06
0001 /* 0002 SPDX-FileCopyrightText: 2017-2019 Krzysztof Nowicki <krissn@op.pl> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "fakeewsserverthread.h" 0008 0009 #include <QEventLoop> 0010 0011 #include "fakeewsserver_debug.h" 0012 0013 FakeEwsServerThread::FakeEwsServerThread(QObject *parent) 0014 : QThread(parent) 0015 , mPortNumber(0) 0016 , mIsRunning(0) 0017 { 0018 } 0019 0020 FakeEwsServerThread::~FakeEwsServerThread() = default; 0021 0022 void FakeEwsServerThread::run() 0023 { 0024 qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Starting fake server thread"); 0025 mMutex.lock(); 0026 mServer.reset(new FakeEwsServer(nullptr)); 0027 bool ok = mServer->start(); 0028 mMutex.unlock(); 0029 0030 if (ok) { 0031 qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread started."); 0032 mPortNumber = mServer->portNumber(); 0033 Q_EMIT serverStarted(ok); 0034 mIsRunning = 1; 0035 exec(); 0036 qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread terminating."); 0037 } else { 0038 Q_EMIT serverStarted(ok); 0039 qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread start failed."); 0040 } 0041 0042 mMutex.lock(); 0043 mServer.reset(); 0044 mMutex.unlock(); 0045 } 0046 0047 void FakeEwsServerThread::setDialog(const FakeEwsServer::DialogEntry::List &dialog) 0048 { 0049 QMutexLocker lock(&mMutex); 0050 0051 if (mServer) { 0052 mServer->setDialog(dialog); 0053 } 0054 } 0055 0056 void FakeEwsServerThread::setDefaultReplyCallback(const FakeEwsServer::DialogEntry::ReplyCallback &defaultReplyCallback) 0057 { 0058 QMutexLocker lock(&mMutex); 0059 0060 if (mServer) { 0061 mServer->setDefaultReplyCallback(defaultReplyCallback); 0062 } 0063 } 0064 0065 void FakeEwsServerThread::setOverrideReplyCallback(const FakeEwsServer::DialogEntry::ReplyCallback &overrideReplyCallback) 0066 { 0067 QMutexLocker lock(&mMutex); 0068 0069 if (mServer) { 0070 mServer->setOverrideReplyCallback(overrideReplyCallback); 0071 } 0072 } 0073 0074 void FakeEwsServerThread::queueEventsXml(const QStringList &events) 0075 { 0076 QMutexLocker lock(&mMutex); 0077 0078 if (mServer) { 0079 metaObject()->invokeMethod(this, "doQueueEventsXml", Q_ARG(QStringList, events)); 0080 } 0081 } 0082 0083 void FakeEwsServerThread::doQueueEventsXml(const QStringList &events) 0084 { 0085 mServer->queueEventsXml(events); 0086 } 0087 0088 bool FakeEwsServerThread::waitServerStarted() const 0089 { 0090 QEventLoop loop; 0091 { 0092 QMutexLocker lock(&mMutex); 0093 if (isFinished()) { 0094 return false; 0095 } 0096 if (mIsRunning) { 0097 return true; 0098 } 0099 connect(this, &FakeEwsServerThread::serverStarted, this, [&loop](bool ok) { 0100 loop.exit(ok ? 1 : 0); 0101 }); 0102 } 0103 return loop.exec(); 0104 } 0105 0106 #include "moc_fakeewsserverthread.cpp"