mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-04 00:03:59 +00:00
内核 Registry 拆出 StopAndUnload: - 停止并从注册表移除插件但保留 config_<name> 表 - 不触发 onRemove 回调(那是删除专用语义) - RemovePlugin 改为追加清理配置表示清除,更新场景调 StopAndUnload pluginmgr: - installFromData/installFromURL/installFromPath 加 overwrite 参数 - 已存在+overwrite=true:StopAndUnload→备份旧目录→解压新包→失败回滚→ 返回 action=upgraded/downgraded/reinstalled+previous_version+config_kept - 已存在+overwrite=false:返回 error+hint(指向 overwrite 用法) - cmpVersion 点分版本号数字比较(非字典序) - 测试覆盖:首次安装→重装拒绝→升级保留配置→降级→失败回滚 skill_install 加 overwrite 参数: - 同名技能存在时先卸载旧实例+删除目录再安装新包 SDK PluginMgr 接口同步加 StopAndUnload(name string) error 工具链 plugindev 已重建到 /usr/local/bin(7/29→8/25 版本) QQ 插件诊断日志版(webhook recv 到达+isAtBot 失败日志)已打包并 通过 upgrade 接口热更新部署,配置保留验证通过。
62 lines
2.0 KiB
C
62 lines
2.0 KiB
C
#ifndef HA_WS_H
|
||
#define HA_WS_H
|
||
|
||
#include <stdint.h>
|
||
#include <stddef.h>
|
||
#include "../include/ha_remotedevice.h"
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/* ======================== WS 帧类型 ======================== */
|
||
#define WS_OPCODE_CONTINUATION 0x0
|
||
#define WS_OPCODE_TEXT 0x1
|
||
#define WS_OPCODE_BINARY 0x2
|
||
#define WS_OPCODE_CLOSE 0x8
|
||
#define WS_OPCODE_PING 0x9
|
||
#define WS_OPCODE_PONG 0xA
|
||
|
||
/* ======================== WS 连接 ======================== */
|
||
typedef struct {
|
||
ha_transport_t *transport; /* 用户实现的传输层 */
|
||
int connected; /* 是否已连接 */
|
||
uint8_t read_buf[8192]; /* 读缓冲区 */
|
||
int read_pos; /* 缓冲区中有效数据起始位置 */
|
||
int read_len; /* 缓冲区中有效数据长度 */
|
||
char host[256]; /* 缓存目标地址 */
|
||
uint16_t port;
|
||
char path[256];
|
||
char token[256];
|
||
} ha_ws_t;
|
||
|
||
/* 创建 WS 连接。返回 0 成功,非 0 失败。 */
|
||
int ha_ws_connect(ha_ws_t *ws, ha_transport_t *transport,
|
||
const char *host, uint16_t port,
|
||
const char *path, const char *token);
|
||
|
||
/* 发送文本帧。返回 0 成功。 */
|
||
int ha_ws_send_text(ha_ws_t *ws, const char *text);
|
||
|
||
/* 发送二进制帧。返回 0 成功。 */
|
||
int ha_ws_send_binary(ha_ws_t *ws, const uint8_t *data, int len);
|
||
|
||
/* 发送 ping。返回 0 成功。 */
|
||
int ha_ws_send_ping(ha_ws_t *ws);
|
||
|
||
/* 读取一帧。
|
||
* 返回 opcode (0x1/0x2/0x8/0x9/0xA),-1 表示关闭或错误。
|
||
* payload 和 len 指向内部缓冲区,在下次调用前有效。 */
|
||
int ha_ws_read_frame(ha_ws_t *ws, const uint8_t **payload, int *len);
|
||
|
||
/* 发送原始 WS 帧(内部使用,用于回复 ping) */
|
||
int ha_ws_send_frame(ha_ws_t *ws, int opcode, const uint8_t *payload, int len);
|
||
|
||
/* 关闭 WS 连接 */
|
||
void ha_ws_close(ha_ws_t *ws);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* HA_WS_H */ |