// // SDLSuperRegistrationStateMachine.swift // Tun // // Created by 安礼成 on 2026/4/15. // import Foundation final class SDLSuperRegistrationStateMachine { enum State: Equatable { case idle case registering case registered case failed } enum LoopAction { case sendRegister case stop } enum WaitDecision { case retry case registered case stop } private(set) var state: State = .idle func beginLoop() -> Bool { guard self.state != .registering else { return false } self.state = .registering return true } func makeLoopAction() -> LoopAction { switch self.state { case .registering: return .sendRegister case .idle, .registered, .failed: return .stop } } func makeWaitDecision() -> WaitDecision { switch self.state { case .registering: return .retry case .registered: return .registered case .idle, .failed: return .stop } } func handleRegisterSuperAck() { self.state = .registered } func handleRetryableNak() { self.state = .failed } func handleFailure() { self.state = .failed } func reset() { self.state = .idle } }