Qt ro refact
This commit is contained in:
parent
b2392c1943
commit
b6571d99de
14 changed files with 157 additions and 36 deletions
|
|
@ -9,29 +9,69 @@ IpcClient &IpcClient::Instance()
|
|||
|
||||
QSharedPointer<IpcProcessInterfaceReplica> IpcClient::createPrivilegedProcess()
|
||||
{
|
||||
if (! Instance().m_ipcClient->isReplicaValid()) return nullptr;
|
||||
if (! Instance().m_ipcClient || ! Instance().m_ipcClient->isReplicaValid()) {
|
||||
qWarning() << "IpcClient::createPrivilegedProcess : IpcClient IpcClient replica is not valid";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QRemoteObjectPendingReply<int> futureResult = Instance().m_ipcClient->createPrivilegedProcess();
|
||||
futureResult.waitForFinished(1000);
|
||||
|
||||
int pid = futureResult.returnValue();
|
||||
QSharedPointer<QRemoteObjectNode> replica(new QRemoteObjectNode);
|
||||
QSharedPointer<QRemoteObjectNode> replicaNode(new QRemoteObjectNode);
|
||||
//Instance().m_processNodes.insert(pid, replica);
|
||||
|
||||
replica->connectToNode(QUrl(amnezia::getIpcProcessUrl(pid)));
|
||||
auto ptr = QSharedPointer<IpcProcessInterfaceReplica>(replica->acquire<IpcProcessInterfaceReplica>());
|
||||
connect(ptr.data(), &IpcProcessInterfaceReplica::destroyed, replica.data(), [replica](){
|
||||
replica->deleteLater();
|
||||
|
||||
QSharedPointer<QLocalSocket> socket(new QLocalSocket(replicaNode.data()));
|
||||
QSharedPointer<IpcProcessInterfaceReplica> ptr;
|
||||
|
||||
connect(socket.data(), &QLocalSocket::connected, replicaNode.data(), [socket, replicaNode, &ptr]() {
|
||||
replicaNode->addClientSideConnection(socket.data());
|
||||
|
||||
ptr.reset(replicaNode->acquire<IpcProcessInterfaceReplica>());
|
||||
|
||||
ptr->waitForSource(1000);
|
||||
|
||||
if (!ptr->isReplicaValid()) {
|
||||
qWarning() << "IpcProcessInterfaceReplica replica is not connected!";
|
||||
}
|
||||
|
||||
});
|
||||
socket->connectToServer(amnezia::getIpcProcessUrl(pid));
|
||||
socket->waitForConnected();
|
||||
|
||||
auto proccessReplica = QSharedPointer<IpcProcessInterfaceReplica>(ptr);
|
||||
|
||||
|
||||
|
||||
// replica->connectToNode(QUrl(amnezia::getIpcProcessUrl(pid)));
|
||||
// auto ptr = QSharedPointer<IpcProcessInterfaceReplica>(replica->acquire<IpcProcessInterfaceReplica>());
|
||||
connect(proccessReplica.data(), &IpcProcessInterfaceReplica::destroyed, proccessReplica.data(), [replicaNode](){
|
||||
replicaNode->deleteLater();
|
||||
});
|
||||
|
||||
return ptr;
|
||||
return proccessReplica;
|
||||
}
|
||||
|
||||
IpcClient::IpcClient(QObject *parent) : QObject(parent)
|
||||
{
|
||||
m_ClientNode.connectToNode(QUrl(QStringLiteral(IPC_SERVICE_URL)));
|
||||
m_ipcClient.reset(m_ClientNode.acquire<IpcInterfaceReplica>());
|
||||
m_ipcClient->waitForSource(1000);
|
||||
// m_ClientNode.connectToNode(QUrl(amnezia::getIpcServiceUrl()));
|
||||
// qDebug() << QUrl(amnezia::getIpcServiceUrl());
|
||||
|
||||
|
||||
m_localSocket.reset(new QLocalSocket(this));
|
||||
connect(m_localSocket.data(), &QLocalSocket::connected, &m_ClientNode, [this]() {
|
||||
m_ClientNode.addClientSideConnection(m_localSocket.data());
|
||||
|
||||
m_ipcClient.reset(m_ClientNode.acquire<IpcInterfaceReplica>());
|
||||
m_ipcClient->waitForSource(1000);
|
||||
|
||||
if (!m_ipcClient->isReplicaValid()) {
|
||||
qWarning() << "IpcClient replica is not connected!";
|
||||
}
|
||||
|
||||
});
|
||||
m_localSocket->connectToServer(amnezia::getIpcServiceUrl());
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef IPCCLIENT_H
|
||||
#define IPCCLIENT_H
|
||||
|
||||
#include <QLocalSocket>
|
||||
#include <QObject>
|
||||
|
||||
#include "ipc.h"
|
||||
|
|
@ -11,11 +12,11 @@ class IpcClient : public QObject
|
|||
Q_OBJECT
|
||||
public:
|
||||
static IpcClient &Instance();
|
||||
static bool init() { return Instance().m_ipcClient->isReplicaValid(); }
|
||||
static QSharedPointer<IpcInterfaceReplica> ipcClient() { return Instance().m_ipcClient; }
|
||||
|
||||
static QSharedPointer<IpcProcessInterfaceReplica> createPrivilegedProcess();
|
||||
|
||||
static QSharedPointer<IpcInterfaceReplica> ipcClient() { return Instance().m_ipcClient; }
|
||||
|
||||
signals:
|
||||
|
||||
private:
|
||||
|
|
@ -23,6 +24,7 @@ private:
|
|||
|
||||
QRemoteObjectNode m_ClientNode; // create remote object node
|
||||
QSharedPointer<IpcInterfaceReplica> m_ipcClient;
|
||||
QSharedPointer<QLocalSocket> m_localSocket;
|
||||
|
||||
//QMap<int, QSharedPointer<QRemoteObjectNode>> m_processNodes;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue