## 前言
ws这个文件夹下,主要是起了一个ws的服务。处理上课过程中各个客户端产生的信令。
[白板server信令处理流程](https://www.processon.com/view/link/5d22f70ee4b0f42d067b3d86)
## 建立连接
- 实例化WebSocket,监听connnection事件
- 在connection监听器中,创建一个`user`,监听每一个连接的message事件。可以认为每个连接都是一个用户。
- 根据每一个connection携带的参数,为`user`分组
## 用户分组逻辑
客户端向服务端建立连接是携带的参数:
- `identity` 用户身份
- `userId` 用户ID
- `lessonId` 课件ID,用于请求PPT信息
- `periodId` 教室ID
- `partId` 用于api请求,ws服务本身不关心
- `hash` 客户端生成的随机标识
根据用户的periodId创建lesson,可以看做一个教室,多个lesson以peridId为key保存在channelMap中,lesson的主要内容为:
- users:保存当前连接的用户
- lessonId:当前课堂内使用的PPT的Id
- pptRescorder:PPT的管理器
- hashMap:用于保存课堂内产生的所有消息的hash值
### PPTRecorder
如果`partId`、`lessonId`、`periodId`都相同的连接,共享一个PPTRecorder。
初始化时,根据`partId`、`lessonId`、`periodId`生成一个`infoKey`,同时取当前时间`startTime`作为实例初始化时间,将`{key: infoKey, value: startTime}`存入redis,如果key已存在就更新`startTime`。
`PPTRecorder `主要负责记录上课过程中产生的信令,并且当用户中途加入课堂是一次性返回已经产生的信令。
关于**保存信令**,在上课过程中,`recorder`通过`startTime`生成`recordKey`,将接收到的信令储存到redis;上课中途收到`keyframe`类型的消息,将当前记录的信令全部发送到客户端;上课结束,将redis中记录的信令持久化到数据库。
## 处理信令消息
- ws心跳
- WsMessage
- Cmd & Signal
### Cmd & Signal
这类信息是普通的JSON字符串,其中Cmd用户控制课程开始结束,Signal则是客户端发送。
**课程开始**: 创建PPTRecorder实例,记录开始时间,记录信令。
**课程结束**: 记录结束时间,将redis中的信令持久化。
### WsMessage
- `keyframe`: 将当前的信令历史发送给消息来源客户端(单播)
- `broadcast`/`media`/`animation`/`extra`/`template`: 将信令储存到redis中,同时组播类课堂内的其他用户(不包括自己)
- `startTime`: 将服务器时间发送给消息来源客户端(单播)
- `syncMedia`: 组播
- 相关资源链接
- 米乐星球小程序内调研
- 项目结构说明
- 交互课件说明
- server项目说明
- 项目说明
- 项目启动
- app.js做的事情
- 获取互动课件的地址
- 分析互动课件地址的参数
- policy目录--lesson.js
- 解析ppt--api/lesson.js
- 信令中的key:template
- 信令中的key:media
- kk-talkee-engine.js
- Message
- 课件模板页的识别过程
- 解析课件模板的源文件
- 场景与模板的对应关系
- 所有场景的基类
- choiceScence为例
- 注意事项
- ws
- online项目的说明
- online消息
- 课件编辑项目
- 资源链接
- 基本项目信息
- electron项目结构分析
- ipc
- 模板题组
- 普通题组
- 游戏题组
- 课件导出内容分析
- 课件模板分类明细
- 图片题
- 视频题
- 音频题
- 选择题
- 判断题
- 转盘
- 筛子
- 图层拖拽
- 动画题
- 翻拍题
- 语音题
- 201908变更
- 课件制作流程分析
- 菜单配置
- 入口操作
- 定义模板布局与初始化
- 选择素材
- 导出过程
- egret
- interface
- ad选择器模板
- ab选择器模板
- 图层拖拽模板
- 判断题模板
- xml
- 转盘
- events
- components
- 父类组件
- 基本组件
- 判断题组件
- 龙骨动画调研
- 基本了解
- 产品原型
- 白板Client项目
- 消息类型
- 白板项目分析
- 入口