aiPbMgrSendAck

aiPbMgrSendAck是一个基于 Protobuf 通信框架的确认发送函数,用于在 AI 服务与客户端之间发送响应确认消息。

1. 函数功能

向客户端发送 ACK(Acknowledgment)确认消息,通常用于:

  • 响应命令接收成功
  • 返回处理状态
  • 确认数据接收完成
  • 错误响应

函数

cpp 复制代码
/**
 * @brief 发送 Protobuf 确认消息
 * @param ctx       AI Protobuf 管理器上下文
 * @param cmd       原始命令类型(用于响应关联)
 * @param status    状态码(成功/错误码)
 * @param msg       可选的状态消息字符串
 * @return bool     发送成功返回 true,失败返回 false
 */
bool aiPbMgrSendAck(aiPbMgrCtx_t *ctx, 
                    EnumCmd cmd, 
                    PbAckStatus status, 
                    const char *msg);

典型实现代码

c 复制代码
#include "ai_pb_mgr.h"
#include "pb_encode.h"

bool aiPbMgrSendAck(aiPbMgrCtx_t *ctx, EnumCmd cmd, PbAckStatus status, const char *msg) {
    // 1. 检查参数有效性
    if (!ctx || !ctx->transport_send) {
        PB_LOG_ERROR("Invalid context or transport");
        return false;
    }
    
    // 2. 创建 ACK 消息
    PbAck ack_msg = PbAck_init_zero;
    ack_msg.cmd = cmd;              // 关联原始命令
    ack_msg.status = status;        // 状态码
    ack_msg.timestamp = pb_get_timestamp();  // 时间戳
    
    // 3. 可选的状态消息
    if (msg && strlen(msg) > 0) {
        strncpy(ack_msg.message, msg, sizeof(ack_msg.message) - 1);
        ack_msg.message[sizeof(ack_msg.message) - 1] = '\0';
        ack_msg.has_message = true;
    } else {
        ack_msg.has_message = false;
    }
    
    // 4. Protobuf 编码
    uint8_t tx_buffer[PB_ACK_MAX_SIZE];
    pb_ostream_t stream = pb_ostream_from_buffer(tx_buffer, sizeof(tx_buffer));
    
    if (!pb_encode(&stream, PbAck_fields, &ack_msg)) {
        PB_LOG_ERROR("Failed to encode ACK message: %s", PB_GET_ERROR(&stream));
        return false;
    }
    
    // 5. 通过传输层发送
    size_t sent = ctx->transport_send(ctx->transport_handle, 
                                       tx_buffer, 
                                       stream.bytes_written);
    if (sent != stream.bytes_written) {
        PB_LOG_ERROR("Failed to send ACK, sent %zu/%zu bytes", 
                     sent, stream.bytes_written);
        return false;
    }
    
    PB_LOG_DEBUG("ACK sent for cmd %d, status %d", cmd, status);
    return true;
}

对应的 Protobuf 消息定义

c 复制代码
// ack.proto
syntax = "proto3";

enum PbAckStatus {
    PB_ACK_OK = 0;          // 成功
    PB_ACK_ERROR = 1;       // 通用错误
    PB_ACK_BUSY = 2;        // 设备忙
    PB_ACK_TIMEOUT = 3;     // 超时
    PB_ACK_INVALID_CMD = 4; // 无效命令
    PB_ACK_NO_MEMORY = 5;   // 内存不足
}

message PbAck {
    EnumCmd cmd = 1;            // 原始命令类型
    PbAckStatus status = 2;     // 状态码
    uint64 timestamp = 3;       // 时间戳(毫秒)
    optional string message = 4; // 可选状态描述
}

aiPbMgrSendAck是 AI Protobuf 通信框架中的关键响应函数,用于:

确认机制:确保命令可靠传输;

状态反馈:实时返回处理状态;

错误处理:标准化错误响应;

异步支持:分离命令接收与执行。

命令处理完成后发送成功确认;

参数错误时发送错误响应;

启动长时间操作前发送接收确认。

相关推荐
zlwool6 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
EXI-小洲6 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
小灰灰搞电子7 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
2601_961901707 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
STQY燊桐启元(深圳)电子科技8 小时前
医疗精密电源散热方案:相变陶瓷片保障医疗设备长效稳定低干扰
大数据·网络·人工智能
何以解忧,唯有..8 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
QQ_21696290969 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
软件聚导航9 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
学习星球9 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
前端 贾公子10 小时前
第09章:上下文与记忆 (2)
java·服务器·前端