Switch to the new QNativeIpcKey based QSharedMemory constructor with Qt 6.6 and higher, the old constructor will be deprecated.
This also makes the library work again with the upcoming Qt 6.6 release and higher.
However, there are still issues with releasing the existing memory in cases where the application is forcefully quit or crashed.
The server now acknowledges every received message by sending a \r.
By waiting for the acknowledgement, clients should no longer terminate
too early, causing bytes getting lost in Qt's internal socket handling.
Message handling in the server is simplified because we can now rely
on the readyRead signal being raised for every frame.
This should finally solve #125 and #121.
What remains is to correctly handle data sent using
SingleApplication::sendMessage.
* Fix send message example
If a secondary instance sends a message immediately after connecting, the
message follows the init message. This causes the slotConnectionEstablished to
read and consume the tail of the message and interpret it as the checksum. The
checksum fails and the connection becomes invalid.
To avoid this race, we prefix the init message with its length. This way, we
consume only the data relevant to the init message.
This patch fixes the sending_arguments example.
Signed-off-by: Francis Giraldeau <francis.giraldeau@gmail.com>
* Fix include file case
Signed-off-by: Francis Giraldeau <francis.giraldeau@nrc-cnrc.gc.ca>
* removed c style casts and eliminated all clang warnings, fixed instanceId reading from only one byte in deserialization of message, cleaned up serialization code using QDataStream, changed connection type to use quint8 enum rather than char
* renamed SingleAppConnectionType to ConnectionType, added initialization values to all ConnectionType enum cases
* Added the ability to bring the primary application window to the foreground on Windows systems by adding an option flag. THis option can only be used in Windows development and in applications derived from QApplication with a QMainWindow object.
Because the primary application needs to be instructed to go to the foreground, the option SecondaryNotification must also be set to use this functionality
* Changed the ability to bring the primary application window to the front as discussed in itay-grudev/SingleApplication#31.
Now the process ID of the primary application get stored and is accessible for other instances of the application. It is to the developer to bring the applications windows to the front. For convenience the accompanying readme now contains a paragraph with example of how to do this on Windows systems.
* v3.0.9 Added SingleApplicationPrivate::primaryPid()
* Added back support for getting username on Windows
* Fixed typo in singleapplication.pri
* Compiler specific Advapi32.lib links
* Removed username debug statement
* Allows the application path and version to be excluded from the server name
hash. The following flags were added for this purpose:
* `SingleApplication::Mode::ExcludeAppVersion`
* `SingleApplication::Mode::ExcludeAppPath`
* Allow a non elevated process to connect to a local server created by an
elevated process run by the same user on Windows
* Fixes a problem with upper case letters in paths on Windows