远程教学之流程消息.md 4.75 KB

返回在线授课相关文档

流程描述

  • 客户端在启动的时候,登录腾讯通信云服务,登录后记录状态。在用户登出的的时候,同时登出腾讯通信云服务。
  • 教师根据课表打开课程,选择远程教学模式进入,开始远程授课,
    • 如果当前登录成功,则教师向服务器申请本次上课所需要的公开群信息和音视频Room的信息(a)。
    • 如果当前未登录成功,则再次尝试登录,登录成功后,执行(a)
    • 登录不成功,则提示用户,服务当前不可用。请退出重试,或者联系我们。
  • 教师创建公开群,并且进入音视频房间,进入后通知盒子鱼服务器通知给相应的学生
  • 学生接到通知后选择同意,加入公开群,并且进入音视频房间。
    • 如果学生加入群成功,教师端应该能收到有人入群的系统消息
    • 如果学生之前已经加入过此群,则通过自定义消息把自己的id信息发送到群里。
    • 以上两种情况,教师端都可以获取到学生的id信息,判断对方是本课合法邀约的学生,则开始上课的过程
  • 教师下放本次课程所需要的资源信息。
  • 学生端检查是否已经下载完全部的资源, 如果未下载则进行下载,下载完通知给教师端。 (或者在学生已经确定上哪一课的时候,由后台先偷偷下载一批, 但是上课的时候,仍然需要再次检查)
  • 教师端收到学生端资源齐备的消息后,进入课程,开始上课,同时通知给服务器上课开始了,同时发送各种控制消息。
  • 学生端收到控制消息后,展现相应的课程内容,在教师允许学生回答的时候,可以进行答题操作
  • 教师结束课程,上报给服务器,同时回到书架或者课表页面。学生则回到课表页面。

以上为开发第一阶段的流程设计。

  • 第一阶段,服务器只负责公共群和音视频房间的信息管理
  • 第二阶段,服务器可以通过腾讯云通信IM的API进行更多的控制工作,例如公共群和音视频房间的创建可以由服务器进行。

在线授课接口定义

在线授课接口定义

流程消息定义

  • 学生上报自己的用户Id
    • 学生收到推送之后,根据推送的信息,加入到指定的群。
    • 如果该学生之前已经加入过该群,则加群之后会返回已经入群的错误码,学生可以发送自定义消息告诉教师,自己已经入群。
    • 如果该学生第一次入群,把申请消息设置为自己的id,则教师端会收到有用户入群的消息,根据消息内容判断是否允许入群。

学生端上报Id的自定义消息

{
  "type":"flow",
  "command":"reportId",
  "id":"17293"
}
  • 下发课程资源信息与教师端元数据(教师端动作)
    • 学生端根据老师端的版本信息,判断自己的版本是否和老师的版本相匹配,如果不匹配则提示更新。
    • 如果匹配则进入下载资源的流程
{
  "type":"flow",
  "command":"prepareCourse",
  "screenWidth":1024,
  "screenHeight":768,
  "device":"ios"
  "appVersion":"6.6.0"
  "courseName":"英雄是怎样炼成的"
  "attachmentType":"smallFile"
}

附属的小文件是一个Json格式的资源列表

[
95d8ca1ca0c5209bd75a4c2181f8609d,
7b251f924497500ed26428342a815d1b,
45bc7b7e7828020eaa016674327d5dff,
53f086e895518ee3b488404620117d56,
fc5545a9a728904dc533efcbfff1d2c5,
7b251f924497500ed26428342a815d1b
]
  • 学生端开始下载课程所需要的资源(学生端动作) 如果学生端需要下载资源,则发送此消息。如果检查到无须下载新的资源,则不发送此消息。

    {
    "type":"flow",
    "command":"beginDownloadCourseResources"
    }
    
  • 学生端已经下载好课程所需要的资源(学生端动作) 检测到本地已经下载好了全部的课程所需资源后,通知给教师端。

    {
    "type":"flow",
    "command":"downloadedAllCourseResources"
    }
    
  • 发送课程页信息(教师端动作)

    {
    "type":"flow",
    "command":"coursePage",
    "attachmentType":"smallFile"
    }
    

    附属的小文件是一个Json格式的页面信息 (考虑到将来如果页面比较复杂,或者附加了比较长的文章,可能出现当个页面信息过长,不适合发送自定义信息的情况)

{
    "pageInfo" : 页面Json信息
    "swipeDirection" : 0 (0-左滑 1-右滑)
    "coursePageType" : 0 (这个值主要是为了兼容本地双屏功能用的,这里固定填写0就可以了)
}
  • 结束课程(教师端动作)

    {
    "type":"flow",
    "command":"endCourse"
    }
    
  • 学生上报结束课程

    {
    "type":"flow",
    "command":"endCourse"
    }
    

    教师端收到此信息后解散群