初始化教室的步骤如下:
- 加载
path/classroom.js
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
}
});
满足以下要求即可上课:
- env 相同
- room id 相同
- 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 里有消息内容和发送者信息
}
);