X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=45d06072298569ad4cbdddb4900a7cbf6fb1892d;hp=e0ec7481a3cbb04654896c0e5ea4e6e4a7f78e95;hb=92fc8c5b119111a35ab8423c3cbde5b2a022badf;hpb=358e5d557d527675c7bc62e58a4c7ad3b408897c diff --git a/src/core/core.h b/src/core/core.h index e0ec7481..45d06072 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -20,6 +20,8 @@ #pragma once +#include "core-export.h" + #include #include @@ -40,9 +42,11 @@ #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" @@ -57,16 +61,22 @@ struct NetworkInfo; class AbstractSqlMigrationReader; class AbstractSqlMigrationWriter; -class Core : public QObject +class CORE_EXPORT 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. @@ -553,13 +563,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 @@ -692,6 +695,7 @@ public: static inline QTimer *syncTimer() { return &instance()->_storageSyncTimer; } inline OidentdConfigGenerator *oidentdConfigGenerator() const { return _oidentdConfigGenerator; } + inline IdentServer *identServer() const { return _identServer; } static const int AddClientEventId; @@ -702,8 +706,17 @@ signals: //! Relay from CoreSession::sessionState(). Used for internal connection only void sessionState(const Protocol::SessionState &sessionState); + //! 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. * @@ -745,6 +758,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); @@ -801,6 +816,8 @@ private: QDateTime _startTime; + IdentServer *_identServer {nullptr}; + bool _initialized{false}; bool _configured{false};