Format singleapplication sources

This commit is contained in:
Jonas Kvinge
2020-10-04 02:18:10 +02:00
parent 51f2383a07
commit 28d0cc8795
8 changed files with 97 additions and 134 deletions

View File

@@ -62,12 +62,11 @@
#endif
SingleApplicationPrivate::SingleApplicationPrivate(SingleApplication *_q_ptr)
: q_ptr(_q_ptr),
memory(nullptr),
socket(nullptr),
server(nullptr),
instanceNumber(-1)
{}
: q_ptr(_q_ptr),
memory(nullptr),
socket(nullptr),
server(nullptr),
instanceNumber(-1) {}
SingleApplicationPrivate::~SingleApplicationPrivate() {
@@ -77,7 +76,7 @@ SingleApplicationPrivate::~SingleApplicationPrivate() {
}
memory->lock();
InstancesInfo* inst = static_cast<InstancesInfo*>(memory->data());
InstancesInfo *inst = static_cast<InstancesInfo *>(memory->data());
if (server != nullptr) {
server->close();
delete server;
@@ -88,7 +87,6 @@ SingleApplicationPrivate::~SingleApplicationPrivate() {
memory->unlock();
delete memory;
}
void SingleApplicationPrivate::genBlockServerName() {
@@ -115,17 +113,17 @@ void SingleApplicationPrivate::genBlockServerName() {
if (options & SingleApplication::Mode::User) {
#ifdef Q_OS_UNIX
QByteArray username;
#if defined(HAVE_GETEUID) && defined(HAVE_GETPWUID)
# if defined(HAVE_GETEUID) && defined(HAVE_GETPWUID)
struct passwd *pw = getpwuid(geteuid());
if (pw) {
username = pw->pw_name;
}
#endif
# endif
if (username.isEmpty()) username = qgetenv("USER");
appData.addData(username);
#endif
#ifdef Q_OS_WIN
wchar_t username [ UNLEN + 1 ];
wchar_t username[UNLEN + 1];
// Specifies size of the buffer on input
DWORD usernameLength = UNLEN + 1;
if (GetUserNameW(username, &usernameLength)) {
@@ -139,17 +137,15 @@ void SingleApplicationPrivate::genBlockServerName() {
// Replace the backslash in RFC 2045 Base64 [a-zA-Z0-9+/=] to comply with server naming requirements.
blockServerName = appData.result().toBase64().replace("/", "_");
}
void SingleApplicationPrivate::initializeMemoryBlock() {
InstancesInfo* inst = static_cast<InstancesInfo*>(memory->data());
InstancesInfo *inst = static_cast<InstancesInfo *>(memory->data());
inst->primary = false;
inst->secondary = 0;
inst->primaryPid = -1;
inst->checksum = blockChecksum();
}
void SingleApplicationPrivate::startPrimary() {
@@ -174,14 +170,13 @@ void SingleApplicationPrivate::startPrimary() {
QObject::connect(server, &QLocalServer::newConnection, this, &SingleApplicationPrivate::slotConnectionEstablished);
// Reset the number of connections
InstancesInfo* inst = static_cast<InstancesInfo*>(memory->data());
InstancesInfo *inst = static_cast<InstancesInfo *>(memory->data());
inst->primary = true;
inst->primaryPid = q->applicationPid();
inst->checksum = blockChecksum();
instanceNumber = 0;
}
void SingleApplicationPrivate::startSecondary() {}
@@ -239,19 +234,17 @@ void SingleApplicationPrivate::connectToPrimary(const int msecs, const Connectio
socket->flush();
socket->waitForBytesWritten(msecs);
}
}
quint16 SingleApplicationPrivate::blockChecksum() {
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
quint16 checksum = qChecksum(QByteArray(static_cast<const char*>(memory->constData()), offsetof(InstancesInfo, checksum)));
quint16 checksum = qChecksum(QByteArray(static_cast<const char *>(memory->constData()), offsetof(InstancesInfo, checksum)));
#else
quint16 checksum = qChecksum(static_cast<const char*>(memory->constData()), offsetof(InstancesInfo, checksum));
quint16 checksum = qChecksum(static_cast<const char *>(memory->constData()), offsetof(InstancesInfo, checksum));
#endif
return checksum;
}
qint64 SingleApplicationPrivate::primaryPid() {
@@ -259,12 +252,11 @@ qint64 SingleApplicationPrivate::primaryPid() {
qint64 pid;
memory->lock();
InstancesInfo* inst = static_cast<InstancesInfo*>(memory->data());
InstancesInfo *inst = static_cast<InstancesInfo *>(memory->data());
pid = inst->primaryPid;
memory->unlock();
return pid;
}
/**
@@ -279,35 +271,31 @@ void SingleApplicationPrivate::slotConnectionEstablished() {
[nextConnSocket, this]() {
auto &info = connectionMap[nextConnSocket];
Q_EMIT this->slotClientConnectionClosed(nextConnSocket, info.instanceId);
}
);
});
QObject::connect(nextConnSocket, &QLocalSocket::disconnected,
[nextConnSocket, this](){
[nextConnSocket, this]() {
connectionMap.remove(nextConnSocket);
nextConnSocket->deleteLater();
}
);
});
QObject::connect(nextConnSocket, &QLocalSocket::readyRead,
[nextConnSocket, this]() {
auto &info = connectionMap[nextConnSocket];
switch(info.stage) {
case StageHeader:
readInitMessageHeader(nextConnSocket);
break;
case StageBody:
readInitMessageBody(nextConnSocket);
break;
case StageConnected:
Q_EMIT this->slotDataAvailable(nextConnSocket, info.instanceId);
break;
default:
break;
switch (info.stage) {
case StageHeader:
readInitMessageHeader(nextConnSocket);
break;
case StageBody:
readInitMessageBody(nextConnSocket);
break;
case StageConnected:
Q_EMIT this->slotDataAvailable(nextConnSocket, info.instanceId);
break;
default:
break;
};
}
);
});
}
void SingleApplicationPrivate::readInitMessageHeader(QLocalSocket *sock) {
@@ -334,7 +322,6 @@ void SingleApplicationPrivate::readInitMessageHeader(QLocalSocket *sock) {
if (sock->bytesAvailable() >= static_cast<qint64>(msgLen)) {
readInitMessageBody(sock);
}
}
void SingleApplicationPrivate::readInitMessageBody(QLocalSocket *sock) {
@@ -397,19 +384,16 @@ void SingleApplicationPrivate::readInitMessageBody(QLocalSocket *sock) {
if (sock->bytesAvailable() > 0) {
Q_EMIT this->slotDataAvailable(sock, instanceId);
}
}
void SingleApplicationPrivate::slotDataAvailable(QLocalSocket *dataSocket, const quint32 instanceId) {
Q_Q(SingleApplication);
Q_EMIT q->receivedMessage(instanceId, dataSocket->readAll());
}
void SingleApplicationPrivate::slotClientConnectionClosed(QLocalSocket *closedSocket, const quint32 instanceId) {
if (closedSocket->bytesAvailable() > 0)
Q_EMIT slotDataAvailable(closedSocket, instanceId);
}