跳到主要内容

Wire 协议

UltimateUI 的 wire protocol 由 spec/opcodes.json 驱动。生成器会根据这个 spec 产生 C# writer、TypeScript shim opcode 表,以及 native web extension 需要的 常量。

Schema 域名

所有 spec 文件都使用项目域名作为 JSON Schema 地址:

{
"$schema": "https://ultimate-ui.hcgstudio.com/spec/opcodes.schema.json"
}

这些 schema 文件由 Docusaurus 静态目录提供,源码位置是 docs/static/spec/。 部署到 ultimate-ui.hcgstudio.com 后,Docusaurus 会把它们暴露为:

  • https://ultimate-ui.hcgstudio.com/spec/opcodes.schema.json
  • https://ultimate-ui.hcgstudio.com/spec/elements.schema.json
  • https://ultimate-ui.hcgstudio.com/spec/events.schema.json
  • https://ultimate-ui.hcgstudio.com/spec/styles.schema.json

当前 spec 文件:

  • spec/opcodes.json
  • spec/elements.json
  • spec/events.json
  • spec/styles.json

Frame 生命周期

  1. RingEncoder 写入 frame header 和 opcode records。
  2. DomFrameValidator 在提交前做本地检查。
  3. WebKitGTK backend 把 frame 传给 shim。
  4. shim 检查 magic、schema version 和 payload,再执行 DOM 操作。
  5. shim 返回 JsBatchResult,包括 opsAppliedversionMismatch

Shim 生成

TypeScript shim 的生成入口:

make shim

这个命令会更新:

  • shim/src/opcodes.gen.ts
  • shim/dist/uui-shim.js

如果 spec/opcodes.json 变化,schema version 会变化,旧 shim 会拒绝处理不匹配 的 frame。