李勇

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

@@ -58,7 +58,7 @@ export default class MessageEntrance extends Emiter { @@ -58,7 +58,7 @@ export default class MessageEntrance extends Emiter {
58 constructor() { 58 constructor() {
59 super(); 59 super();
60 //sdk 信息 60 //sdk 信息
61 - GlobalConfig.sdkVersion = "v1.66.1.20170809"; 61 + GlobalConfig.sdkVersion = "v1.67.2.20170811";
62 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); 62 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
63 63
64 //获取设备和系统信息 64 //获取设备和系统信息
@@ -171,10 +171,9 @@ export default class MessageEntrance extends Emiter { @@ -171,10 +171,9 @@ export default class MessageEntrance extends Emiter {
171 this.controlSilenceStatus = this._controlSilenceStatus.bind(this); //改变禁言状态 171 this.controlSilenceStatus = this._controlSilenceStatus.bind(this); //改变禁言状态
172 172
173 this.sceneTableChange = this._sceneTableChange.bind(this); //切换模块显示 173 this.sceneTableChange = this._sceneTableChange.bind(this); //切换模块显示
174 -  
175 this.kickOutRosterFormNodeId = this._kickOutRosterFormNodeId.bind(this); //把指定nodeId的人踢出课堂 174 this.kickOutRosterFormNodeId = this._kickOutRosterFormNodeId.bind(this); //把指定nodeId的人踢出课堂
176 -  
177 this.sendThridChannelMessage = this._sendThridChannelMessage.bind(this);//通道第三方消息通道发送消息 175 this.sendThridChannelMessage = this._sendThridChannelMessage.bind(this);//通道第三方消息通道发送消息
  176 + this.changeDrawStatus = this._changeDrawStatus.bind(this);//切换绘制状态
178 177
179 //录制回放 178 //录制回放
180 this.initRecordPlayback = this._initRecordPlayback.bind(this); 179 this.initRecordPlayback = this._initRecordPlayback.bind(this);
@@ -1329,6 +1328,17 @@ export default class MessageEntrance extends Emiter { @@ -1329,6 +1328,17 @@ export default class MessageEntrance extends Emiter {
1329 } 1328 }
1330 } 1329 }
1331 1330
  1331 + //控制课堂全局是否可绘制的状态
  1332 + _changeDrawStatus(_param){
  1333 + if (!_mcu.connected) {
  1334 + loger.warn(GlobalConfig.getCurrentStatus());
  1335 + return;
  1336 + }
  1337 +
  1338 + if (_confer_ape) {
  1339 + _confer_ape.changeDrawStatus(_param);
  1340 + }
  1341 + }
1332 //暂停上课 1342 //暂停上课
1333 _sendPauseClass(_param) { 1343 _sendPauseClass(_param) {
1334 if (!_mcu.connected) { 1344 if (!_mcu.connected) {
@@ -2192,7 +2202,7 @@ export default class MessageEntrance extends Emiter { @@ -2192,7 +2202,7 @@ export default class MessageEntrance extends Emiter {
2192 //音乐共享模块加入频道成功,同步到MCU服务器上的数据 2202 //音乐共享模块加入频道成功,同步到MCU服务器上的数据
2193 musicShareApeJoinChannelSuccess() { 2203 musicShareApeJoinChannelSuccess() {
2194 loger.log("伴音MUSIC模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.musicListPrepare.length); 2204 loger.log("伴音MUSIC模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.musicListPrepare.length);
2195 - console.log("伴音MUSIC模块共享模数据->", GlobalConfig.musicListPrepare); 2205 + //console.log("伴音MUSIC模块共享模数据->", GlobalConfig.musicListPrepare);
2196 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传 2206 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
2197 if (GlobalConfig.isHost && GlobalConfig.musicListPrepare.length > 0) { 2207 if (GlobalConfig.isHost && GlobalConfig.musicListPrepare.length > 0) {
2198 for (let i = 0; i < GlobalConfig.musicListPrepare.length; i++) { 2208 for (let i = 0; i < GlobalConfig.musicListPrepare.length; i++) {
@@ -2218,7 +2228,7 @@ export default class MessageEntrance extends Emiter { @@ -2218,7 +2228,7 @@ export default class MessageEntrance extends Emiter {
2218 //媒体共享模块加入频道成功,同步到MCU服务器上的数据 2228 //媒体共享模块加入频道成功,同步到MCU服务器上的数据
2219 mediaShareApeJoinChannelSuccess() { 2229 mediaShareApeJoinChannelSuccess() {
2220 loger.log("媒体共享模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.sharedMediaList.length); 2230 loger.log("媒体共享模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.sharedMediaList.length);
2221 - console.log("媒体共享模数据->", GlobalConfig.sharedMediaList); 2231 + //console.log("媒体共享模数据->", GlobalConfig.sharedMediaList);
2222 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传 2232 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
2223 if (GlobalConfig.isHost && GlobalConfig.sharedMediaList.length > 0) { 2233 if (GlobalConfig.isHost && GlobalConfig.sharedMediaList.length > 0) {
2224 for (let i = 0; i < GlobalConfig.sharedMediaList.length; i++) { 2234 for (let i = 0; i < GlobalConfig.sharedMediaList.length; i++) {
@@ -81,6 +81,7 @@ class GlobalConfig { @@ -81,6 +81,7 @@ class GlobalConfig {
81 classStatusInfo.classBeginTime = this.classBeginTime; //课堂创建的时间,这个是Sass返回的 81 classStatusInfo.classBeginTime = this.classBeginTime; //课堂创建的时间,这个是Sass返回的
82 classStatusInfo.classEndTime = this.classEndTime; //课堂结束的时间,这个是Sass返回的 82 classStatusInfo.classEndTime = this.classEndTime; //课堂结束的时间,这个是Sass返回的
83 83
  84 + classStatusInfo.isEnableDraw = this.isEnableDraw; //当前是否开启绘制权限
84 classStatusInfo.recordStatus = this.recordStatus; //当前录制状态 85 classStatusInfo.recordStatus = this.recordStatus; //当前录制状态
85 classStatusInfo.silence = this.silence; //当前课堂禁言状态 86 classStatusInfo.silence = this.silence; //当前课堂禁言状态
86 classStatusInfo.silenceUsers = this.silenceUsers; //当前课堂禁言状态 87 classStatusInfo.silenceUsers = this.silenceUsers; //当前课堂禁言状态
@@ -140,6 +141,7 @@ class GlobalConfig { @@ -140,6 +141,7 @@ class GlobalConfig {
140 this.recordDownloadUrl = data.recordDownloadUrl || this.recordDownloadUrl; //下载地址 141 this.recordDownloadUrl = data.recordDownloadUrl || this.recordDownloadUrl; //下载地址
141 this.currentSceneTableId = data.currentSceneTableId || 0; //文档区域的模块显示 142 this.currentSceneTableId = data.currentSceneTableId || 0; //文档区域的模块显示
142 143
  144 + this.isEnableDraw=data.isEnableDraw||false;//是否开启所有人的绘制权限
143 // 全局禁言状态 145 // 全局禁言状态
144 this.silence = data.silence || false; 146 this.silence = data.silence || false;
145 this.silenceUsers =data.silenceUsers || {}; 147 this.silenceUsers =data.silenceUsers || {};
@@ -486,6 +488,7 @@ GlobalConfig.classTimestamp = 0; //从课堂开始到现在的时 @@ -486,6 +488,7 @@ GlobalConfig.classTimestamp = 0; //从课堂开始到现在的时
486 GlobalConfig.classJoinSuccess = false; //是否已经加入课堂 488 GlobalConfig.classJoinSuccess = false; //是否已经加入课堂
487 GlobalConfig.recordPlaybackMaxTime = 0; //录制回放的总时间 489 GlobalConfig.recordPlaybackMaxTime = 0; //录制回放的总时间
488 GlobalConfig.recordStatus = false; //当前录制状态 490 GlobalConfig.recordStatus = false; //当前录制状态
  491 +GlobalConfig.isEnableDraw = false; //当前所有人是否开启绘制状态(老师除外)
489 GlobalConfig.silence = false; //当前课堂禁言状态 492 GlobalConfig.silence = false; //当前课堂禁言状态
490 GlobalConfig.silenceUsers = {}; //当前课堂用户禁言状态 493 GlobalConfig.silenceUsers = {}; //当前课堂用户禁言状态
491 GlobalConfig.selfSilence = {}; //当前课堂禁言状态 494 GlobalConfig.selfSilence = {}; //当前课堂禁言状态
@@ -118,7 +118,7 @@ class LogManager { @@ -118,7 +118,7 @@ class LogManager {
118 let item = this.allLogList.shift(); 118 let item = this.allLogList.shift();
119 if (item) { 119 if (item) {
120 tempArr.push(item); 120 tempArr.push(item);
121 - msgData += item + " \n "; 121 + msgData += item + "\n ";
122 } 122 }
123 } 123 }
124 124
@@ -164,11 +164,16 @@ class LogManager { @@ -164,11 +164,16 @@ class LogManager {
164 164
165 //计算当前服务器时间 165 //计算当前服务器时间
166 static getCurrentDateTime() { 166 static getCurrentDateTime() {
167 - let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间 167 + /* let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间
168 let timeStr = new Date(currentServerTime).toLocaleString(); 168 let timeStr = new Date(currentServerTime).toLocaleString();
169 if (timeStr) { 169 if (timeStr) {
170 timeStr = timeStr.replace(/年|月/g, "-").replace(/日/g, " "); 170 timeStr = timeStr.replace(/年|月/g, "-").replace(/日/g, " ");
171 } 171 }
  172 + return timeStr;*/
  173 + let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间
  174 + let time=new Date(currentServerTime);
  175 + //显示格式20170729 16:42:00 INFO _msg
  176 + let timeStr = time.getFullYear()+"-"+(time.getMonth()+1)+"-"+time.getDate()+" "+time.getHours()+":"+time.getMinutes()+":"+time.getSeconds();
172 return timeStr; 177 return timeStr;
173 } 178 }
174 } 179 }
@@ -69,7 +69,7 @@ export default class Ape extends Emiter { @@ -69,7 +69,7 @@ export default class Ape extends Emiter {
69 69
70 //停止APE一切操作 70 //停止APE一切操作
71 stopApe() { 71 stopApe() {
72 - loger.log("stopApe=============================="); 72 + // loger.log("stopApe==============================");
73 } 73 }
74 74
75 // 消息处理 75 // 消息处理
@@ -243,23 +243,23 @@ export default class Ape extends Emiter { @@ -243,23 +243,23 @@ export default class Ape extends Emiter {
243 _joinChannelHandler(data) { 243 _joinChannelHandler(data) {
244 let joinedChannel = pdu['RCChannelJoinResponsePdu'].decode(data); 244 let joinedChannel = pdu['RCChannelJoinResponsePdu'].decode(data);
245 if (joinedChannel.result === pdu.RET_SUCCESS) { 245 if (joinedChannel.result === pdu.RET_SUCCESS) {
246 - loger.log(this._session_name, ' -> 加入Channel成功. ChannelId', joinedChannel.requestedChannelId); 246 + //loger.log(this._session_name, ' -> 加入Channel成功. ChannelId', joinedChannel.requestedChannelId);
247 this._session_channels[joinedChannel.requestedChannelId] = ApeConsts.CJS_JOINNED; 247 this._session_channels[joinedChannel.requestedChannelId] = ApeConsts.CJS_JOINNED;
248 this.onJoinChannelHandlerSuccess(); 248 this.onJoinChannelHandlerSuccess();
249 } else { 249 } else {
250 - loger.log(this._session_name, ' -> 加入Channel失败.', joinedChannel); 250 + loger.warn(this._session_name, ' -> 加入Channel失败.', joinedChannel);
251 } 251 }
252 } 252 }
253 253
254 // 依赖的课堂创建完毕 - 发起Ape加入 254 // 依赖的课堂创建完毕 - 发起Ape加入
255 _mcuConferenceJoinSuccessHandler(_data) { 255 _mcuConferenceJoinSuccessHandler(_data) {
256 - loger.log('创建Ape->',  
257 - 'SessionId',  
258 - this._session_id,  
259 - 'SessionName',  
260 - this._session_name,  
261 - 'SessionTag',  
262 - this._session_tag); 256 + //loger.log('创建Ape->',
  257 + // 'SessionId',
  258 + // this._session_id,
  259 + // 'SessionName',
  260 + // this._session_name,
  261 + // 'SessionTag',
  262 + // this._session_tag);
263 263
264 // 课堂依赖底层课堂信息 264 // 课堂依赖底层课堂信息
265 //this._classInfo = classInfo; 265 //this._classInfo = classInfo;
@@ -355,10 +355,23 @@ class ConferApe extends Ape { @@ -355,10 +355,23 @@ class ConferApe extends Ape {
355 } 355 }
356 this.sendUpdaterClassStatusInfo(params); 356 this.sendUpdaterClassStatusInfo(params);
357 } else { 357 } else {
358 - loger.warn('老师/监客拥有改权限'); 358 + loger.warn('学生没有开启禁言的权限');
  359 + }
  360 + }
  361 + //全局绘制权限控制
  362 + changeDrawStatus(params){
  363 + if (!GlobalConfig.isNormal) {
  364 + //同步禁言状态
  365 + if (params && params.isEnableDraw == true) {
  366 + GlobalConfig.isEnableDraw = true;
  367 + } else {
  368 + GlobalConfig.isEnableDraw = false;
  369 + }
  370 + this.sendUpdaterClassStatusInfo(params);
  371 + } else {
  372 + loger.warn('学生没有开启绘制的权限');
359 } 373 }
360 } 374 }
361 -  
362 //开始上课 375 //开始上课
363 startClass(_param) { 376 startClass(_param) {
364 if (GlobalConfig.isHost) { 377 if (GlobalConfig.isHost) {
@@ -1070,6 +1083,7 @@ class ConferApe extends Ape { @@ -1070,6 +1083,7 @@ class ConferApe extends Ape {
1070 classStatusInfo.currentSceneTableId = GlobalConfig.currentSceneTableId; 1083 classStatusInfo.currentSceneTableId = GlobalConfig.currentSceneTableId;
1071 classStatusInfo.silence = GlobalConfig.silence; 1084 classStatusInfo.silence = GlobalConfig.silence;
1072 classStatusInfo.silenceUsers = JSON.stringify(GlobalConfig.silenceUsers); 1085 classStatusInfo.silenceUsers = JSON.stringify(GlobalConfig.silenceUsers);
  1086 + classStatusInfo.isEnableDraw = GlobalConfig.isEnableDraw;
1073 //loger.log("classStatusInfo--->", classStatusInfo); 1087 //loger.log("classStatusInfo--->", classStatusInfo);
1074 1088
1075 /* 1089 /*
@@ -296,7 +296,7 @@ class DocApe extends Ape { @@ -296,7 +296,7 @@ class DocApe extends Ape {
296 _docPackFullInfo(_itemDataInfo){ 296 _docPackFullInfo(_itemDataInfo){
297 let itemDataInfo=_itemDataInfo; 297 let itemDataInfo=_itemDataInfo;
298 let getDocAddress=this.getDocFullAddress(_itemDataInfo); 298 let getDocAddress=this.getDocFullAddress(_itemDataInfo);
299 - loger.log('docPackFullInfo->', itemDataInfo); 299 + //loger.log('docPackFullInfo->', itemDataInfo);
300 if(getDocAddress.code==ApeConsts.RETURN_SUCCESS){ 300 if(getDocAddress.code==ApeConsts.RETURN_SUCCESS){
301 itemDataInfo.images=getDocAddress.docFullAddress.images||[]; 301 itemDataInfo.images=getDocAddress.docFullAddress.images||[];
302 itemDataInfo.pdf=getDocAddress.docFullAddress.pdf||""; 302 itemDataInfo.pdf=getDocAddress.docFullAddress.pdf||"";
@@ -545,9 +545,10 @@ class DocApe extends Ape { @@ -545,9 +545,10 @@ class DocApe extends Ape {
545 if (itemDataInfo.visible == "true" || itemDataInfo.visible == true) { 545 if (itemDataInfo.visible == "true" || itemDataInfo.visible == true) {
546 GlobalConfig.activeDocId = itemDataInfo.itemIdx;//当前激活的文档ID 546 GlobalConfig.activeDocId = itemDataInfo.itemIdx;//当前激活的文档ID
547 GlobalConfig.activeDocCurPage = itemDataInfo.curPageNo;//当前激活的文档的当前页 547 GlobalConfig.activeDocCurPage = itemDataInfo.curPageNo;//当前激活的文档的当前页
548 - loger.log('添加文档->设置当前激活的文档id'); 548 + //loger.log('添加文档->设置当前激活的文档id');
549 } 549 }
550 let getdocPackFullInfo= this._docPackFullInfo(itemDataInfo); 550 let getdocPackFullInfo= this._docPackFullInfo(itemDataInfo);
  551 + loger.log('添加文档->',getdocPackFullInfo);
551 this._emit(MessageTypes.DOC_UPDATE, getdocPackFullInfo);//用添加和更新都统一DOC_UPDATE 552 this._emit(MessageTypes.DOC_UPDATE, getdocPackFullInfo);//用添加和更新都统一DOC_UPDATE
552 }else{ 553 }else{
553 loger.warn('文档数据解析失败->删除->itemIdx:'+insertItem.itemIdx); 554 loger.warn('文档数据解析失败->删除->itemIdx:'+insertItem.itemIdx);
@@ -681,7 +682,7 @@ class DocApe extends Ape { @@ -681,7 +682,7 @@ class DocApe extends Ape {
681 for (let key in this.docList) { 682 for (let key in this.docList) {
682 let item = this.docList[key]; 683 let item = this.docList[key];
683 if (item && item.docId == _docId) { 684 if (item && item.docId == _docId) {
684 - loger.log('查找文档->已经存在->',_docId); 685 + //loger.log('查找文档->已经存在->',_docId);
685 return true; 686 return true;
686 } 687 }
687 } 688 }
@@ -149,7 +149,7 @@ class MediaSharedApe extends Ape { @@ -149,7 +149,7 @@ class MediaSharedApe extends Ape {
149 adapterPdu.type = pdu.RCPDU_REG_ADAPTER; 149 adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
150 adapterPdu.item.push(adapterItemPdu); 150 adapterPdu.item.push(adapterItemPdu);
151 151
152 - loger.log("发送更新媒体文件.itemIdx=" + tableItemPdu.itemIdx); 152 + //loger.log("发送更新媒体文件.itemIdx=" + tableItemPdu.itemIdx);
153 this.sendUniform(adapterPdu, true); 153 this.sendUniform(adapterPdu, true);
154 } 154 }
155 155
@@ -159,7 +159,7 @@ class MediaSharedApe extends Ape { @@ -159,7 +159,7 @@ class MediaSharedApe extends Ape {
159 if(!itemDataInfo.seek){ 159 if(!itemDataInfo.seek){
160 itemDataInfo.seek=1; 160 itemDataInfo.seek=1;
161 } 161 }
162 - loger.log('mediaPackFullInfo->', itemDataInfo); 162 + //loger.log('mediaPackFullInfo->', itemDataInfo);
163 return itemDataInfo; 163 return itemDataInfo;
164 } 164 }
165 //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 165 //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次
@@ -399,7 +399,7 @@ class MediaSharedApe extends Ape { @@ -399,7 +399,7 @@ class MediaSharedApe extends Ape {
399 if (itemDataInfo && itemDataInfo.status ==1) { 399 if (itemDataInfo && itemDataInfo.status ==1) {
400 GlobalConfig.activeMediaId = itemDataInfo.itemIdx;//当前激活的媒体文件ID 400 GlobalConfig.activeMediaId = itemDataInfo.itemIdx;//当前激活的媒体文件ID
401 GlobalConfig.activeMediaSeek = itemDataInfo.seek; 401 GlobalConfig.activeMediaSeek = itemDataInfo.seek;
402 - loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMediaId, "curPageNum->", GlobalConfig.activeMediaSeek); 402 + //loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMediaId, "curPageNum->", GlobalConfig.activeMediaSeek);
403 } 403 }
404 let getMediaPackFullInfo= this._mediaSharedPackFullInfo(itemDataInfo); 404 let getMediaPackFullInfo= this._mediaSharedPackFullInfo(itemDataInfo);
405 405
@@ -492,7 +492,7 @@ class MediaSharedApe extends Ape { @@ -492,7 +492,7 @@ class MediaSharedApe extends Ape {
492 for (let key in this.mediaSharedList) { 492 for (let key in this.mediaSharedList) {
493 let item = this.mediaSharedList[key]; 493 let item = this.mediaSharedList[key];
494 if (item && item.fileId == _fileId) { 494 if (item && item.fileId == _fileId) {
495 - loger.log('查找媒体文件->已经存在->',_fileId); 495 + //loger.log('查找媒体文件->已经存在->',_fileId);
496 return true; 496 return true;
497 } 497 }
498 } 498 }
@@ -148,7 +148,7 @@ class MusicSharedApe extends Ape { @@ -148,7 +148,7 @@ class MusicSharedApe extends Ape {
148 adapterPdu.type = pdu.RCPDU_REG_ADAPTER; 148 adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
149 adapterPdu.item.push(adapterItemPdu); 149 adapterPdu.item.push(adapterItemPdu);
150 150
151 - loger.log("发送更新伴音文件.itemIdx=" + tableItemPdu.itemIdx); 151 + //loger.log("发送更新伴音文件.itemIdx=" + tableItemPdu.itemIdx);
152 this.sendUniform(adapterPdu, true); 152 this.sendUniform(adapterPdu, true);
153 } 153 }
154 154
@@ -158,7 +158,7 @@ class MusicSharedApe extends Ape { @@ -158,7 +158,7 @@ class MusicSharedApe extends Ape {
158 if (!itemDataInfo.seek) { 158 if (!itemDataInfo.seek) {
159 itemDataInfo.seek = 1; 159 itemDataInfo.seek = 1;
160 } 160 }
161 - loger.log('musicPackFullInfo->', itemDataInfo); 161 + //loger.log('musicPackFullInfo->', itemDataInfo);
162 return itemDataInfo; 162 return itemDataInfo;
163 } 163 }
164 164
@@ -398,7 +398,7 @@ class MusicSharedApe extends Ape { @@ -398,7 +398,7 @@ class MusicSharedApe extends Ape {
398 if (itemDataInfo && itemDataInfo.status == 1) { 398 if (itemDataInfo && itemDataInfo.status == 1) {
399 GlobalConfig.activeMusicId = itemDataInfo.itemIdx; //当前激活的伴音文件ID 399 GlobalConfig.activeMusicId = itemDataInfo.itemIdx; //当前激活的伴音文件ID
400 GlobalConfig.activeMusicSeek = itemDataInfo.seek; 400 GlobalConfig.activeMusicSeek = itemDataInfo.seek;
401 - loger.log('更新伴音文件->设置当前激活的伴音文件id->', GlobalConfig.activeMusicId, "curPageNum->", GlobalConfig.activeMusicSeek); 401 + //loger.log('更新伴音文件->设置当前激活的伴音文件id->', GlobalConfig.activeMusicId, "curPageNum->", GlobalConfig.activeMusicSeek);
402 } 402 }
403 let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo); 403 let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo);
404 404
@@ -488,7 +488,7 @@ class MusicSharedApe extends Ape { @@ -488,7 +488,7 @@ class MusicSharedApe extends Ape {
488 for (let key in this.musicSharedList) { 488 for (let key in this.musicSharedList) {
489 let item = this.musicSharedList[key]; 489 let item = this.musicSharedList[key];
490 if (item && item.fileId == _fileId) { 490 if (item && item.fileId == _fileId) {
491 - loger.log('查找伴音伴音文件->已经存在->', _fileId); 491 + //loger.log('查找伴音伴音文件->已经存在->', _fileId);
492 return true; 492 return true;
493 } 493 }
494 } 494 }
@@ -23,6 +23,7 @@ class QuestionApe extends Ape { @@ -23,6 +23,7 @@ class QuestionApe extends Ape {
23 ApeConsts.QUESTION_SESSION_NAME, 23 ApeConsts.QUESTION_SESSION_NAME,
24 ApeConsts.QUESTION_SESSION_TAG 24 ApeConsts.QUESTION_SESSION_TAG
25 ); 25 );
  26 + this.getResultTimer=0;
26 this.isShow={};//已经显示过的题目 27 this.isShow={};//已经显示过的题目
27 this.questionList={};//MCU同步的题目数据 28 this.questionList={};//MCU同步的题目数据
28 this.questionTimer=new TimerCounter();//答题卡计时器 29 this.questionTimer=new TimerCounter();//答题卡计时器
@@ -168,10 +169,14 @@ class QuestionApe extends Ape { @@ -168,10 +169,14 @@ class QuestionApe extends Ape {
168 case 4: 169 case 4:
169 case 100: 170 case 100:
170 //停止答题 171 //停止答题
171 - loger.log("更新答题数据"); 172 + // loger.log("更新答题数据");
172 if(GlobalConfig.isHost){ 173 if(GlobalConfig.isHost){
173 ////老师,只统计数据,不答题 174 ////老师,只统计数据,不答题
  175 + clearTimeout(this.getResultTimer);
  176 + //防止同一瞬间高并发请求,加一个间隔
  177 + this.getResultTimer=setTimeout(()=>{
174 this.getQuestionResult(model); 178 this.getQuestionResult(model);
  179 + },600);
175 }else if(GlobalConfig.isNormal) { 180 }else if(GlobalConfig.isNormal) {
176 //学生->如果自己已经提交过答案就不需要再显示 181 //学生->如果自己已经提交过答案就不需要再显示
177 if(model.totalUserList.indexOf(GlobalConfig.userId)>=0){ 182 if(model.totalUserList.indexOf(GlobalConfig.userId)>=0){
@@ -373,6 +378,7 @@ class QuestionApe extends Ape { @@ -373,6 +378,7 @@ class QuestionApe extends Ape {
373 loger.warn("停止答题->参数错误",_param); 378 loger.warn("停止答题->参数错误",_param);
374 return; 379 return;
375 } 380 }
  381 + clearTimeout(this.getResultTimer);
376 if(this.questionList[_param.itemIdx]){ 382 if(this.questionList[_param.itemIdx]){
377 loger.log("停止答题->",_param); 383 loger.log("停止答题->",_param);
378 this.tableDelete(_param); 384 this.tableDelete(_param);
@@ -400,7 +400,7 @@ class WhiteBoardApe extends Ape { @@ -400,7 +400,7 @@ class WhiteBoardApe extends Ape {
400 "isFresh": true,//清除现有显示的数据 400 "isFresh": true,//清除现有显示的数据
401 "annotaionItems": annotaionItems //最新需要显示的数据 401 "annotaionItems": annotaionItems //最新需要显示的数据
402 }; 402 };
403 - loger.log("清除当前显示的标注---->重绘标注数量--->", annotaionItems.length,"当前文档信息--->DocId->",GlobalConfig.activeDocId,"curPageNo->",GlobalConfig.activeDocCurPage); 403 + //loger.log("清除当前显示的标注---->重绘标注数量--->", annotaionItems.length,"当前文档信息--->DocId->",GlobalConfig.activeDocId,"curPageNo->",GlobalConfig.activeDocCurPage);
404 this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj); 404 this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj);
405 } 405 }
406 406
@@ -1039,6 +1039,7 @@ message RCClassStatusInfoPdu { @@ -1039,6 +1039,7 @@ message RCClassStatusInfoPdu {
1039 optional uint32 currentSceneTableId=23;//文档区域的当前模块id 1039 optional uint32 currentSceneTableId=23;//文档区域的当前模块id
1040 optional bool silence=24;//课堂禁言 1040 optional bool silence=24;//课堂禁言
1041 optional string silenceUsers=25;//课堂用户禁言状态列表 1041 optional string silenceUsers=25;//课堂用户禁言状态列表
  1042 + optional bool isEnableDraw=26;//课堂用户是否开启绘制权限
1042 } 1043 }
1043 1044
1044 message RCConferenceRecordRequestPdu { 1045 message RCConferenceRecordRequestPdu {