#pragma once
+#include "core-export.h"
+
#include <memory>
#include <vector>
class AbstractSqlMigrationReader;
class AbstractSqlMigrationWriter;
-class Core : public QObject, public Singleton<Core>
+class CORE_EXPORT Core : public QObject, public Singleton<Core>
{
Q_OBJECT
void init();
+ /**
+ * Shuts down active core sessions, saves state and emits the shutdownComplete() signal afterwards.
+ */
+ void shutdown();
+
+
/*** Storage access ***/
// These methods are threadsafe.
void bufferInfoUpdated(UserId user, const BufferInfo &info);
//! Relay from CoreSession::sessionState(). Used for internal connection only
- void sessionState(const Protocol::SessionState &sessionState);
+ void sessionStateReceived(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:
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);