qa: Remove lots of superfluous semicolons
[quassel.git] / src / core / core.h
index 7da4f22..021d9c9 100644 (file)
 #include "authenticator.h"
 #include "bufferinfo.h"
 #include "deferredptr.h"
+#include "identserver.h"
 #include "message.h"
 #include "oidentdconfiggenerator.h"
 #include "sessionthread.h"
+#include "singleton.h"
 #include "storage.h"
 #include "types.h"
-#include "identserver.h"
 
 class CoreAuthHandler;
 class CoreSession;
@@ -58,16 +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.
 
@@ -554,13 +561,6 @@ public:
         return instance()->_storage->setBufferLastSeenMsg(user, bufferId, msgId);
     }
 
-    //! Get the auth username associated with a userId
-    /** \param user  The user to retrieve the username for
-     *  \return      The username for the user
-     */
-    static inline QString getAuthUserName(UserId user) {
-        return instance()->_storage->getAuthUserName(user);
-    }
 
     //! Get a usable sysident for the given user in oidentd-strict mode
     /** \param user    The user to retrieve the sysident for
@@ -707,8 +707,14 @@ signals:
     //! Emitted when database schema upgrade starts or ends
     void dbUpgradeInProgress(bool inProgress);
 
+    //! 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:
-    bool init();
+    void initAsync();
 
     /** Persist storage.
      *
@@ -750,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);
@@ -807,7 +815,7 @@ private:
     QDateTime _startTime;
 
     IdentServer *_identServer {nullptr};
-    
+
     bool _initialized{false};
     bool _configured{false};