diff options
author | Katja Marttila <katja.marttila@qt.io> | 2023-03-28 12:31:58 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2023-04-13 15:09:50 +0300 |
commit | f5a704a4694207cbbe6892e4b253a24317389e57 (patch) | |
tree | f660cf6d7048b06757a80345071f997e945ced2f /src | |
parent | dbdf49bb41e4686a6009ae6b0430adb91e246155 (diff) |
Simplify remoteobject class
We can use parameter packs for the functions instead of overloading
functions with different parameter counts.
Change-Id: I58713e20a399c3434f5acbe8ac7eec8915eba49b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/libarchivewrapper_p.cpp | 14 | ||||
-rw-r--r-- | src/libs/installer/qprocesswrapper.cpp | 24 | ||||
-rw-r--r-- | src/libs/installer/qsettingswrapper.cpp | 20 | ||||
-rw-r--r-- | src/libs/installer/remotefileengine.cpp | 3 | ||||
-rw-r--r-- | src/libs/installer/remoteobject.cpp | 7 | ||||
-rw-r--r-- | src/libs/installer/remoteobject.h | 79 |
6 files changed, 48 insertions, 99 deletions
diff --git a/src/libs/installer/libarchivewrapper_p.cpp b/src/libs/installer/libarchivewrapper_p.cpp index e5c1e8598..233ff816e 100644 --- a/src/libs/installer/libarchivewrapper_p.cpp +++ b/src/libs/installer/libarchivewrapper_p.cpp @@ -105,7 +105,7 @@ void LibArchiveWrapperPrivate::setFilename(const QString &filename) { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::AbstractArchiveSetFilename), filename, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::AbstractArchiveSetFilename), filename); m_lock.unlock(); } m_archive.setFilename(filename); @@ -145,7 +145,7 @@ bool LibArchiveWrapperPrivate::extract(const QString &dirPath, const quint64 tot timer.start(); m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::AbstractArchiveExtract), dirPath, total); + callRemoteMethodDefaultReply(QLatin1String(Protocol::AbstractArchiveExtract), dirPath, total); m_lock.unlock(); { QEventLoop loop; @@ -203,7 +203,7 @@ void LibArchiveWrapperPrivate::setCompressionLevel(const AbstractArchive::Compre { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::AbstractArchiveSetCompressionLevel), level, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::AbstractArchiveSetCompressionLevel), level); m_lock.unlock(); return; } @@ -219,7 +219,7 @@ void LibArchiveWrapperPrivate::cancel() { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::AbstractArchiveCancel)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::AbstractArchiveCancel)); m_lock.unlock(); return; } @@ -354,7 +354,7 @@ void LibArchiveWrapperPrivate::addDataBlock(const QByteArray &buffer) { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::AbstractArchiveAddDataBlock), buffer, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::AbstractArchiveAddDataBlock), buffer); m_lock.unlock(); } } @@ -367,7 +367,7 @@ void LibArchiveWrapperPrivate::setClientDataAtEnd() { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::AbstractArchiveSetClientDataAtEnd)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::AbstractArchiveSetClientDataAtEnd)); m_lock.unlock(); } } @@ -379,7 +379,7 @@ void LibArchiveWrapperPrivate::setClientFilePosition(qint64 pos) { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::AbstractArchiveSetFilePosition), pos, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::AbstractArchiveSetFilePosition), pos); m_lock.unlock(); } } diff --git a/src/libs/installer/qprocesswrapper.cpp b/src/libs/installer/qprocesswrapper.cpp index 6f34e36da..d7600adbf 100644 --- a/src/libs/installer/qprocesswrapper.cpp +++ b/src/libs/installer/qprocesswrapper.cpp @@ -191,8 +191,8 @@ void QProcessWrapper::setProcessChannelMode(QProcessWrapper::ProcessChannelMode { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessSetProcessChannelMode), - static_cast<QProcess::ProcessChannelMode>(mode), dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessSetProcessChannelMode), + static_cast<QProcess::ProcessChannelMode>(mode)); m_lock.unlock(); } else { process.setProcessChannelMode(static_cast<QProcess::ProcessChannelMode>(mode)); @@ -216,8 +216,8 @@ void QProcessWrapper::setReadChannel(QProcessWrapper::ProcessChannel chan) { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessSetReadChannel), - static_cast<QProcess::ProcessChannel>(chan), dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessSetReadChannel), + static_cast<QProcess::ProcessChannel>(chan)); m_lock.unlock(); } else { process.setReadChannel(static_cast<QProcess::ProcessChannel>(chan)); @@ -263,7 +263,7 @@ void QProcessWrapper::closeWriteChannel() { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessCloseWriteChannel)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessCloseWriteChannel)); m_lock.unlock(); } else { process.closeWriteChannel(); @@ -296,7 +296,7 @@ void QProcessWrapper::kill() { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessKill)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessKill)); m_lock.unlock(); } else { process.kill(); @@ -343,7 +343,7 @@ void QProcessWrapper::start(const QString ¶m1, const QStringList ¶m2, { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessStart3Arg), param1, param2, param3); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessStart3Arg), param1, param2, param3); m_lock.unlock(); } else { process.start(param1, param2, param3); @@ -354,7 +354,7 @@ void QProcessWrapper::start(const QString ¶m1, QIODevice::OpenMode param2) { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessStart2Arg), param1, param2); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessStart2Arg), param1, param2); m_lock.unlock(); } else { process.start(param1, {}, param2); @@ -376,7 +376,7 @@ void QProcessWrapper::terminate() { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessTerminate)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessTerminate)); m_lock.unlock(); } else { process.terminate(); @@ -443,7 +443,7 @@ void QProcessWrapper::setEnvironment(const QStringList ¶m1) { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessSetEnvironment), param1, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessSetEnvironment), param1); m_lock.unlock(); } else { process.setEnvironment(param1); @@ -455,7 +455,7 @@ void QProcessWrapper::setNativeArguments(const QString ¶m1) { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessSetNativeArguments), param1, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessSetNativeArguments), param1); m_lock.unlock(); } else { process.setNativeArguments(param1); @@ -467,7 +467,7 @@ void QProcessWrapper::setWorkingDirectory(const QString ¶m1) { if (connectToServer()) { m_lock.lockForWrite(); - callRemoteMethod(QLatin1String(Protocol::QProcessSetWorkingDirectory), param1, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QProcessSetWorkingDirectory), param1); m_lock.unlock(); } else { process.setWorkingDirectory(param1); diff --git a/src/libs/installer/qsettingswrapper.cpp b/src/libs/installer/qsettingswrapper.cpp index f2dd53767..29571e729 100644 --- a/src/libs/installer/qsettingswrapper.cpp +++ b/src/libs/installer/qsettingswrapper.cpp @@ -144,7 +144,7 @@ QString QSettingsWrapper::applicationName() const void QSettingsWrapper::beginGroup(const QString ¶m1) { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsBeginGroup), param1, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsBeginGroup), param1); else d->settings.beginGroup(param1); } @@ -159,7 +159,7 @@ int QSettingsWrapper::beginReadArray(const QString ¶m1) void QSettingsWrapper::beginWriteArray(const QString ¶m1, int param2) { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsBeginWriteArray), param1, qint32(param2)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsBeginWriteArray), param1, qint32(param2)); else d->settings.beginWriteArray(param1, param2); } @@ -181,7 +181,7 @@ QStringList QSettingsWrapper::childKeys() const void QSettingsWrapper::clear() { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsClear)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsClear)); else d->settings.clear(); } @@ -195,7 +195,7 @@ bool QSettingsWrapper::contains(const QString ¶m1) const void QSettingsWrapper::endArray() { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsEndArray)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsEndArray)); else d->settings.endArray(); } @@ -203,7 +203,7 @@ void QSettingsWrapper::endArray() void QSettingsWrapper::endGroup() { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsEndGroup)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsEndGroup)); else d->settings.endGroup(); } @@ -252,7 +252,7 @@ QString QSettingsWrapper::organizationName() const void QSettingsWrapper::remove(const QString ¶m1) { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsRemove), param1, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsRemove), param1); else d->settings.remove(param1); } @@ -266,7 +266,7 @@ QSettingsWrapper::Scope QSettingsWrapper::scope() const void QSettingsWrapper::setArrayIndex(int param1) { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsSetArrayIndex), qint32(param1), dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsSetArrayIndex), qint32(param1)); else d->settings.setArrayIndex(param1); } @@ -274,7 +274,7 @@ void QSettingsWrapper::setArrayIndex(int param1) void QSettingsWrapper::setFallbacksEnabled(bool param1) { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsSetFallbacksEnabled), param1, dummy); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsSetFallbacksEnabled), param1); else d->settings.setFallbacksEnabled(param1); } @@ -282,7 +282,7 @@ void QSettingsWrapper::setFallbacksEnabled(bool param1) void QSettingsWrapper::setValue(const QString ¶m1, const QVariant ¶m2) { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsSetValue), param1, param2); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsSetValue), param1, param2); else d->settings.setValue(param1, param2); } @@ -299,7 +299,7 @@ QSettingsWrapper::Status QSettingsWrapper::status() const void QSettingsWrapper::sync() { if (createSocket()) - callRemoteMethod(QLatin1String(Protocol::QSettingsSync)); + callRemoteMethodDefaultReply(QLatin1String(Protocol::QSettingsSync)); else d->settings.sync(); } diff --git a/src/libs/installer/remotefileengine.cpp b/src/libs/installer/remotefileengine.cpp index b600da618..adc5b8561 100644 --- a/src/libs/installer/remotefileengine.cpp +++ b/src/libs/installer/remotefileengine.cpp @@ -418,8 +418,7 @@ bool RemoteFileEngine::seek(qint64 offset) void RemoteFileEngine::setFileName(const QString &fileName) { if (connectToServer()) { - callRemoteMethod(QString::fromLatin1(Protocol::QAbstractFileEngineSetFileName), fileName, - dummy); + callRemoteMethodDefaultReply(QString::fromLatin1(Protocol::QAbstractFileEngineSetFileName), fileName); } m_fileEngine.setFileName(fileName); } diff --git a/src/libs/installer/remoteobject.cpp b/src/libs/installer/remoteobject.cpp index 70ab48af3..b4dd0cbb7 100644 --- a/src/libs/installer/remoteobject.cpp +++ b/src/libs/installer/remoteobject.cpp @@ -46,7 +46,6 @@ namespace QInstaller { RemoteObject::RemoteObject(const QString &wrappedType, QObject *parent) : QObject(parent) - , dummy(nullptr) , m_type(wrappedType) , m_socket(nullptr) { @@ -140,10 +139,4 @@ bool RemoteObject::isConnectedToServer() const return false; } -void RemoteObject::callRemoteMethod(const QString &name) -{ - const QString reply = sendReceivePacket<QString>(name, dummy, dummy, dummy); - Q_ASSERT(reply == QLatin1String(Protocol::DefaultReply)); -} - } // namespace QInstaller diff --git a/src/libs/installer/remoteobject.h b/src/libs/installer/remoteobject.h index c423de943..5e4d14325 100644 --- a/src/libs/installer/remoteobject.h +++ b/src/libs/installer/remoteobject.h @@ -52,93 +52,50 @@ public: virtual ~RemoteObject() = 0; bool isConnectedToServer() const; - void callRemoteMethod(const QString &name); - template<typename T1, typename T2> - void callRemoteMethod(const QString &name, const T1 &arg, const T2 &arg2) + template<typename... Args> + void callRemoteMethodDefaultReply(const QString &name, const Args&... args) { - const QString reply = sendReceivePacket<QString>(name, arg, arg2, dummy); + const QString reply = sendReceivePacket<QString>(name, args...); Q_ASSERT(reply == QLatin1String(Protocol::DefaultReply)); } - template<typename T1, typename T2, typename T3> - void callRemoteMethod(const QString &name, const T1 &arg, const T2 &arg2, const T3 & arg3) + template<typename T, typename... Args> + T callRemoteMethod(const QString &name, const Args&... args) const { - const QString reply = sendReceivePacket<QString>(name, arg, arg2, arg3); - Q_ASSERT(reply == QLatin1String(Protocol::DefaultReply)); - } - - template<typename T> - T callRemoteMethod(const QString &name) const - { - return sendReceivePacket<T>(name, dummy, dummy, dummy); - } - - template<typename T, typename T1> - T callRemoteMethod(const QString &name, const T1 &arg) const - { - return sendReceivePacket<T>(name, arg, dummy, dummy); - } - - template<typename T, typename T1, typename T2> - T callRemoteMethod(const QString &name, const T1 & arg, const T2 &arg2) const - { - return sendReceivePacket<T>(name, arg, arg2, dummy); - } - - template<typename T, typename T1, typename T2, typename T3> - T callRemoteMethod(const QString &name, const T1 &arg, const T2 &arg2, const T3 &arg3) const - { - return sendReceivePacket<T>(name, arg, arg2, arg3); + return sendReceivePacket<T>(name, args...); } protected: bool authorize(); bool connectToServer(const QVariantList &arguments = QVariantList()); - // Use this structure to allow derived classes to manipulate the template - // function signature of the callRemoteMethod templates, since most of the - // generated functions will differ in return type rather given arguments. - struct Dummy {}; Dummy *dummy; - private: - template<typename T> bool isValueType(T) const - { - return true; - } - template<typename T> bool isValueType(T *dummy) const + template<typename T, typename... Args> + T sendReceivePacket(const QString &name, const Args&... args) const { - // Force compiler error while passing anything different then Dummy* to the function. - // It really doesn't make sense to send any pointer over to the server, so bail early. - Q_UNUSED(static_cast<Dummy*> (dummy)) - return false; - } - - template<typename T, typename T1, typename T2, typename T3> - T sendReceivePacket(const QString &name, const T1 &arg, const T2 &arg2, const T3 &arg3) const - { - writeData(name, arg, arg2, arg3); + writeData(name, args...); while (m_socket->bytesToWrite()) m_socket->waitForBytesWritten(); return readData<T>(name); } + template <class T> int writeObject(QDataStream& out, const T& t) const + { + static_assert(!std::is_pointer<T>::value, "Pointer passed to remote server"); + out << t; + return 0; + } - template<typename T1, typename T2, typename T3> - void writeData(const QString &name, const T1 &arg, const T2 &arg2, const T3 &arg3) const + template<typename... Args> + void writeData(const QString &name, const Args&... args) const { QByteArray data; QDataStream out(&data, QIODevice::WriteOnly); - if (isValueType(arg)) - out << arg; - if (isValueType(arg2)) - out << arg2; - if (isValueType(arg3)) - out << arg3; - + (void)std::initializer_list<int>{writeObject(out, args)...}; sendPacket(m_socket, name.toLatin1(), data); m_socket->flush(); } |