Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

### 修复

- 升级官方 StreamFrame 2.4.0,采用 Connected 发布点的会话 epoch 收口,
并获得 Passive 接受重试出锁与监听端口立即重绑加固。
- 升级官方 StreamFrame 2.3.1,修复迟到旧会话故障污染活会话状态、旧会话
绑定消息跨 Socket 错发,以及会话拆除时发送失败类型不稳定的问题。
- 串行化适配器的当前会话关闭与 transport 释放,避免已入队的迟到
Expand Down
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<PackageVersion Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" />
<PackageVersion Include="PolySharp" Version="1.16.0" />
<PackageVersion Include="Secs4Net" Version="3.1.0" />
<PackageVersion Include="StreamFrame" Version="2.3.1" />
<PackageVersion Include="StreamFrame" Version="2.4.0" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="4.0.0" />
</ItemGroup>
Expand Down
8 changes: 5 additions & 3 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ HSMS 会话切换后,旧会话的控制请求、数据事务和等待中的应
<code>IHsmsTransport</code> 使用单一事件流按 Session ID 报告会话打开、
帧到达和会话关闭。<code>StreamFrameHsmsTransport</code> 已在内部实现:

- 直接采用 StreamFrame 2.3.1 的单调 TCP Session ID;
- 直接采用 StreamFrame 2.4.0 的单调 TCP Session ID,并在 Connected
发布点同步分配会话 epoch;
- 通过会话感知接收流保留帧的原始 Session ID,迟到消费不会被标成新会话;
- 会话绑定发送在 StreamFrame 原生 FIFO 中校验 Session ID,旧会话消息
不会重放,整帧写入本机 Socket 后才完成;
Expand All @@ -65,8 +66,9 @@ HSMS 会话切换后,旧会话的控制请求、数据事务和等待中的应

这些能力仍隔离在 <code>IHsmsTransport</code> 后,不进入公共 API。此前
跟踪的 StreamFrame #38/#39 已在 2.3.0 完成迁移,2.3.1 进一步封闭迟到
旧故障污染活会话和排队消息跨 Socket 错发的竞态;SecsFrame 只保留协议
关闭原因和异常边界转换。详细失效模式与验证证据见
旧故障污染活会话和排队消息跨 Socket 错发的竞态,2.4.0 又收口发布窗口
旧 epoch 故障并加固 Passive 监听恢复;SecsFrame 只保留协议关闭原因和
异常边界转换。详细失效模式与验证证据见
[STREAMFRAME-ADAPTER.md](STREAMFRAME-ADAPTER.md)。

### 单线程会话状态机
Expand Down
8 changes: 5 additions & 3 deletions docs/COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@
## 上游能力集成

StreamFrame #38(未完成帧超时)与 #39(会话感知发送确认及消息上下文)
已经随官方 StreamFrame 2.3.0 发布。SecsFrame 固定官方 2.3.1 NuGet 包,
包含迟到旧会话故障隔离、排队发送 Session ID 复核和稳定失效异常修复,并由
内部 <code>StreamFrameHsmsTransport</code> 使用原生会话 API;此前基于
已经随官方 StreamFrame 2.3.0 发布,2.3.1 随后补充迟到旧会话故障隔离、
排队发送 Session ID 复核和稳定失效异常修复。SecsFrame 当前固定官方
2.4.0 NuGet 包,进一步收口 Connected 发布点的会话 epoch,加固 Passive
接受重试与监听端口重绑。内部
<code>StreamFrameHsmsTransport</code> 使用原生会话 API;此前基于
原始字节回调、发送信封和自建 Session ID 的临时实现已经删除。

这不是设备兼容模式:
Expand Down
9 changes: 5 additions & 4 deletions docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

- [x] 完整 SECS-II Item 类型、嵌套 List 和严格二进制编解码。
- [x] 动态 SecsMessage、可选单根 Item 与 HSMS Data Message Payload 编解码。
- [x] 迁移到 StreamFrame 2.3.1 原生会话绑定、写出确认、会话竞态修复和
未完成帧超时。
- [x] 迁移到 StreamFrame 2.4.0 原生会话绑定、写出确认、会话 epoch/监听
竞态修复和未完成帧超时。
- [x] Active/Passive 共用状态机的 Select/Select Response、Separate、
T6/T7、System Bytes 关联和会话失效处理。
- [x] Linktest、Reject、Deselect 控制消息与对应 T6 分支。
Expand All @@ -27,8 +27,9 @@
- [x] Host、Equipment 双角色端点及两种 Active/Passive 拓扑的双向回环。

阶段 1 的工程能力已经形成完整基础链路,StreamFrame #38/#39 的正式包
迁移、2.3.1 会话隔离修复与等价测试已经完成。后续切片继续扩展 GEM 通用
行为。任何标准默认值
迁移与 2.3.1 会话隔离修复已经完成;当前固定 2.4.0,并继续验证发布窗口
epoch 收口与 Passive 监听加固。后续切片继续扩展 GEM 通用行为。任何
标准默认值
和完整合规结论都依赖团队合法获得的 E37/E37.1 及相关 GEM 标准副本与
一致性测试。

Expand Down
13 changes: 11 additions & 2 deletions docs/STREAMFRAME-ADAPTER.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## 上游基线

SecsFrame 固定依赖官方 [StreamFrame 2.3.1](https://www.nuget.org/packages/StreamFrame/2.3.1)。
SecsFrame 固定依赖官方 [StreamFrame 2.4.0](https://www.nuget.org/packages/StreamFrame/2.4.0)。
2.3.0 已经解决此前跟踪的两项能力缺口:

- [#38](https://github.com/CSJ608/StreamFrame/issues/38) / [PR #41](https://github.com/CSJ608/StreamFrame/pull/41):
Expand All @@ -16,6 +16,15 @@ ID,残留的旧会话绑定消息以 <code>SessionExpiredException</code> 结
不会写入新 Socket。停机、Socket 释放及会话故障竞态也统一收敛到该异常
边界。详见 [2.3.1 发布说明](https://github.com/CSJ608/StreamFrame/releases/tag/v2.3.1)。

2.4.0 不移除 SecsFrame 使用的会话感知公共接口。会话 epoch 改为与 Session
ID 一样在 Connected 发布点分配,闭合状态已经对外可见但会话任务尚未创建
期间的旧 epoch 故障窗口;Passive 接受重试延迟移到锁外,并为监听 Socket
设置 <code>SO_REUSEADDR</code>,提高故障重试和立即重绑的跨平台稳定性。
底层连接还会通过 <code>System.Diagnostics.Metrics</code> 的
<code>StreamFrame</code> Meter 发出内置指标,但 SecsFrame 不把这些类型
提升为公共 API。详见
[2.4.0 发布说明](https://github.com/CSJ608/StreamFrame/releases/tag/v2.4.0)。

SecsFrame 不再维护基于原始字节回调的 T8 监视器、发送确认计数器、会话
信封 codec 或自建 TCP Session ID。公共 API 和内部
<code>IHsmsTransport</code> 契约保持不变,上层 HSMS 状态机不直接依赖
Expand Down Expand Up @@ -73,7 +82,7 @@ StreamFrame 只在已有未完成帧时运行该超时:空闲连接和完整
分片帧收发、实际 T8 到期,以及会话替换时排队发送的精确失效与新 Socket
内容隔离;完整套件继续覆盖 T3/T6 从发送完成点启动以及旧会话不重放。

这些测试证明当前工程契约与 StreamFrame 2.3.1 的互操作行为,不构成
这些测试证明当前工程契约与 StreamFrame 2.4.0 的互操作行为,不构成
SEMI 合规声明。T5/T8 的标准默认值、精确启停边界和异常恢复仍须依据团队
合法获得的 SEMI E37/E37.1 版本及一致性测试核对。仓库不得提交标准正文、
表格或 Schema。
Loading