wiRedPanda
Logic Circuit Simulator
Loading...
Searching...
No Matches
MCPProcessor.h
Go to the documentation of this file.
1// Copyright 2015 - 2026, GIBIS-UNIFESP and the wiRedPanda contributors
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <atomic>
7#include <memory>
8
9#include <QBuffer>
10#include <QByteArray>
11#include <QHash>
12#include <QJsonDocument>
13#include <QJsonObject>
14#include <QObject>
15#include <QStringList>
16#include <QTextStream>
17#include <QThread>
18#include <QTimer>
19
20class BaseHandler;
22class ElementHandler;
23class FileHandler;
24class HistoryHandler;
25class ICHandler;
26class MCPValidator;
27class MainWindow;
28class QSocketNotifier;
31class ThemeHandler;
32
33#ifdef Q_OS_WIN
44class StdinReader : public QThread
45{
46 Q_OBJECT
47
48public:
49 explicit StdinReader(QObject *parent = nullptr);
50 void requestStop();
51
52protected:
53 void run() override;
54
55signals:
56 void dataReceived(const QString &line);
57
58private:
59 std::atomic<bool> m_stopRequested{false};
60};
61#endif
62
72class MCPProcessor : public QObject
73{
74 Q_OBJECT
75
76public:
77 explicit MCPProcessor(MainWindow *mainWindow, QObject *parent = nullptr);
79
80 void startProcessing();
81 void stopProcessing();
82
86 static constexpr qint64 kMaxStdinLineBytes = 16 * 1024 * 1024; // 16 MB
87
94 static QStringList extractStdinLines(QByteArray &buffer, const QByteArray &data);
95
96private slots:
97 void processIncomingData(const QString &line);
98#ifndef Q_OS_WIN
100 void onStdinReadable();
101#endif
102
103private:
104 void processCommand(const QString &line);
105 void sendResponse(const QJsonObject &response);
106
107 MainWindow *m_mainWindow;
108 std::unique_ptr<MCPValidator> m_validator;
109 QTextStream m_stdout;
110#ifdef Q_OS_WIN
111 StdinReader *m_stdinReader = nullptr;
112#else
113 QSocketNotifier *m_stdinNotifier = nullptr;
114 QByteArray m_stdinBuffer;
115#endif
116
117 // Specialized handlers for different command domains
118 std::unique_ptr<ServerInfoHandler> m_serverInfoHandler;
119 std::unique_ptr<FileHandler> m_fileHandler;
120 std::unique_ptr<ElementHandler> m_elementHandler;
121 std::unique_ptr<ConnectionHandler> m_connectionHandler;
122 std::unique_ptr<SimulationHandler> m_simulationHandler;
123 std::unique_ptr<ICHandler> m_icHandler;
124 std::unique_ptr<HistoryHandler> m_historyHandler;
125 std::unique_ptr<ThemeHandler> m_themeHandler;
126
128 QHash<QString, BaseHandler *> m_dispatchMap;
129};
Abstract base class for MCP command handlers.
Definition BaseHandler.h:24
Handler for connection operation commands (connect, disconnect, list, split).
Handler for element operation commands (create, delete, modify, transform, etc.).
Handler for file operation commands (load, save, export, etc.).
Definition FileHandler.h:16
Handler for undo/redo commands.
Handler for IC (Integrated Circuit) commands.
Definition ICHandler.h:17
MCPProcessor(MainWindow *mainWindow, QObject *parent=nullptr)
void stopProcessing()
static constexpr qint64 kMaxStdinLineBytes
void startProcessing()
static QStringList extractStdinLines(QByteArray &buffer, const QByteArray &data)
JSON Schema validator for MCP commands and responses using native json-schema-validator.
The top-level application window hosting the tab bar, menus, element palette, and editor.
Definition MainWindow.h:47
Handler for server information commands.
Handler for simulation operation commands (control, waveform generation/export).
Handler for theme management commands.