Metadata-Version: 2.4
Name: python-library-patch-bay
Version: 0.1.5
Requires-Python: >=3.10
Requires-Dist: aiohttp<4,>=3.9
Requires-Dist: msgpack<2,>=1
Requires-Dist: pydantic<3,>=2
Requires-Dist: python-library-express-evaluator==0.1.0
Provides-Extra: rich
Requires-Dist: rich<14,>=13; extra == 'rich'
Description-Content-Type: text/markdown

# patch_bay

## 特性

* 中央节点按配置在进程间转发字节流；拓扑由配置给出。
* PatchBay：中央交换；按配置把某 Jack 发出的字节转发到其他 Jack（Jack 与 Jack 不直连）。
* Jack：业务侧接入点，只与 PatchBay 这条总线收发；不与其他 Jack 建立关系。
* 每条边可绑定表达式；按当前数据包求值决定是否允许经过。
* 支持任意数据结构；传输为字节，编码与解析由业务自行决定。

## 配置

### `jacks`

数组；元素字段：

| 字段 | 说明 |
|---|---|
| `name` | 名称（`wires` 里用名字引用，便于配置复用） |
| `address` | 该机 Jack 握手时上报的地址 `host:port`，须在列表内唯一 |

业务侧 ``Jack`` 只认 **地址**（与这里对应条目的 `address` 一致）；**不必**在代码里写 `name`。

### `wires`

数组；元素常用键名 `from`、`to`。字段：

| 字段 | 说明 |
|---|---|
| `from` | 源端 Jack 的 `name` |
| `to` | 目标 Jack 的 `name` |
| `rule` | 在 `rules` 中已定义的规则 id |

### `rules`

| 项 | 说明 |
|---|---|
| 键 | 规则 id，供 `wires` 中 `rule` 引用 |
| 值 | 表达式字符串；求值时带入当前数据包相关变量（如原始字节、可解析出的 JSON 等） |
| 转发条件 | 仅表达式成立时沿该边发出；不成立或求值失败则不发出 |

### `listen`

| 默认 | 说明 |
|---|---|
| `8765` | 监听端口；绑定地址固定为 `0.0.0.0`。填 `0` 时由操作系统分配空闲端口（多用于测试）。 |
