规则执行链
规则引擎围绕一个稳定的数据契约工作:
text
keyword
└─ search[] ─→ List<Series>
│ seriesId
▼
detail[] ─→ List<Source>
│ episodeId
▼
play[] ─→ URL + media metadataSourceRule
SourceRule 是 anx-rule/2 的内存模型,包含元数据、全局请求头、配方、三段管线和运行标志。JSON 在载入时被转为不可变的 PipelineStep 列表,first 分支也会预解析,避免每次执行重建步骤树。
PipelineInterpreter
解释器维护一个管线上下文:
value:当前步骤的输入/输出。vars:keyword、seriesId、episodeId和自定义变量。pageUrl:最近一次请求页面,供相对 URL 与 Referer 使用。seriesOut/sourcesOut:搜索和详情阶段的结构化输出。mediaHeaders/ Cookie 选择器:播放阶段元数据。
普通步骤串行执行。first 会为每个分支建立隔离试运行上下文,只提交第一个真正产出结果的分支,失败分支不会泄漏变量或媒体头。
PipelineHost
解释器不直接创建 Dio 或 WebView。它依赖窄接口 PipelineHost:
- 发起带调度、优先级与取消令牌的 HTTP 请求。
- 用 CSS 或 XPath 解析 HTML。
- 归一化 URL 并判断是否是可播放媒体。
- 渲染 WebView HTML 或嗅探视频请求。
这使解释器能够使用 FakeHost 做确定性的单元测试,真实客户端再由 PipelineSourceAdapter 提供网络实现。
PipelineSourceAdapter
适配器承担规则引擎与上层播放器之间的桥接:
- 展开
maccms/player_aaaa配方。 - 合并全局请求头与步骤请求头。
- 持久化同一规则会话的 Cookie。
- 根据
directConnection选择系统代理或直连。 - 对媒体 URL 做缓存、校验和播放准备。
- 处理媒体 Header、Cookie 过滤、HLS 物化及 keep-alive。
请求调度
所有规则 HTTP 请求经过 RequestScheduler。调度器支持全局并发、单域并发、优先级与取消,避免跨源搜索时无界并发拖慢 UI 或给目标站点制造不必要压力。
规则安装链
1编写明文
→anx-rule/22静态校验
结构与参数
→结构与参数
3真实验证
search → play
→search → play
4登记索引
更新 rev
→更新 rev
5客户端安装
缓存与更新
缓存与更新
开发环境会向上查找本地 rule/index.json,发行环境默认读取远程订阅。索引和已安装版本分别缓存;更新时保留本地 source id、启用状态与创建时间,并刷新 updatedAt 以触发适配器缓存失效。
