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

doc: 完善文档

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