IOS-INFO-006 P0 | ReadingRuntimeSessionManager 【审计: 不存在】 #71

Closed
opened 2026-06-07 11:55:22 +08:00 by wangdl · 1 comment
Owner

审查

不支持 session 生命周期管理。需新建。

职责

start/pause/resume/close,保存 current session 和 context,防重复 start,防 close 后 heartbeat,暴露 clientSessionId。状态: idle|active|paused|closed。

## 审查 不支持 session 生命周期管理。需新建。 ## 职责 start/pause/resume/close,保存 current session 和 context,防重复 start,防 close 后 heartbeat,暴露 clientSessionId。状态: idle|active|paused|closed。
wangdl added this to the M-IOS-INFO:学习信息采集、上传、继续学习与基础分析闭环 milestone 2026-06-07 11:55:22 +08:00
wangdl changed title from IOS-INFO-005 P0 | ReadingRuntimeSessionManager to IOS-INFO-006 P0 | ReadingRuntimeSessionManager 【审计: 不存在】 2026-06-07 12:10:02 +08:00
Author
Owner

完成报告

交付

Features/MaterialReader/ReadingRuntimeSessionManager.swift — V2 Session Manager:

@MainActor
final class ReadingRuntimeSessionManager {
    var state: ReadingSessionState  // idle|active|paused|closed
    var activeSessionId: String?
    var activeContext: ReadingMaterialContext?
    var adapter: ReadingRuntimeAdapter  // 可注入 mock

    // Session lifecycle
    func openMaterial(_ ctx: ReadingMaterialContext) throws  // → active
    func closeMaterial()                                     // → closed
    func pause() / resume()                                 // active ↔ paused

    // Events
    func updatePosition(_ pos: ReadingPosition)  // 2s debounce → pushPositionChanged
    func markAsRead()                            // → pushMarkedAsRead

    // Heartbeat: Timer 15s → pushHeartbeat(delta:15)
}

防重复 start: openMaterial 检查 state != idle/closed → throw SessionError.alreadyActive
防 close 后 heartbeat: startHeartbeat 检查 state == .active
adapter 注入: 默认 RustReadingRuntimeAdapter(),可注入 mock 用于测试

## 完成报告 ### 交付 `Features/MaterialReader/ReadingRuntimeSessionManager.swift` — V2 Session Manager: ```swift @MainActor final class ReadingRuntimeSessionManager { var state: ReadingSessionState // idle|active|paused|closed var activeSessionId: String? var activeContext: ReadingMaterialContext? var adapter: ReadingRuntimeAdapter // 可注入 mock // Session lifecycle func openMaterial(_ ctx: ReadingMaterialContext) throws // → active func closeMaterial() // → closed func pause() / resume() // active ↔ paused // Events func updatePosition(_ pos: ReadingPosition) // 2s debounce → pushPositionChanged func markAsRead() // → pushMarkedAsRead // Heartbeat: Timer 15s → pushHeartbeat(delta:15) } ``` **防重复 start:** `openMaterial` 检查 state != idle/closed → throw `SessionError.alreadyActive` **防 close 后 heartbeat:** `startHeartbeat` 检查 `state == .active` **adapter 注入:** 默认 `RustReadingRuntimeAdapter()`,可注入 mock 用于测试
Sign in to join this conversation.
No description provided.