## Epic 5: iOS App — Models & Networking — Issue 4/6 **Source:** Composite ### Description Observable WebSocket manager with auto-reconnect and keepalive. ### Acceptance Criteria - [ ] `WebSocketManager` as `@Observable` class - [ ] `URLSessionWebSocketTask` for WebSocket connection - [ ] Connection states: `disconnected`, `connecting`, `connected`, `reconnecting(attempt: Int)` - [ ] Auto-reconnect with exponential backoff (1s, 2s, 4s, 8s, 16s, 30s max) - [ ] Keepalive ping every 30s - [ ] Proper task cancellation on disconnect - [ ] Event parsing into typed Swift enums matching server events - [ ] Terminal subscribe/unsubscribe/input commands ### Files to Create - `ios/PPGMobile/PPGMobile/Networking/WebSocketManager.swift` (new)
Epic 5: iOS App — Models & Networking — Issue 4/6
Source: Composite
Description
Observable WebSocket manager with auto-reconnect and keepalive.
Acceptance Criteria
WebSocketManageras@ObservableclassURLSessionWebSocketTaskfor WebSocket connectiondisconnected,connecting,connected,reconnecting(attempt: Int)Files to Create
ios/PPGMobile/PPGMobile/Networking/WebSocketManager.swift(new)