js-common

0.0.1 • Public • Published

教室基础环境

初始化教室的步骤如下:

  1. 加载 path/classroom.js
  2. BJY.init(data)

数据

BJY.init({
    env: '环境,可选值 test/beta/production',
    token: '验证 token',
    class: {
        id: 'room id',
        name: '课程名称',
        startTime: '开始时间,精确到毫秒的时间戳',
        endTime: '结束时间,精确到毫秒的时间戳'
    },
    user: {
        number: '用户 number',
        avatar: '头像地址',
        name: '用户昵称',
        type: '用户类型 0-学生 1-老师 2-助教'
    },
    teacher: {
        number: '老师 number',
        avatar: '头像地址',
        name: '老师昵称',
        type: 1
    }
});

mock

满足以下要求即可上课:

  1. env 相同
  2. room id 相同
  3. teacher 只能有一个

登录进度

调用 init 之后,会尝试去连接主服务器、信令服务器。

在连接的过程中,教室不可用,为了保证良好的用户体验,通常会设计一个全屏的进度条界面。

var eventEmitter = BJY.eventEmitter;
eventEmitter
.one(
    eventEmitter.MASTER_SERVER_CONNECT_SUCCESS,
    function () {
        // 主服务器连接成功
    }
)
.one(
    eventEmitter.SERVER_INFO_FETCH_SUCCESS,
    function () {
        // 从主服务器获取服务器信息成功
    }
)
.one(
    eventEmitter.ROOM_SERVER_CONNECT_SUCCESS,
    function () {
        // 信令服务器连接成功
    }
)
.one(
    eventEmitter.ROOM_SERVER_LOGIN_SUCCESS,
    function () {
        // 信令服务器登录成功
        // 到此表示成功进入教室
    }
)
.one(
    eventEmitter.ROOM_SERVER_LOGIN_FAIL,
    function (event, data) {
        // 信令服务器登录失败
    }
)
.one(
    eventEmitter.ROOM_SERVER_LOGIN_OVERFLOW,
    function(event,data) {
        // 信令服务器已满,无法登录
    }
)
.one(
    eventEmitter.CLASSROOM_CONNECT_FAIL,
    function () {
        // 超时、或其他原因导致的失败
    }
);

初始化界面

var eventEmitter = BJY.eventEmitter;
eventEmitter
.one(
    eventEmitter.VIEW_RENDER_TRIGGER,
    function (event, data) {
        // 成功进入教室后,会触发此事件告知调用方初始化界面
    }
);

重连

因为网络环境的问题,教室可能中途掉线,因此当发生重连时,需提示用户。

var eventEmitter = BJY.eventEmitter;
eventEmitter
.on(
    eventEmitter.CLASSROOM_CONNECT_SUCCESS,
    function (event, data) {
        // 可能发生多次 CLASSROOM_CONNECT_SUCCESS 事件
        // data.reconnect 为 true 表示重连后的再次进入
    }
)
.on(
    eventEmitter.CLASSROOM_CONNECT_START,
    function (event, data) {
        if (data.reconnect) {
            // 可提示用户正在重连
        }
    }
)
.on(
    eventEmitter.CLASSROOM_CONNECT_END,
    function (event, data) {
        if (data.reconnect) {
            // 可提示用户重连结束
        }
    }
);

人数

进教室总人数(包括退出教室的)

var eventEmitter = BJY.eventEmitter;
eventEmitter
.on(
    eventEmitter.TOTAL_USER_COUNT_CHANGE,
    function (event, data) {
        // data.totalUserCount
    }
);

当前教室人数

var eventEmitter = BJY.eventEmitter;
eventEmitter
.on(
    eventEmitter.USER_COUNT_CHANGE,
    function (event, data) {
        // data.userCount
    }
);

名单

在一个教室中,有人进,也会有人出,因此 SDK 提供了以下三个事件:

var eventEmitter = BJY.eventEmitter;
eventEmitter
.on(
    eventEmitter.USER_ADD
    function (event, data) {
        // data.userList 为了批量添加考虑设计成数组
    }
)
.on(
    eventEmitter.USER_UPDATE
    function (event, data) {
        // data.user
        // data.update 更新的部分
    }
)
.on(
    eventEmitter.USER_REMOVE
    function (event, data) {
        // data.user
    }
);

消息

消息抽象为收发两个动作,通过频道参数,可自由实现为不同的功能,如聊天、问答。

发消息

var eventEmitter = BJY.eventEmitter;
eventEmitter.trigger(
    eventEmitter.MESSAGE_SEND,
    {
        content: '',
        channel: '频道'
    }
);

收消息

var eventEmitter = BJY.eventEmitter;
eventEmitter.on(
    eventEmitter.MESSAGE_RECEIVE,
    function (event, data) {
        // data 里包含频道、消息内容、发送者信息
    }
);

公告

请求现有的公告

var eventEmitter = BJY.eventEmitter;
eventEmitter.trigger(
    eventEmitter.NOTICE_REQ,
);

收到现有的公告

var eventEmitter = BJY.eventEmitter;
eventEmitter.on(
    eventEmitter.NOTICE_RES,
    function (event, data) {
        // data 里有公告内容
    }
);

修改公告

var eventEmitter = BJY.eventEmitter;
eventEmitter.trigger(
    eventEmitter.NOTICE_CHANGE_TRIGGER,
    {
        content: ''
    }
);

收到最新修改的公告

var eventEmitter = BJY.eventEmitter;
eventEmitter.on(
    eventEmitter.NOTICE_CHANGE,
    function (event, data) {
        // data 里有消息内容和发送者信息
    }
);

Readme

Keywords

none

Package Sidebar

Install

npm i js-common

Weekly Downloads

0

Version

0.0.1

License

BSD

Last publish

Collaborators

  • musicode