Commit 4162afb7 authored by martin hou's avatar martin hou

doc: 完善文档

parent 1e9d5afd
...@@ -50,22 +50,16 @@ ...@@ -50,22 +50,16 @@
|----------|------|----------| |----------|------|----------|
| `InitializeTask` | 初始化任务,设备连接后执行一次 | 获取设备信息、同步时间 | | `InitializeTask` | 初始化任务,设备连接后执行一次 | 获取设备信息、同步时间 |
| `TimerTask` | 定时任务,按指定间隔循环执行 | 轮询电池状态、文件列表 | | `TimerTask` | 定时任务,按指定间隔循环执行 | 轮询电池状态、文件列表 |
| `BackgroundTask` | 后台任务,带调度逻辑的周期任务 | 文件同步、数据上传 | | `BackgroundTask` | 后台任务,带调度逻辑的周期任务 | 录音传输及后续的处理 |
| `UserTask` | 用户任务,**排它性任务**,用于用户交互操作 | 文件下载、设备配置 | | `UserTask` | 用户任务,**排它性任务**,用于用户交互操作 | 用户点击引发的需要即时完成的操作指令 |
> ⚠️ **重要**:`UserTask` 是排它性的,当一个 UserTask 在执行时,所有定时任务和后台任务会暂停,以确保用户操作不被干扰。 > ⚠️ **重要**:`UserTask` 是排它性的,当一个 UserTask 在执行时,所有定时任务和后台任务会暂停,以确保用户操作不被干扰。
## 快速开始 ## 快速开始
### 安装依赖
```bash
npm install
```
### 基本使用 ### 基本使用
```tsx ```typescript
import { mgr } from './utils/mgr'; import { mgr } from './utils/mgr';
// 1. 监听自动连接事件 // 1. 监听自动连接事件
...@@ -73,8 +67,11 @@ mgr.onautoconnect((dinfo) => { ...@@ -73,8 +67,11 @@ mgr.onautoconnect((dinfo) => {
console.log('设备已连接:', dinfo.sn); console.log('设备已连接:', dinfo.sn);
}); });
// 2. 尝试连接已授权的设备 // 2. 尝试连接已授权的设备,可以直接触发完成自动连接
await mgr.tryconnect(); await mgr.tryconnect();
// 3. 尝试连接新设备,需要从用户事件触发
await mgr.connect();
``` ```
## 设备连接管理 ## 设备连接管理
...@@ -83,7 +80,7 @@ await mgr.tryconnect(); ...@@ -83,7 +80,7 @@ await mgr.tryconnect();
当页面加载时,调用 `tryconnect()` 会自动连接所有已授权的 HiDock 设备: 当页面加载时,调用 `tryconnect()` 会自动连接所有已授权的 HiDock 设备:
```tsx ```typescript
import { mgr } from './utils/mgr'; import { mgr } from './utils/mgr';
// 注册连接事件监听器 // 注册连接事件监听器
...@@ -100,7 +97,7 @@ await mgr.tryconnect(); ...@@ -100,7 +97,7 @@ await mgr.tryconnect();
如果需要让用户选择设备进行连接: 如果需要让用户选择设备进行连接:
```tsx ```typescript
const dinfo = await mgr.connect(); const dinfo = await mgr.connect();
if (dinfo) { if (dinfo) {
console.log('手动连接成功:', dinfo.sn); console.log('手动连接成功:', dinfo.sn);
...@@ -109,7 +106,7 @@ if (dinfo) { ...@@ -109,7 +106,7 @@ if (dinfo) {
### 监听连接状态变化 ### 监听连接状态变化
```tsx ```typescript
mgr.onconnectionstatechanged((state, dinfo) => { mgr.onconnectionstatechanged((state, dinfo) => {
switch (state) { switch (state) {
case 'init': case 'init':
...@@ -133,7 +130,7 @@ mgr.onconnectionstatechanged((state, dinfo) => { ...@@ -133,7 +130,7 @@ mgr.onconnectionstatechanged((state, dinfo) => {
### 断开连接 ### 断开连接
```tsx ```typescript
await mgr.close(sn); await mgr.close(sn);
``` ```
...@@ -151,7 +148,7 @@ UserTask 是用于用户交互操作的**排它性任务**。当你需要执行 ...@@ -151,7 +148,7 @@ UserTask 是用于用户交互操作的**排它性任务**。当你需要执行
#### 注册和释放 UserTask #### 注册和释放 UserTask
```tsx ```typescript
// 注册 UserTask(带超时等待) // 注册 UserTask(带超时等待)
const success = await mgr.registerTask(sn, 'my-task-id'); const success = await mgr.registerTask(sn, 'my-task-id');
if (!success) { if (!success) {
...@@ -169,9 +166,9 @@ try { ...@@ -169,9 +166,9 @@ try {
#### 使用 getInstance 获取设备实例 #### 使用 getInstance 获取设备实例
获取 Jensen 实例时**必须传入 UserTask 标签**,这样所有操作都会自动验证任务有效性: 获取 Jensen 实例时**必须传入 UserTask 标签**,这样所有操作都会自动验证任务有效性,这种方式更适合较复杂的场景
```tsx ```typescript
// 正确用法:传入 userTaskTag // 正确用法:传入 userTaskTag
const jensen = mgr.getInstance(sn, userTaskTag); const jensen = mgr.getInstance(sn, userTaskTag);
if (jensen == null) return alert('设备未连接'); if (jensen == null) return alert('设备未连接');
...@@ -182,9 +179,9 @@ const time = await jensen.getTime(1); ...@@ -182,9 +179,9 @@ const time = await jensen.getTime(1);
#### 使用 executeWithUserTask(推荐) #### 使用 executeWithUserTask(推荐)
更安全的方式是使用 `executeWithUserTask`,它会自动验证任务并执行回调: 更安全的方式是使用 `executeWithUserTask`,它会自动验证任务并执行回调,这种方式更适合较简单的场景
```tsx ```typescript
const time = await mgr.executeWithUserTask(sn, userTaskTag, async (jensen) => { const time = await mgr.executeWithUserTask(sn, userTaskTag, async (jensen) => {
return await jensen.getTime(1); return await jensen.getTime(1);
}); });
...@@ -194,7 +191,7 @@ const time = await mgr.executeWithUserTask(sn, userTaskTag, async (jensen) => { ...@@ -194,7 +191,7 @@ const time = await mgr.executeWithUserTask(sn, userTaskTag, async (jensen) => {
如果 UserTask 长时间不活动(超过 30 秒),会被自动释放。对于长时间操作,需要定期调用保活方法: 如果 UserTask 长时间不活动(超过 30 秒),会被自动释放。对于长时间操作,需要定期调用保活方法:
```tsx ```typescript
// 保持任务活跃 // 保持任务活跃
mgr.keepUserTaskAlive(sn, userTaskTag); mgr.keepUserTaskAlive(sn, userTaskTag);
``` ```
...@@ -210,7 +207,7 @@ mgr.keepUserTaskAlive(sn, userTaskTag); ...@@ -210,7 +207,7 @@ mgr.keepUserTaskAlive(sn, userTaskTag);
#### 注册自定义定时任务 #### 注册自定义定时任务
```tsx ```typescript
mgr.registerTimerTask(sn, { mgr.registerTimerTask(sn, {
tag: 'my-timer-task', tag: 'my-timer-task',
interval: 5000, // 5秒执行一次 interval: 5000, // 5秒执行一次
...@@ -219,9 +216,6 @@ mgr.registerTimerTask(sn, { ...@@ -219,9 +216,6 @@ mgr.registerTimerTask(sn, {
if (settings) { if (settings) {
store.set('settings', settings); store.set('settings', settings);
} }
},
onComplete: (success, data) => {
console.log('任务完成:', success);
} }
}); });
``` ```
...@@ -237,7 +231,7 @@ mgr.registerTimerTask(sn, { ...@@ -237,7 +231,7 @@ mgr.registerTimerTask(sn, {
#### 注册自定义初始化任务 #### 注册自定义初始化任务
```tsx ```typescript
mgr.registerInitializeTask(sn, { mgr.registerInitializeTask(sn, {
tag: 'my-init-task', tag: 'my-init-task',
task: async (jensen, store) => { task: async (jensen, store) => {
...@@ -271,7 +265,7 @@ interface DeviceStateSchema { ...@@ -271,7 +265,7 @@ interface DeviceStateSchema {
### 订阅状态变更 ### 订阅状态变更
```tsx ```typescript
// 订阅电池状态变化 // 订阅电池状态变化
mgr.subscribeDeviceState(sn, 'battery-status', (key, newValue, oldValue) => { mgr.subscribeDeviceState(sn, 'battery-status', (key, newValue, oldValue) => {
console.log('电池状态更新:', newValue); console.log('电池状态更新:', newValue);
...@@ -294,7 +288,7 @@ mgr.subscribeDeviceState(sn, 'recording', (key, newValue, oldValue) => { ...@@ -294,7 +288,7 @@ mgr.subscribeDeviceState(sn, 'recording', (key, newValue, oldValue) => {
### 直接读取状态 ### 直接读取状态
```tsx ```typescript
// 获取当前电池状态 // 获取当前电池状态
const battery = mgr.getDeviceState(sn, 'battery-status'); const battery = mgr.getDeviceState(sn, 'battery-status');
...@@ -307,7 +301,7 @@ const isStale = mgr.isDeviceStateStale(sn, 'battery-status', 5000); ...@@ -307,7 +301,7 @@ const isStale = mgr.isDeviceStateStale(sn, 'battery-status', 5000);
### 手动设置状态 ### 手动设置状态
```tsx ```typescript
mgr.setDeviceState(sn, 'settings', { mgr.setDeviceState(sn, 'settings', {
autoRecord: true, autoRecord: true,
autoPlay: false autoPlay: false
...@@ -318,7 +312,7 @@ mgr.setDeviceState(sn, 'settings', { ...@@ -318,7 +312,7 @@ mgr.setDeviceState(sn, 'settings', {
以下是一个完整的 React 组件示例,展示了所有核心功能的使用: 以下是一个完整的 React 组件示例,展示了所有核心功能的使用:
```tsx ```typescript
import { mgr } from './utils/mgr'; import { mgr } from './utils/mgr';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import Jensen from '../jensen'; import Jensen from '../jensen';
...@@ -540,7 +534,7 @@ export function DeviceManager() { ...@@ -540,7 +534,7 @@ export function DeviceManager() {
### 1. 为什么调用 `getInstance()` 报错? ### 1. 为什么调用 `getInstance()` 报错?
确保传入了 `userTaskTag` 参数: 确保传入了 `userTaskTag` 参数:
```tsx ```typescript
// ❌ 错误 // ❌ 错误
const jensen = mgr.getInstance(sn); const jensen = mgr.getInstance(sn);
...@@ -551,14 +545,14 @@ const jensen = mgr.getInstance(sn, userTaskTag); ...@@ -551,14 +545,14 @@ const jensen = mgr.getInstance(sn, userTaskTag);
### 2. UserTask 被自动释放了? ### 2. UserTask 被自动释放了?
UserTask 空闲超过 30 秒会被自动释放。对于长时间操作,定期调用: UserTask 空闲超过 30 秒会被自动释放。对于长时间操作,定期调用:
```tsx ```typescript
mgr.keepUserTaskAlive(sn, userTaskTag); mgr.keepUserTaskAlive(sn, userTaskTag);
``` ```
### 3. 如何知道设备断开了? ### 3. 如何知道设备断开了?
使用 `onconnectionstatechanged` 监听: 使用 `onconnectionstatechanged` 监听:
```tsx ```typescript
mgr.onconnectionstatechanged((state, dinfo) => { mgr.onconnectionstatechanged((state, dinfo) => {
if (state === 'disconnected') { if (state === 'disconnected') {
console.log('设备断开:', dinfo); console.log('设备断开:', dinfo);
...@@ -569,7 +563,7 @@ mgr.onconnectionstatechanged((state, dinfo) => { ...@@ -569,7 +563,7 @@ mgr.onconnectionstatechanged((state, dinfo) => {
### 4. 状态订阅如何取消? ### 4. 状态订阅如何取消?
`subscribeDeviceState` 返回取消函数: `subscribeDeviceState` 返回取消函数:
```tsx ```typescript
const unsubscribe = mgr.subscribeDeviceState(sn, 'battery-status', listener); const unsubscribe = mgr.subscribeDeviceState(sn, 'battery-status', listener);
// 取消订阅 // 取消订阅
...@@ -592,7 +586,7 @@ npm run build ...@@ -592,7 +586,7 @@ npm run build
### 查看设备状态快照 ### 查看设备状态快照
```tsx ```typescript
console.log(mgr.dumpDeviceState(sn)); console.log(mgr.dumpDeviceState(sn));
``` ```
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment