# Watchdog 状态机

## 连接状态机

```
状态流转：offline -> connecting -> verifying -> online -> disconnecting -> offline
```

| 状态 | 触发条件 | 下一状态 |
|------|----------|----------|
| offline | 初始/心跳超时30秒 | connecting |
| connecting | 尝试MQTT连接 | verifying |
| verifying | TOTP双向验证 | online/offline |
| online | 验证成功 | disconnecting |
| disconnecting | 主动断开/网络异常 | offline |

## 授权状态机

```
未初始化 -> 收集主机信息 -> 等待授权 -> 已授权
                                    ↓
                               授权过期/撤销 -> 未授权 -> 等待授权(重新申请)
```

## 状态转换详情

### 未初始化 → 收集主机信息
- 触发：Node/Agent首次连接
- 动作：AddHostInfo()

### 收集主机信息 → 等待授权
- 触发：GenerateAuthorizationFile()
- 动作：发布授权申请Command到MQTT

### 等待授权 → 已授权
- 触发：收到有效授权码
- 动作：解密并持久化授权信息

### 已授权 → 授权过期
- 触发：时间篡改检测
- 动作：设置initialized=false

### 已授权 → 未授权
- 触发：收到auth_revoke指令
- 动作：清除本地授权存储
