X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=021d9c94164963b5160ce9c02b2641b903b50e3a;hb=d9e586707522241d628a90466e13722e342cc28a;hp=8d02d9ed0ba5922f56f4bce08b9a01cc8d640abe;hpb=767e5f04ab1aff5ea98e9d3bf67d8f22043bf90c;p=quassel.git diff --git a/src/core/core.h b/src/core/core.h index 8d02d9ed..021d9c94 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -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 { 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);