mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
4c1f414713
Rather than manually launching the SQLServer process, use SQLClient's new functionality to launch the server just once for all Ladybird instances. Quit the SQLServer process when it no longer has any connected clients.
49 lines
1.4 KiB
C++
49 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#define AK_DONT_REPLACE_STD
|
|
|
|
#include <AK/DeprecatedString.h>
|
|
#include <LibCore/ArgsParser.h>
|
|
#include <LibCore/Directory.h>
|
|
#include <LibCore/EventLoop.h>
|
|
#include <LibCore/StandardPaths.h>
|
|
#include <LibIPC/MultiServer.h>
|
|
#include <LibMain/Main.h>
|
|
#include <SQLServer/ConnectionFromClient.h>
|
|
|
|
ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|
{
|
|
DeprecatedString pid_file;
|
|
|
|
Core::ArgsParser args_parser;
|
|
args_parser.add_option(pid_file, "Path to the PID file for the SQLServer singleton process", "pid-file", 'p', "pid_file");
|
|
args_parser.parse(arguments);
|
|
|
|
VERIFY(!pid_file.is_empty());
|
|
|
|
auto database_path = DeprecatedString::formatted("{}/Ladybird", Core::StandardPaths::data_directory());
|
|
TRY(Core::Directory::create(database_path, Core::Directory::CreateDirectories::Yes));
|
|
|
|
Core::EventLoop loop;
|
|
|
|
auto server = TRY(IPC::MultiServer<SQLServer::ConnectionFromClient>::try_create());
|
|
u64 connection_count { 0 };
|
|
|
|
server->on_new_client = [&](auto& client) {
|
|
client.set_database_path(database_path);
|
|
++connection_count;
|
|
|
|
client.on_disconnect = [&]() {
|
|
if (--connection_count == 0) {
|
|
MUST(Core::System::unlink(pid_file));
|
|
loop.quit(0);
|
|
}
|
|
};
|
|
};
|
|
|
|
return loop.exec();
|
|
}
|