UNPKG

@plasosdk/client-sdk

Version:

Plaso教育平台的客户端SDK

410 lines (310 loc) 12.9 kB
# Plaso Client SDK 这是一个用于快速集成Plaso教育平台的SDK。通过简单的API调用,您可以轻松地在您的应用中嵌入Plaso的作业和课堂功能。该SDK内置了所有必要的依赖,无需额外安装React等库。 ## 特点 - **完全独立**: SDK包含所有所需依赖,不需要外部引入React - **简单集成**: 只需提供一个DOM容器元素即可渲染Plaso内容 - **多环境支持**: 支持Web应用和Electron应用 - **多种功能**: 支持作业、课堂等多种内容类型 - **事件系统**: 提供完整的事件监听机制,支持应用重启、错误处理等事件 - **资源模块**: 支持创建和管理各种资源模块 ## 安装 ```bash npm install @plasosdk/client-sdk npm install @plasosdk/plaso-electron-sdk npm install fluent-ffmpeg@2.1.3 npm install ffmpeg-static@5.2.0 ``` ## 在Electron项目中使用 在Electron项目中,您需要进行以下配置: 1. 在main.js中启用webview,初始化@plasosdk/client-sdk: ```javascript const { app, BrowserWindow } = require('electron') const remoteMain = require('@electron/remote/main'); const { init } = require('@plasosdk/client-sdk/electron'); remoteMain.initialize(); // 初始化Plaso Electron功能,并获取事件发射器 const plasoEvents = init(remoteMain); // 监听应用是否token过期 plasoEvents.on('relaunch', (args) => { // 可以做一些事情 }); ``` 2. 在渲染进程中使用: ```javascript import { PlasoClient } from '@plasosdk/client-sdk'; const plasoClient = new PlasoClient({ token: 'your-token-here', container: document.getElementById('plaso-container') }); // 初始化作业模块 plasoClient.createAssignment(); // 初始化课堂模块 plasoClient.createClassroom(); // 初始化资源模块 - 会打开新的资源页面 plasoClient.createResource(); ``` ## 事件系统 SDK提供了完整的事件系统,支持监听各种应用事件: ### 事件发射器 通过`init()`函数返回的事件发射器,您可以监听以下事件: ```javascript const plasoEvents = init(remoteMain); // 监听应用重启事件 plasoEvents.on('relaunch', (args) => { console.log('应用重启事件触发,参数:', args); // 执行重启逻辑 }); // 监听错误事件 plasoEvents.on('error', (error) => { console.error('SDK错误:', error); // 处理错误 }); // 监听资源模块创建事件 plasoEvents.on('module-created', (moduleInfo) => { console.log('资源模块已创建:', moduleInfo); // 处理模块创建后的逻辑 }); ``` ### 支持的事件类型 | 事件名 | 描述 | 参数 | |--------|------|------| | `relaunch` | 应用重启事件 | `args: any[]` - 重启参数 | | `error` | 错误事件 | `error: Error` - 错误对象 | | `module-created` | 资源模块创建事件 | `moduleInfo: object` - 模块信息 | | `window-opened` | 新窗口打开事件 | `windowInfo: object` - 窗口信息 | ## 资源模块 SDK支持创建和管理各种资源模块,每个模块都有独立的功能和生命周期: ### 创建资源模块 ```javascript // 创建作业模块 await plasoClient.createModule(PlasoContentType.NHOMEWORK); // 创建课堂模块 await plasoClient.createModule(PlasoContentType.LIVECLASS); // 创建自定义模块 await plasoClient.createModule(PlasoContentType.MAIN); // 创建资源模块 - 会打开一个新的页面 await plasoClient.createModule(PlasoContentType.RESOURCES); ``` ### 模块生命周期管理 ```javascript // 创建模块 const module = await plasoClient.createModule(PlasoContentType.NHOMEWORK); // 监听模块事件 plasoEvents.on('module-created', (moduleInfo) => { console.log('模块已创建:', moduleInfo.type, moduleInfo.id); }); // 销毁模块 plasoClient.destroy(); ``` ### 资源模块类型 SDK支持以下资源模块类型: - **NHOMEWORK**: 作业模块 - 用于显示和管理作业内容 - **LIVECLASS**: 课堂模块 - 用于在线课堂功能 - **MAIN**: 主模块 - 主页面内容 - **RESOURCES**: 资源模块 - 打开新的资源页面,用于资源管理和展示 ## API 文档 ### PlasoClient #### 构造函数参数 | 参数名 | 类型 | 必填 | 描述 | |--------|------|------|------| | token | string | 是 | Plaso平台的认证令牌 | | container | HTMLElement | 是 | 用于渲染内容的DOM容器元素 | | sdkVersion | string | 是 | SDK的版本号,用于标识当前使用的SDK版本 | | platform | string | 否 | 平台标识,默认为'plaso',用于区分不同的平台环境 | | env | Environment | 否 | 环境配置,可选值:PROD(生产环境)、TEST(测试环境)等 | | onError | (error: Error) => void | 否 | 错误处理回调函数 | | onLoading | (isLoading: boolean) => void | 否 | 加载状态回调函数 | | devTools | boolean | 否 | 是否打开开发者工具,默认为false | #### 方法 ##### createModule(module: PlasoContentType): Promise<void> 创建一个指定类型的模块。这是最通用的方法,可以用于创建任何支持的内容类型。 ##### createAssignment(): Promise<void> 创建一个作业页面。内部调用`createModule(PlasoContentType.NHOMEWORK)`。 ##### createClassroom(): Promise<void> 创建一个课堂页面。内部调用`createModule(PlasoContentType.LIVECLASS)`。 ##### createResources(): Promise<void> 创建一个资源页面。内部调用`createModule(PlasoContentType.RESOURCES)`。这个模块会打开一个新的页面用于资源管理和展示。 ##### renderCustomContent(type: PlasoContentType): Promise<void> 渲染自定义内容,可以用于渲染其他类型的内容。内部调用`createModule(type)`。 ##### destroy(): void 销毁客户端实例,清理资源。 ### PlasoContentType 内容类型枚举,用于指定要渲染的内容类型。 ```typescript export enum PlasoContentType { NHOMEWORK = 'nhomework', LIVECLASS = 'liveclass', MAIN = 'main', RESOURCES = 'resources' // 后期可以在这里添加更多类型 } ``` ### Electron API SDK提供了专用的Electron模块,支持特定的Electron功能: ```typescript // 从electron入口导入 import { init } from '@plasosdk/client-sdk/electron'; // 或使用require const { init } = require('@plasosdk/client-sdk/electron'); ``` #### 方法 ##### init(remoteMain: any): EventEmitter 初始化Electron相关功能,设置IPC通信以支持以下功能: - 音频格式转换 (WAV到MP3) - 系统进程获取 - 应用重启 - Electron远程模块支持 - 新窗口管理 **返回值**: 返回一个EventEmitter实例,用于监听各种事件。 **参数**: - `remoteMain`: Electron远程模块的主进程实例 **使用示例**: ```javascript const { app, BrowserWindow } = require('electron'); const remoteMain = require('@electron/remote/main'); const { init } = require('@plasosdk/client-sdk/electron'); remoteMain.initialize(); // 初始化并获取事件发射器 const plasoEvents = init(remoteMain); // 监听应用重启事件 plasoEvents.on('relaunch', (args) => { console.log('应用重启事件触发,参数:', args); app.relaunch(args); app.exit(); }); // 监听错误事件 plasoEvents.on('error', (error) => { console.error('SDK错误:', error); }); // 监听资源模块创建事件 plasoEvents.on('module-created', (moduleInfo) => { console.log('资源模块已创建:', moduleInfo); }); // 监听新窗口打开事件 plasoEvents.on('window-opened', (windowInfo) => { console.log('新窗口已打开:', windowInfo); }); ``` #### 事件类型 | 事件名 | 描述 | 参数 | 触发时机 | |--------|------|------|----------| | `relaunch` | 应用重启事件 | `args: any[]` - 重启参数 | 当应用需要重启时 | | `error` | 错误事件 | `error: Error` - 错误对象 | 当SDK发生错误时 | | `module-created` | 资源模块创建事件 | `moduleInfo: object` - 模块信息 | 当资源模块创建完成时 | | `window-opened` | 新窗口打开事件 | `windowInfo: object` - 窗口信息 | 当新窗口打开时 | #### IPC通信接口 SDK还提供了以下IPC通信接口,可在渲染进程中使用: ```javascript // 音频格式转换 const { ipcRenderer } = require('electron'); const result = await ipcRenderer.invoke('convert-audio', { inputPath: '/path/to/input.wav', outputPath: '/path/to/output.mp3' }); // 获取系统进程 const processes = await ipcRenderer.invoke('getSystemProcess', 'win'); // 或 'mac' // 打开新窗口 const windowInfo = await ipcRenderer.invoke('open-new-window', { url: 'https://example.com', width: 800, height: 600, frameless: false, modal: false, parentWindowId: parentWindow.id }); // 存储操作 const value = await ipcRenderer.invoke('getStoreValue', 'key'); await ipcRenderer.invoke('setStoreValue', 'key', 'value'); ``` ## 错误处理 SDK提供了完善的错误处理机制: 1. 错误回调:通过onError回调函数获取详细错误信息 2. 加载状态:通过onLoading回调函数监控加载状态 3. 错误展示:在UI中展示友好的错误提示 ## 注意事项 1. 确保在使用前已经获取了有效的Plaso平台认证令牌 2. 容器元素必须具有明确的宽高设置 3. 所有异步操作都返回Promise,可以使用async/await处理 4. 在Electron环境中使用时,确保已正确配置webview支持 ## 示例 ```javascript // 在任何JS文件或框架中使用 const { PlasoClient, PlasoContentType } = require('@plasosdk/client-sdk'); // 或使用ES模块语法 // import { PlasoClient, PlasoContentType } from '@plasosdk/client-sdk'; // 创建容器元素 const container = document.getElementById('plaso-container'); if (!container) { console.error('容器元素不存在'); return; } // 设置容器样式 container.style.width = '100%'; container.style.height = '600px'; // 初始化客户端 const client = new PlasoClient({ token: 'your-token-here', container: container, sdkVersion: '1.53.409', // 指定SDK版本 platform: 'plaso', // 指定平台 onError: (error) => { console.error('Plaso error:', error); // 显示错误信息 container.innerHTML = `<div style="color: red;">错误: ${error.message}</div>`; }, onLoading: (loading) => { console.log('加载状态:', loading); // 可以显示加载指示器 } }); // 使用通用方法创建作业 client.createModule(PlasoContentType.NHOMEWORK) .catch(error => { console.error('创建作业失败:', error); }); // 使用前记得在不需要时销毁实例 // client.destroy(); ``` ## 变更日志 ### 3.0.16 - 新增事件系统,支持监听应用重启、错误处理、资源模块创建等事件 - 新增资源模块管理功能,支持创建和管理各种类型的资源模块 - 新增RESOURCES资源模块类型,会打开新的资源管理页面 - 优化init函数返回值,现在返回EventEmitter实例用于事件监听 - 新增IPC通信接口文档,包括音频转换、系统进程获取、窗口管理等 - 完善事件类型文档,提供详细的事件参数和触发时机说明 ### 3.0.1 - 优化了SDK的独立性,确保用户不需要安装额外的React依赖 - 改进了文档,更清晰地说明SDK的使用方式 ### 1.0.30 - 添加了专用的Electron模块,可通过`@plasosdk/client-sdk/electron`导入 - 实现了双入口打包,分离React客户端和Electron主进程功能 - 新增音频格式转换功能(WAV转MP3) - 新增系统进程获取功能 - 优化了Electron远程模块的支持 ### 1.0.12 - 修复了依赖安装问题 ### 1.0.7 - 添加了统一的`createModule`方法,使用module作为入参 - 重构了现有方法,使它们调用新的`createModule`方法 - 更新了PlasoContentType枚举,使用更准确的类型名称 - 优化了API文档和示例代码 ### 1.0.6 - 优化了webview支持检测,更准确地识别Electron环境 - 移除了加载中的提示UI,使界面更加简洁 - 保留了加载状态变量,以便在需要时仍然可以跟踪加载状态 ### 1.0.5 - 添加了PlasoContentType枚举,支持更多内容类型 - 添加了renderCustomContent方法,支持渲染自定义内容 - 优化了错误提示,全部改为中文 - 使用React 18推荐的createRoot API - 通过URL参数传递token,而不是使用localStorage ### 1.0.0 - 初始版本发布 - 支持作业和课堂功能 - 提供错误处理和加载状态回调 ## 开发计划 - [ ] 支持自定义主题 - [ ] 添加更多交互事件回调 - [ ] 支持移动端适配 - [ ] 添加加载状态提示