李勇

1.增加开启是否可以使用标注功能的接口;2.答题卡模块修改查询结果的间隔;

... ... @@ -58,7 +58,7 @@ export default class MessageEntrance extends Emiter {
constructor() {
super();
//sdk 信息
GlobalConfig.sdkVersion = "v1.66.1.20170809";
GlobalConfig.sdkVersion = "v1.67.2.20170811";
loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
//获取设备和系统信息
... ... @@ -171,10 +171,9 @@ export default class MessageEntrance extends Emiter {
this.controlSilenceStatus = this._controlSilenceStatus.bind(this); //改变禁言状态
this.sceneTableChange = this._sceneTableChange.bind(this); //切换模块显示
this.kickOutRosterFormNodeId = this._kickOutRosterFormNodeId.bind(this); //把指定nodeId的人踢出课堂
this.sendThridChannelMessage = this._sendThridChannelMessage.bind(this);//通道第三方消息通道发送消息
this.changeDrawStatus = this._changeDrawStatus.bind(this);//切换绘制状态
//录制回放
this.initRecordPlayback = this._initRecordPlayback.bind(this);
... ... @@ -1329,6 +1328,17 @@ export default class MessageEntrance extends Emiter {
}
}
//控制课堂全局是否可绘制的状态
_changeDrawStatus(_param){
if (!_mcu.connected) {
loger.warn(GlobalConfig.getCurrentStatus());
return;
}
if (_confer_ape) {
_confer_ape.changeDrawStatus(_param);
}
}
//暂停上课
_sendPauseClass(_param) {
if (!_mcu.connected) {
... ... @@ -2192,7 +2202,7 @@ export default class MessageEntrance extends Emiter {
//音乐共享模块加入频道成功,同步到MCU服务器上的数据
musicShareApeJoinChannelSuccess() {
loger.log("伴音MUSIC模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.musicListPrepare.length);
console.log("伴音MUSIC模块共享模数据->", GlobalConfig.musicListPrepare);
//console.log("伴音MUSIC模块共享模数据->", GlobalConfig.musicListPrepare);
//如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
if (GlobalConfig.isHost && GlobalConfig.musicListPrepare.length > 0) {
for (let i = 0; i < GlobalConfig.musicListPrepare.length; i++) {
... ... @@ -2218,7 +2228,7 @@ export default class MessageEntrance extends Emiter {
//媒体共享模块加入频道成功,同步到MCU服务器上的数据
mediaShareApeJoinChannelSuccess() {
loger.log("媒体共享模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.sharedMediaList.length);
console.log("媒体共享模数据->", GlobalConfig.sharedMediaList);
//console.log("媒体共享模数据->", GlobalConfig.sharedMediaList);
//如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
if (GlobalConfig.isHost && GlobalConfig.sharedMediaList.length > 0) {
for (let i = 0; i < GlobalConfig.sharedMediaList.length; i++) {
... ...
... ... @@ -81,6 +81,7 @@ class GlobalConfig {
classStatusInfo.classBeginTime = this.classBeginTime; //课堂创建的时间,这个是Sass返回的
classStatusInfo.classEndTime = this.classEndTime; //课堂结束的时间,这个是Sass返回的
classStatusInfo.isEnableDraw = this.isEnableDraw; //当前是否开启绘制权限
classStatusInfo.recordStatus = this.recordStatus; //当前录制状态
classStatusInfo.silence = this.silence; //当前课堂禁言状态
classStatusInfo.silenceUsers = this.silenceUsers; //当前课堂禁言状态
... ... @@ -140,6 +141,7 @@ class GlobalConfig {
this.recordDownloadUrl = data.recordDownloadUrl || this.recordDownloadUrl; //下载地址
this.currentSceneTableId = data.currentSceneTableId || 0; //文档区域的模块显示
this.isEnableDraw=data.isEnableDraw||false;//是否开启所有人的绘制权限
// 全局禁言状态
this.silence = data.silence || false;
this.silenceUsers =data.silenceUsers || {};
... ... @@ -486,6 +488,7 @@ GlobalConfig.classTimestamp = 0; //从课堂开始到现在的时
GlobalConfig.classJoinSuccess = false; //是否已经加入课堂
GlobalConfig.recordPlaybackMaxTime = 0; //录制回放的总时间
GlobalConfig.recordStatus = false; //当前录制状态
GlobalConfig.isEnableDraw = false; //当前所有人是否开启绘制状态(老师除外)
GlobalConfig.silence = false; //当前课堂禁言状态
GlobalConfig.silenceUsers = {}; //当前课堂用户禁言状态
GlobalConfig.selfSilence = {}; //当前课堂禁言状态
... ...
... ... @@ -118,7 +118,7 @@ class LogManager {
let item = this.allLogList.shift();
if (item) {
tempArr.push(item);
msgData += item + " \n ";
msgData += item + "\n ";
}
}
... ... @@ -164,11 +164,16 @@ class LogManager {
//计算当前服务器时间
static getCurrentDateTime() {
let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间
/* let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间
let timeStr = new Date(currentServerTime).toLocaleString();
if (timeStr) {
timeStr = timeStr.replace(/年|月/g, "-").replace(/日/g, " ");
}
return timeStr;*/
let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间
let time=new Date(currentServerTime);
//显示格式20170729 16:42:00 INFO _msg
let timeStr = time.getFullYear()+"-"+(time.getMonth()+1)+"-"+time.getDate()+" "+time.getHours()+":"+time.getMinutes()+":"+time.getSeconds();
return timeStr;
}
}
... ...
... ... @@ -69,7 +69,7 @@ export default class Ape extends Emiter {
//停止APE一切操作
stopApe() {
loger.log("stopApe==============================");
// loger.log("stopApe==============================");
}
// 消息处理
... ... @@ -243,23 +243,23 @@ export default class Ape extends Emiter {
_joinChannelHandler(data) {
let joinedChannel = pdu['RCChannelJoinResponsePdu'].decode(data);
if (joinedChannel.result === pdu.RET_SUCCESS) {
loger.log(this._session_name, ' -> 加入Channel成功. ChannelId', joinedChannel.requestedChannelId);
//loger.log(this._session_name, ' -> 加入Channel成功. ChannelId', joinedChannel.requestedChannelId);
this._session_channels[joinedChannel.requestedChannelId] = ApeConsts.CJS_JOINNED;
this.onJoinChannelHandlerSuccess();
} else {
loger.log(this._session_name, ' -> 加入Channel失败.', joinedChannel);
loger.warn(this._session_name, ' -> 加入Channel失败.', joinedChannel);
}
}
// 依赖的课堂创建完毕 - 发起Ape加入
_mcuConferenceJoinSuccessHandler(_data) {
loger.log('创建Ape->',
'SessionId',
this._session_id,
'SessionName',
this._session_name,
'SessionTag',
this._session_tag);
//loger.log('创建Ape->',
// 'SessionId',
// this._session_id,
// 'SessionName',
// this._session_name,
// 'SessionTag',
// this._session_tag);
// 课堂依赖底层课堂信息
//this._classInfo = classInfo;
... ...
... ... @@ -355,10 +355,23 @@ class ConferApe extends Ape {
}
this.sendUpdaterClassStatusInfo(params);
} else {
loger.warn('老师/监客拥有改权限');
loger.warn('学生没有开启禁言的权限');
}
}
//全局绘制权限控制
changeDrawStatus(params){
if (!GlobalConfig.isNormal) {
//同步禁言状态
if (params && params.isEnableDraw == true) {
GlobalConfig.isEnableDraw = true;
} else {
GlobalConfig.isEnableDraw = false;
}
this.sendUpdaterClassStatusInfo(params);
} else {
loger.warn('学生没有开启绘制的权限');
}
}
//开始上课
startClass(_param) {
if (GlobalConfig.isHost) {
... ... @@ -1070,6 +1083,7 @@ class ConferApe extends Ape {
classStatusInfo.currentSceneTableId = GlobalConfig.currentSceneTableId;
classStatusInfo.silence = GlobalConfig.silence;
classStatusInfo.silenceUsers = JSON.stringify(GlobalConfig.silenceUsers);
classStatusInfo.isEnableDraw = GlobalConfig.isEnableDraw;
//loger.log("classStatusInfo--->", classStatusInfo);
/*
... ...
... ... @@ -296,7 +296,7 @@ class DocApe extends Ape {
_docPackFullInfo(_itemDataInfo){
let itemDataInfo=_itemDataInfo;
let getDocAddress=this.getDocFullAddress(_itemDataInfo);
loger.log('docPackFullInfo->', itemDataInfo);
//loger.log('docPackFullInfo->', itemDataInfo);
if(getDocAddress.code==ApeConsts.RETURN_SUCCESS){
itemDataInfo.images=getDocAddress.docFullAddress.images||[];
itemDataInfo.pdf=getDocAddress.docFullAddress.pdf||"";
... ... @@ -545,9 +545,10 @@ class DocApe extends Ape {
if (itemDataInfo.visible == "true" || itemDataInfo.visible == true) {
GlobalConfig.activeDocId = itemDataInfo.itemIdx;//当前激活的文档ID
GlobalConfig.activeDocCurPage = itemDataInfo.curPageNo;//当前激活的文档的当前页
loger.log('添加文档->设置当前激活的文档id');
//loger.log('添加文档->设置当前激活的文档id');
}
let getdocPackFullInfo= this._docPackFullInfo(itemDataInfo);
loger.log('添加文档->',getdocPackFullInfo);
this._emit(MessageTypes.DOC_UPDATE, getdocPackFullInfo);//用添加和更新都统一DOC_UPDATE
}else{
loger.warn('文档数据解析失败->删除->itemIdx:'+insertItem.itemIdx);
... ... @@ -681,7 +682,7 @@ class DocApe extends Ape {
for (let key in this.docList) {
let item = this.docList[key];
if (item && item.docId == _docId) {
loger.log('查找文档->已经存在->',_docId);
//loger.log('查找文档->已经存在->',_docId);
return true;
}
}
... ...
... ... @@ -149,7 +149,7 @@ class MediaSharedApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("发送更新媒体文件.itemIdx=" + tableItemPdu.itemIdx);
//loger.log("发送更新媒体文件.itemIdx=" + tableItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
... ... @@ -159,7 +159,7 @@ class MediaSharedApe extends Ape {
if(!itemDataInfo.seek){
itemDataInfo.seek=1;
}
loger.log('mediaPackFullInfo->', itemDataInfo);
//loger.log('mediaPackFullInfo->', itemDataInfo);
return itemDataInfo;
}
//更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次
... ... @@ -399,7 +399,7 @@ class MediaSharedApe extends Ape {
if (itemDataInfo && itemDataInfo.status ==1) {
GlobalConfig.activeMediaId = itemDataInfo.itemIdx;//当前激活的媒体文件ID
GlobalConfig.activeMediaSeek = itemDataInfo.seek;
loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMediaId, "curPageNum->", GlobalConfig.activeMediaSeek);
//loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMediaId, "curPageNum->", GlobalConfig.activeMediaSeek);
}
let getMediaPackFullInfo= this._mediaSharedPackFullInfo(itemDataInfo);
... ... @@ -492,7 +492,7 @@ class MediaSharedApe extends Ape {
for (let key in this.mediaSharedList) {
let item = this.mediaSharedList[key];
if (item && item.fileId == _fileId) {
loger.log('查找媒体文件->已经存在->',_fileId);
//loger.log('查找媒体文件->已经存在->',_fileId);
return true;
}
}
... ...
... ... @@ -148,7 +148,7 @@ class MusicSharedApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("发送更新伴音文件.itemIdx=" + tableItemPdu.itemIdx);
//loger.log("发送更新伴音文件.itemIdx=" + tableItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
... ... @@ -158,7 +158,7 @@ class MusicSharedApe extends Ape {
if (!itemDataInfo.seek) {
itemDataInfo.seek = 1;
}
loger.log('musicPackFullInfo->', itemDataInfo);
//loger.log('musicPackFullInfo->', itemDataInfo);
return itemDataInfo;
}
... ... @@ -398,7 +398,7 @@ class MusicSharedApe extends Ape {
if (itemDataInfo && itemDataInfo.status == 1) {
GlobalConfig.activeMusicId = itemDataInfo.itemIdx; //当前激活的伴音文件ID
GlobalConfig.activeMusicSeek = itemDataInfo.seek;
loger.log('更新伴音文件->设置当前激活的伴音文件id->', GlobalConfig.activeMusicId, "curPageNum->", GlobalConfig.activeMusicSeek);
//loger.log('更新伴音文件->设置当前激活的伴音文件id->', GlobalConfig.activeMusicId, "curPageNum->", GlobalConfig.activeMusicSeek);
}
let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo);
... ... @@ -488,7 +488,7 @@ class MusicSharedApe extends Ape {
for (let key in this.musicSharedList) {
let item = this.musicSharedList[key];
if (item && item.fileId == _fileId) {
loger.log('查找伴音伴音文件->已经存在->', _fileId);
//loger.log('查找伴音伴音文件->已经存在->', _fileId);
return true;
}
}
... ...
... ... @@ -23,6 +23,7 @@ class QuestionApe extends Ape {
ApeConsts.QUESTION_SESSION_NAME,
ApeConsts.QUESTION_SESSION_TAG
);
this.getResultTimer=0;
this.isShow={};//已经显示过的题目
this.questionList={};//MCU同步的题目数据
this.questionTimer=new TimerCounter();//答题卡计时器
... ... @@ -168,10 +169,14 @@ class QuestionApe extends Ape {
case 4:
case 100:
//停止答题
loger.log("更新答题数据");
// loger.log("更新答题数据");
if(GlobalConfig.isHost){
////老师,只统计数据,不答题
this.getQuestionResult(model);
clearTimeout(this.getResultTimer);
//防止同一瞬间高并发请求,加一个间隔
this.getResultTimer=setTimeout(()=>{
this.getQuestionResult(model);
},600);
}else if(GlobalConfig.isNormal) {
//学生->如果自己已经提交过答案就不需要再显示
if(model.totalUserList.indexOf(GlobalConfig.userId)>=0){
... ... @@ -373,6 +378,7 @@ class QuestionApe extends Ape {
loger.warn("停止答题->参数错误",_param);
return;
}
clearTimeout(this.getResultTimer);
if(this.questionList[_param.itemIdx]){
loger.log("停止答题->",_param);
this.tableDelete(_param);
... ...
... ... @@ -400,7 +400,7 @@ class WhiteBoardApe extends Ape {
"isFresh": true,//清除现有显示的数据
"annotaionItems": annotaionItems //最新需要显示的数据
};
loger.log("清除当前显示的标注---->重绘标注数量--->", annotaionItems.length,"当前文档信息--->DocId->",GlobalConfig.activeDocId,"curPageNo->",GlobalConfig.activeDocCurPage);
//loger.log("清除当前显示的标注---->重绘标注数量--->", annotaionItems.length,"当前文档信息--->DocId->",GlobalConfig.activeDocId,"curPageNo->",GlobalConfig.activeDocCurPage);
this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj);
}
... ...
... ... @@ -1039,6 +1039,7 @@ message RCClassStatusInfoPdu {
optional uint32 currentSceneTableId=23;//文档区域的当前模块id
optional bool silence=24;//课堂禁言
optional string silenceUsers=25;//课堂用户禁言状态列表
optional bool isEnableDraw=26;//课堂用户是否开启绘制权限
}
message RCConferenceRecordRequestPdu {
... ...