企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 一类消息 - [WsMessage](#ws_message) - [Cmd](#cmd) - [Signal](#signal) ### Cmd <a id="cmd"></a> ```javascript { type: "cmd", hash: "", key: "" // show_control_panel_from_native // lesson_begin // ppt_finish } ``` ### Signal <a id="signal"></a> `Signal`消息白板不作处理,接受的消息转发到客户端,提供发送接口供客户端调用。 ```javascript { type: "signal", hash: "", payload: "" } ``` ### WsMessage <a id="ws_message"></a> ```javscript { hash: string, // 消息的唯一标识 key: string, // message的名称 pageIndex: number, // 消息所属的课件页码 // 消息体 extra: string, stime: string, time: number, [message]<T: IMessage>: T // 其他的消息类 } ``` **IMessage**的类型: - [KeyFrameMessage](#keyframe) - [BroadcastMessage](#broadcast) - [Connection](#connection) - TemplateMessage - [MediaMessage](#media) - [SyncMediaMessage](#media) - AnimationMessage - SyncObjectMessage 未使用 - PluginMessage 未使用 #### KeyFrameMessage <a id="keyframe"></a> 记录所有的消息,用于同步当前白板状态(中途进入教室、回放),白板客户端仅接受不发出(白板初始化时会发出一个空的`KeyFrame`消息用以请求当前的白板状态)。 ```javascript { hash: "", key: "keyframe", pageIndex: 0, keyframe: { currentKeyFrame: string // 压缩过的 } } ``` ### BroadcastMessage <a id="broadcast"></a> 所有工具面板产生的消息。 ```javascript { hash: "", key: "broadcast", broadcast: { hashKey: string, action: string, cid: string, owner: string, pageName: string, // 所在课件页的名字/页码 toolName: string, // 面板工具的名字 type: string, data: string, // JSON.Stringify targetCid: string, mode: number } } ``` #### 消息触发者: - 激光笔 ```javascript // 选中激光笔 { hashKey: "", action: "pointer-start", data: {x: 0, y: 0} // 或者为上次激光笔最后的坐标 } // 移动激光笔 { hashKey: "", action: "pointer-move", data: {x: 0, y: 0} // 100ms发送一次,为触发时最后的坐标 } // 选中其他工具(取消选中激光笔) { hashKey: "", action: "pointer-end" } ``` - 画笔 ```javascript // 鼠标按下 { hashKey: "", cid: "", key: "broadcast", type: "component.ToolEvent.tool_update", toolName: "Component.Graphics", owner: "", // 当前用户ID mode: 10, // 笔画类型:曲线、直线等 pageName: "", // 当前课件页名称 action: "Component.ToolEvent.Actions.start", data: "" // color、thickness、startX、startY } // 鼠标移动 { hashKey: "", cid: "", key: "broadcast", type: "component.ToolEvent.tool_update", toolName: "Component.Graphics", owner: "", // 当前用户ID mode: 10, // 笔画类型:曲线、直线等 pageName: "", // 当前课件页名称 action: "Component.ToolEvent.Actions.updating", data: "" // {x, y} or [[x, y], ...] } // 鼠标抬起 { hashKey: "", cid: "", key: "broadcast", type: "component.ToolEvent.tool_update", toolName: "Component.Graphics", owner: "", // 当前用户ID mode: null, // 笔画类型:曲线、直线等 pageName: "", // 当前课件页名称 action: "Component.ToolEvent.Actions.end", data: "" // 之前的mode } ``` - 文本 ```javascript // 鼠标按下 插入光标 { hashKey: "", cid: "", key: "broadcast", type: "component.ToolEvent.tool_update", toolName: "Component.TextInput", owner: "", // 当前用户ID mode: null, pageName: "", // 当前课件页名称 action: "Component.ToolEvent.Actions.start", data: "" // fontSize、textColor、x、y } // 输入 { hashKey: "", cid: "", key: "broadcast", type: "component.ToolEvent.tool_update", toolName: "Component.TextInput", owner: "", // 当前用户ID mode: null, pageName: "", // 当前课件页名称 action: "Component.ToolEvent.Actions.updating", data: "" // text、width // width 为字体所占宽度和最大宽度中较小的一个,防止文本超出课件范围 } // 选中其他工具 { hashKey: "", cid: "", key: "broadcast", type: "component.ToolEvent.tool_update", toolName: "Component.TextInput", owner: "", // 当前用户ID mode: null, pageName: "", // 当前课件页名称 action: "Component.ToolEvent.Actions.end", data: null } ``` - 撤销 ```javascript { hashKey: "", key: "broadcst", pageName: "", targetCid: "", // 针对哪一个动作撤销 toolName: "undo", type: "Control.once_do" } ``` - 删除 ```javascript { hashKey: "", key: "broadcst", pageName: "", toolName: "clear", type: "Control.once_do" } ``` - 放大镜 ```javascript // 放大、缩小、重置 { hashKey: "", action: "zoom", data: "" // 缩放倍数 } // 放大情况下移动 { hashKey: "", action: "zoom-move", data: "" // {x, y} 中心点相对于舞台的坐标 } ``` - 白板(草稿) ```javascript // 显示、隐藏草稿 { hashKey: "", action: "Draft.Enable" | "Draft.Disable" } ``` - 翻页 ```javascript { hashKey: "", key: "broadcast", pageName: "", // 新一页的名称 type: "Component.FlipEvent.pageChange" } ``` ### MediaMessage & SyncMediaMessage <a id="media"></a> 视频相关事件。包括视频选择面板中选中的视频和课件内嵌的视频。 其中,`SyncMediaMessage`用于表示当前视频的状态,一般在学生端一个媒体类型的课件初始化时,会发送一个空的`SyncMediaMessage`,服务端返回当时的课件状态用以同步,和`KeyFrame`用法类似。 ```javascript // MediaMessage { hash: "", key: "media", pageIndex: 0, media: { objectId: string, // 视频ID payload: string, // 进度、音量等 state: number // 0-开始 1-暂停 2-停止(关闭视频插件) 3-重置 4-跳转进度 5-播放完成(回放) 6-音量 } } // SyncMediaMessage { hash: "", key: "syncMedia", pageIndex: 0, syncMedia: { objectId: string, // 视频ID paused: boolean, // 是否暂停 position: number, // 播放进度 volume: number // 音量大小 }} } ``` ### Connection <a id="connection"></a> 每当服务端一个新的socket链接创建,或者一个连接断开,向班级里所有的连接广播一个`Connection`消息。 ```javascript { hash: "", key: "connection", connection: { identity: "", // 身份 state: 0, // 0-连接 1-断开 userId: "" } } ``` ### 其他Message - StartTime 白板初始化时会发送一个空的StartTime消息,来请求本节课开始的时长等信息。 ```javascript { key: "startTime", stime: string, // 服务器时间 time: number // 本节课进行时长 -1表示未开始 } ```