94 lines
2.3 KiB
C++
94 lines
2.3 KiB
C++
/*
|
|
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
|
* running old operating systems and software designed for IBM
|
|
* PC systems and compatibles from 1981 through fairly recent
|
|
* system designs based on the PCI bus.
|
|
*
|
|
* This file is part of the 86Box distribution.
|
|
*
|
|
* Header for 86Box VM manager protocol module
|
|
*
|
|
*
|
|
*
|
|
* Authors: cold-brewed
|
|
*
|
|
* Copyright 2024 cold-brewed
|
|
*/
|
|
|
|
#ifndef QT_VMMANAGER_PROTOCOL_H
|
|
#define QT_VMMANAGER_PROTOCOL_H
|
|
|
|
#include <QJsonObject>
|
|
extern "C" {
|
|
#include <86box/version.h>
|
|
}
|
|
|
|
static QVector<QString> ProtocolRequiredFields = { "type", "message" };
|
|
|
|
class VMManagerProtocol : QObject {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum class Sender {
|
|
Manager,
|
|
Client,
|
|
};
|
|
Q_ENUM(Sender);
|
|
|
|
enum class ManagerMessage {
|
|
RequestStatus,
|
|
Pause,
|
|
CtrlAltDel,
|
|
ShowSettings,
|
|
ResetVM,
|
|
RequestShutdown,
|
|
ForceShutdown,
|
|
UnknownMessage,
|
|
};
|
|
|
|
// This macro allows us to do a reverse lookup of the enum with `QMetaEnum`
|
|
Q_ENUM(ManagerMessage);
|
|
|
|
enum class ClientMessage {
|
|
Status,
|
|
WindowBlocked,
|
|
WindowUnblocked,
|
|
RunningStateChanged,
|
|
UnknownMessage,
|
|
};
|
|
Q_ENUM(ClientMessage);
|
|
|
|
enum class WindowStatus {
|
|
WindowUnblocked = 0,
|
|
WindowBlocked,
|
|
};
|
|
|
|
enum class RunningState {
|
|
Running = 0,
|
|
Paused,
|
|
RunningWaiting,
|
|
PausedWaiting,
|
|
Unknown,
|
|
};
|
|
Q_ENUM(RunningState);
|
|
|
|
explicit VMManagerProtocol(Sender sender);
|
|
~VMManagerProtocol();
|
|
|
|
QJsonObject protocolManagerMessage(ManagerMessage message_type);
|
|
QJsonObject protocolClientMessage(ClientMessage message_type);
|
|
static QString managerMessageTypeToString(ManagerMessage message);
|
|
static QString clientMessageTypeToString(ClientMessage message);
|
|
|
|
static bool hasRequiredFields(const QJsonObject &json_document);
|
|
static QJsonObject getParams(const QJsonObject &json_document);
|
|
static ClientMessage getClientMessageType(const QJsonObject &json_document);
|
|
static ManagerMessage getManagerMessageType(const QJsonObject &json_document);
|
|
|
|
private:
|
|
Sender message_class;
|
|
static QJsonObject constructDefaultObject(VMManagerProtocol::Sender type);
|
|
};
|
|
|
|
#endif // QT_VMMANAGER_PROTOCOL_H
|