信息传递路径

model->websocket->moonraker->websocket->message->ToolHeadModel
其中websocket和moonraker的部分被省略了。
moonraker的接口文档:地址
在这里插入图片描述
在这里插入图片描述

model发送请求

// model.h
signal:
	void sigSendMessage(QString message)
public slots:
	void queryToolHeadStatus();
protected:
    void init();
// model.cpp

void Model:init() 
{
	connect(this, &Model::sigSendMessage, _webClientTask.get(), &WebSocketThread::onSendMessage, Qt::QueuedConnection);
	connect(_webClientTask.get(), &WebSocketThread::sigReciveMessage, _messageTask.get(), &Message::onReciveMessage, Qt::QueuedConnection);
	
	queryToolHeadStatus() // 触发后发送信息到WebSocket
}
// init()函数是通过websocket监控klipperReady()的情况,
// klipperReady后触发init函数

//由init()触发
void Model::queryToolHeadStatus()
{
    QString queryToolHeadStatus= QString("{ \"jsonrpc\": \"2.0\", \"method\": \"%1\", \"params\": { \"objects\": %2 }, \"id\": %3 }")
                                    .arg("printer.objects.query")
                                    .arg("{ \"toolhead\": [\"axis_minimum\", \"axis_maximum\"]})
                                    .arg(1032); 
                                    //1032 自定义指示id,之后moonraker返回的信息里将包含 id:1032, 可以根据此来
    emit sigSendMessage(queryToolHeadStatus);
}

Message接收并分类回复,传递给下一级

// Message.h
public slots:
	void onReciveMessage(const QString &message);
signals:
	void sigToolHead(const QJsonObject &rootobj);
private:
    void connections();
// Message.cpp
void Message::onReciveMessage(const QString &message)
	if (message.contains("id"))
	        {
	            QJsonDocument jsonDoc = QJsonDocument::fromJson(message.toUtf8());
	   if (!jsonDoc.isObject())
            {
                // qDebug() << "Invalid JSON format";
                return;
            }
       
       QJsonObject rootObj = jsonDoc.object();
       int id = rootObj.value("id").toInt();
//////// 我们设置的id在这里 /////////
       if (id == 1032)
       {
                   qDebug() << "message received:" << message;

           emit sigToolHead(rootObj);
       }

void Message::connections()
	connect(this, &MessageHandleTask::sigToolHead, &TOOLHEAD_MODEL, &ToolHeadModel::onToolHead);

ToolHeadModel收到分类好的信息,进行处理

//toolheadmodel.h
public:
	void onToolHead(const QJsonObject &rootObj)
// toolheadmodel.cpp
void ToolHeadModel::onToolHead(const QJsonObject &rootObj)
{
··· // 怎么更好处理信息可以咨询AI
}
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐