#pragma once
+#include "core-export.h"
+
#include <memory>
#include <vector>
#include "message.h"
#include "oidentdconfiggenerator.h"
#include "sessionthread.h"
+#include "singleton.h"
#include "storage.h"
#include "types.h"
class AbstractSqlMigrationReader;
class AbstractSqlMigrationWriter;
-class Core : public QObject
+class CORE_EXPORT Core : public QObject, public Singleton<Core>
{
Q_OBJECT
public:
- static Core *instance();
-
Core();
~Core() override;
void init();
+ /**
+ * Shuts down active core sessions, saves state and emits the shutdownComplete() signal afterwards.
+ */
+ void shutdown();
+
+
/*** Storage access ***/
// These methods are threadsafe.
//! Emitted when a fatal error was encountered during async initialization
void exitRequested(int exitCode, const QString &reason);
+ //! Emitted once core shutdown is complete
+ void shutdownComplete();
+
public slots:
void initAsync();
bool changeUserPass(const QString &username);
+ void onSessionShutdown(SessionThread *session);
+
private:
SessionThread *sessionForUser(UserId userId, bool restoreState = false);
void addClientHelper(RemotePeer *peer, UserId uid);