qa: Remove lots of superfluous semicolons
[quassel.git] / src / core / core.h
index 8d02d9e..021d9c9 100644 (file)
@@ -44,6 +44,7 @@
 #include "message.h"
 #include "oidentdconfiggenerator.h"
 #include "sessionthread.h"
+#include "singleton.h"
 #include "storage.h"
 #include "types.h"
 
@@ -58,18 +59,22 @@ struct NetworkInfo;
 class AbstractSqlMigrationReader;
 class AbstractSqlMigrationWriter;
 
-class Core : public QObject
+class 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.
 
@@ -705,6 +710,9 @@ signals:
     //! 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();
 
@@ -748,6 +756,8 @@ private slots:
 
     bool changeUserPass(const QString &username);
 
+    void onSessionShutdown(SessionThread *session);
+
 private:
     SessionThread *sessionForUser(UserId userId, bool restoreState = false);
     void addClientHelper(RemotePeer *peer, UserId uid);