Files
qt5-legatus-legacy/Lts/Common/LtsProjectionWorkstation/lts_projection_workstation.h
T
2026-08-13 18:33:10 +02:00

89 lines
2.6 KiB
C++
Executable File

/**
* @RDE_HEADER@
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include "lts_projection_workstation_export.h"
#include "vnc_server_manager.h"
#include "WebSocket/messages.h"
#include "logger.h"
#include <LtsWebSocket/client_connection.h>
#include <QObject>
#include <QPair>
namespace LtsWebSocket { class LtsWebSocketServer; }
namespace LtsProjectionWorkstation
{
struct LoginInformation
{
LoginInformation() = default;
LoginInformation(int userId, int priority, int exerciseId, const QByteArray &settingsData)
: m_settingsData(settingsData), m_userId(userId), m_priority(priority), m_exerciseId(exerciseId) {}
QByteArray m_settingsData;
int m_userId = 0;
int m_priority = 0;
int m_exerciseId = 0;
};
class MessageFactory;
class LTSPROJECTIONWORKSTATION_EXPORT LtsProjectionWorkstation : public QObject, public AbstractMessageHandler
{
Q_OBJECT
public:
static LtsProjectionWorkstation *getInstance();
static bool hasInstance();
const LoginInformation &lastLoginRequest() const { return m_lastLoginRequest; }
LoginInformation pendingLoginRequest();
bool hasPendingLoginRequest() const { return !!m_pendingLoginRequest; }
void setProjectionOperatorPreset(const QString &operatorName, const QString &operatorPassword);
const QPair<QString, QString> &projectionOperatorPreset() const { return m_projectionOperatorPreset; }
// AbstractMessageHandler interface
void handleMessage(LtsWebSocket::AbstractClientMessage *message) override final;
public slots:
void slotLoginRequestReceived(int userId, int exerciseId);
void slotLogoutRequestReceived();
void slotLogoffDone();
signals:
void signalLoginRequestReceived(int userId, int exerciseId);
void signalLogoutRequestReceived();
private slots:
void clientDisconnected(LtsWebSocket::ClientConnection* client);
void clientConnected(LtsWebSocket::ClientConnection* client);
private:
explicit LtsProjectionWorkstation(QObject *parent = nullptr);
~LtsProjectionWorkstation();
static void cleanupLtsProjectionWorkstation();
LOGGER_T m_logger;
MessageFactory *m_messageFactory;
LtsWebSocket::LtsWebSocketServer *m_webSocketServer;
// QPair<int /* userId*/, int /* priority */> m_lastLoginRequest;
LoginInformation m_lastLoginRequest;
// QPair<int /* userId*/, int /* exerciseId */> *m_pendingLoginRequest;
LoginInformation *m_pendingLoginRequest;
QPair<QString /*operatorName*/, QString /*operatorPassword*/> m_projectionOperatorPreset;
QVector<LtsWebSocket::ClientConnection*> m_connections;
VncServerManager *m_vncManager;
}; // class LtsProjectionWorkstation
} // namespace LtsProjectionWorkstation