punchnet-macos/Tun/Punchnet/Actors/SDLSuperRegistrationStateMachine.swift
2026-04-15 10:16:13 +08:00

77 lines
1.4 KiB
Swift

//
// 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
}
}