/
breton75
/
modus2
Обзор
Документация
Войти
/
breton75
/
modus2
Код
Запросы
0
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
utils/mdserver/src/control_server.h
161 строка
6 KB
s.sviridov
Merge commit '3a788cfc262142eeb41c25e6e737ee071057ffd6'
19 фев 2026, 18:50
19 фев 2026, 18:50
f034956
Код
Авторство
О чём код?
#ifndef MODUS_CONTROL_H #define MODUS_CONTROL_H //#include <QDBusConnection> #include <QtWebSockets/QWebSocketServer> #include <QtWebSockets/QWebSocket> #include "qfileinfo.h" #include <QTextStream> #include <QFile> #include <QDataStream> #include "chrono" #include "../../../framework/logger/master_logger.h" #include "../../../framework/global/defs.h" #include "../../../framework/global/token.h" #include "../../../framework/global/configuration.h" #include "../../../framework/global/entities.h" //#include "../../../framework/dbus/sv_dbus.h" #include "../../../../../svlib/SvHttpRestApiServer/1.2/sv_http_restapi_server.h" #include "../../../../../svlib/auth/1.0/auth_plugin_interface.h" #define M_SIGNAL_ID_NOT_FOUND "Сигнал с id %1 в конфигурации не найден" #define M_SIGNAL_NAME_NOT_FOUND "Сигнал '%1' в конфигурации не найден" #define M_SIGNAL_NOT_SUITABLE_TYPE "Нельзя изменить значение сигнала с id %1. " \ "Могут быть изменены только сигналы с вариантом использования OUT и VAR" #define P_IDS "ids" #define P_NAMES "names" #define P_BIG "big" namespace modus { const QRegularExpression RE_IDS_RANGE = QRegularExpression("(?<low>\\d+)[\\s]{0,}-[\\s]{0,}(?<high>\\d+)"); class ControlServer: public sv::SvHttpRestApiServer { Q_OBJECT public: explicit ControlServer(); ~ControlServer(); bool configure(sv::SvHttpRestApiServer::Params params, modus::Configuration* configuration, modus::Entities* entities, MasterLogger* _masterLogger); void start() override; void stop() override; // static QString version() { return QString(LIB_VERSION); } public slots: void deleteLogger(); void setLogger(); private: // QWebSocketServer* m_ws_server; // QList<QWebSocket*> m_websocket_clients; modus::Configuration* m_modus_configiration; modus::Entities* m_modus_entities; AuthPluginInterface* m_authPlugin = nullptr; QHash<QString, UserData> m_usersData; /* методы, для удаленного вызова */ Q_INVOKABLE sv::http::MessageBody get_signal_values(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody get_signal_values_csv(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody get_signal_info(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody set_signal_values(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody reset_signals(const sv::http::HttpRequest& request); /*! параметры: big=(true|false) - возвращать основной или развернутый (big) json объект */ Q_INVOKABLE sv::http::MessageBody get_configuration(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody getConfiguration(const sv::http::HttpRequest &request); Q_INVOKABLE sv::http::MessageBody getLibInfo(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody get_file(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody save_file(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody set_eventlog(const sv::http::HttpRequest& request); // оставлен для обратной совместимости Q_INVOKABLE sv::http::MessageBody setEventLog(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody getEventLoggers(const sv::http::HttpRequest&); Q_INVOKABLE sv::http::MessageBody getAvailableLoggers(const sv::http::HttpRequest& request); //Разрешение не требуется Q_INVOKABLE sv::http::MessageBody addEventLogger(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody delEventLogger(const sv::http::HttpRequest& request); Q_INVOKABLE sv::http::MessageBody getLoggerEntities(const sv::http::HttpRequest&); Q_INVOKABLE sv::http::MessageBody getLoggerLevels(const sv::http::HttpRequest&); Q_INVOKABLE sv::http::MessageBody getLoggerTypes(const sv::http::HttpRequest&); Q_INVOKABLE sv::http::MessageBody get_user_data(const sv::http::HttpRequest& request); //Разрешение не требуется Q_INVOKABLE sv::http::MessageBody registerUser(const sv::http::HttpRequest& request); //Требуется разрешение security Q_INVOKABLE sv::http::MessageBody updateUser(const sv::http::HttpRequest& request); //Требуется разрешение security Q_INVOKABLE sv::http::MessageBody login(const sv::http::HttpRequest& request); //Разрешение не требуется Q_INVOKABLE sv::http::MessageBody get_usernames(const sv::http::HttpRequest& request); //Разрешение не требуется Q_INVOKABLE sv::http::MessageBody user_action(const sv::http::HttpRequest& request); QByteArray call_get_method_python(const QString& method, const QString& params); QWebSocket* m_ws_client = nullptr; MasterLogger* MASTERLOGGER = nullptr; private slots: // void newWebSockeConnection(); // void processWebSocketRequest(); // void webSocketDisconnected(); void messageSlot(const QString &entity, int id, const QString &type, const QString& time, const QString& message); void log(const QString& msg); void loadAuthPlugin(); bool checkPermission(const QString& tokenString, const QString& permission, sv::http::MessageBody& errorReply); bool parseToken(const QString& tokenString, QString& username, sv::http::MessageBody& errorReply); // bool parseEvents(QByteArray& content, QString& resultString); }; class SvSocketTimer: public QTimer { Q_OBJECT public: SvSocketTimer(QTcpSocket* socket): m_socket(socket) // m_interval(interval) { // connect(this, &QTimer::timeout, this, &SvSocketTimer::close_socket); } ~SvSocketTimer() override { close_socket(); } private: QTcpSocket* m_socket; // int m_interval; public slots: void close_socket() { if(m_socket->isValid()) m_socket->close(); } }; } #endif // MODUS_CONTROL_H