aboutsummaryrefslogtreecommitdiff
path: root/src/InstanceManager.hpp
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-04-05 10:33:38 +0530
committerAkshay Nair <phenax5@gmail.com>2025-04-05 10:34:22 +0530
commit7e09b35b008f58809ac56184a4f83ab875c038e0 (patch)
tree3f7acdb64d2b063760fa22529826aa418e249750 /src/InstanceManager.hpp
parent8eda8343757b2161535388387b0525e0fd56f569 (diff)
downloadnull-browser-7e09b35b008f58809ac56184a4f83ab875c038e0.tar.gz
null-browser-7e09b35b008f58809ac56184a4f83ab875c038e0.zip
Add instance manager for enforcing single instance
Diffstat (limited to '')
-rw-r--r--src/InstanceManager.hpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/InstanceManager.hpp b/src/InstanceManager.hpp
new file mode 100644
index 0000000..0ef6e08
--- /dev/null
+++ b/src/InstanceManager.hpp
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <QLocalServer>
+#include <QLocalSocket>
+#include <QtCore>
+
+#include "utils.hpp"
+
+class InstanceManager : public QObject {
+ Q_OBJECT
+
+public:
+ InstanceManager();
+ ~InstanceManager() override;
+ void write_open_urls_to_socket(const QStringList &urls);
+ void write_lua_expr_to_socket(const QString &lua_expr);
+ void send_message();
+
+ DEFINE_GETTER(is_server, is_server_mode)
+
+signals:
+ void lua_eval_requested(const QString &lua_expr);
+ void urls_open_requested(const QStringList &urls);
+
+private slots:
+ void handle_new_connection();
+
+protected:
+ bool try_server_connection();
+ void server_init();
+
+private:
+ QLocalServer *server = nullptr;
+ QLocalSocket *socket = nullptr;
+ bool is_server_mode = false;
+
+ // TODO: On windows, \\.\pipe\null-browser
+ const char *socket_path = "/tmp/null-browser-socket.sock";
+};