李勇

点名和答题卡增加倒计时同步

此 diff 太大无法显示。
@@ -32,7 +32,7 @@ import QuestionApe from 'apes/QuestionApe'; @@ -32,7 +32,7 @@ import QuestionApe from 'apes/QuestionApe';
32 import UTF8 from 'utf-8'; 32 import UTF8 from 'utf-8';
33 33
34 let loger = Loger.getLoger('McuClient'); 34 let loger = Loger.getLoger('McuClient');
35 -let _sdkInfo = {"version": "v1.36.2.20170619", "author": "www.3mang.com"}; 35 +let _sdkInfo = {"version": "v1.36.4.20170620", "author": "www.3mang.com"};
36 36
37 //APE 37 //APE
38 let _sass; 38 let _sass;
@@ -545,6 +545,10 @@ export default class MessageEntrance extends Emiter { @@ -545,6 +545,10 @@ export default class MessageEntrance extends Emiter {
545 //是否自动开始(身份是host的时候才用到的) 545 //是否自动开始(身份是host的时候才用到的)
546 GlobalConfig.isAutoStartClass = _data.autoRecord || 0; 546 GlobalConfig.isAutoStartClass = _data.autoRecord || 0;
547 547
  548 + GlobalConfig.serverTime=_data.serverTime||new Date().getTime();//获取服务器时间戳
  549 + GlobalConfig.serverAndLoacTimeDistanc=(new Date().getTime()-GlobalConfig.serverTime)/1000;//当前系统时间和服务器时间的差值 (秒)
  550 + loger.warn("服务器时间:"+GlobalConfig.serverTime+ " 系统时间:"+new Date().getTime()+ " 时间差:"+GlobalConfig.serverAndLoacTimeDistanc);
  551 +
548 GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表 552 GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表
549 GlobalConfig.setRecordList(_data.recordList);//录制回放地址 553 GlobalConfig.setRecordList(_data.recordList);//录制回放地址
550 GlobalConfig.setDocList(_data.docList);//文档地址 554 GlobalConfig.setDocList(_data.docList);//文档地址
@@ -460,6 +460,6 @@ GlobalConfig.allowRecordMaxTime=14400;//(秒)允许录制的最长时间,默 @@ -460,6 +460,6 @@ GlobalConfig.allowRecordMaxTime=14400;//(秒)允许录制的最长时间,默
460 GlobalConfig.siteId_letv='shchuanbao';//乐视,MS不需要动态选点的站点 460 GlobalConfig.siteId_letv='shchuanbao';//乐视,MS不需要动态选点的站点
461 GlobalConfig.ssTunnelAppURL='';//屏幕共享插件的地址 461 GlobalConfig.ssTunnelAppURL='';//屏幕共享插件的地址
462 462
463 -  
464 - 463 +GlobalConfig.serverTime=0;//服务器当前时间戳
  464 +GlobalConfig.serverAndLoacTimeDistanc=0;//本地时间和服务器时间错的差值;
465 export default GlobalConfig; 465 export default GlobalConfig;
@@ -88,16 +88,11 @@ MessageTypes.DOC_BROADCAST= "doc_broadcast";// @@ -88,16 +88,11 @@ MessageTypes.DOC_BROADCAST= "doc_broadcast";//
88 MessageTypes.MEDIA_SHARED_DELETE="media_shared_delete";//删除媒体文件 88 MessageTypes.MEDIA_SHARED_DELETE="media_shared_delete";//删除媒体文件
89 MessageTypes.MEDIA_SHARED_UPDATE ="media_shared_update";//更新媒体文件(添加、变更) 89 MessageTypes.MEDIA_SHARED_UPDATE ="media_shared_update";//更新媒体文件(添加、变更)
90 90
91 -//答题卡 91 +//答题卡和点名共用
92 MessageTypes.START_ANSWER_QUESTION="start_answer_question";//开始答题 92 MessageTypes.START_ANSWER_QUESTION="start_answer_question";//开始答题
93 MessageTypes.UPDATE_ANSWER_QUESTION="update_answer_question";//更新答题数据 93 MessageTypes.UPDATE_ANSWER_QUESTION="update_answer_question";//更新答题数据
94 MessageTypes.STOP_ANSWER_QUESTION="stop_answer_question";//停止答题 94 MessageTypes.STOP_ANSWER_QUESTION="stop_answer_question";//停止答题
95 -  
96 -//点名  
97 -MessageTypes.START_CALL_THE_ROLL="start_call_the_roll";//开始点名  
98 -MessageTypes.UPDATE_CALL_THE_ROLL="update_call_the_roll";//更新点名数据  
99 -MessageTypes.STOP_CALL_THE_ROLL="stop_call_the_roll";//停止点名  
100 - 95 +MessageTypes.UPDATE_QUESTION_TIME="update_question_time";//更新答题时间
101 96
102 //白板笔记事件定义 97 //白板笔记事件定义
103 MessageTypes.WHITEBOARD_ANNOTATION_UPDATE ="whiteboard_annotation_update";// 'whiteboard.annotation.update'; 98 MessageTypes.WHITEBOARD_ANNOTATION_UPDATE ="whiteboard_annotation_update";// 'whiteboard.annotation.update';
@@ -23,8 +23,10 @@ class QuestionApe extends Ape { @@ -23,8 +23,10 @@ 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 +
26 this.questionList={};//MCU同步的题目数据 27 this.questionList={};//MCU同步的题目数据
27 - this.questionDataList={};//Sass保存的题目内容数据 28 + this.questionTimer=new TimerCounter();//答题卡计时器
  29 + this.questionTimer.addTimerCallBack(this.questionTimerCounterUptate.bind(this), 1);//计时器监听
28 30
29 //监听Sass事件 31 //监听Sass事件
30 this._sass=Sass; 32 this._sass=Sass;
@@ -47,6 +49,27 @@ class QuestionApe extends Ape { @@ -47,6 +49,27 @@ class QuestionApe extends Ape {
47 this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.CONFERENCE_OBJ_QUESTION_ID, 49 this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.CONFERENCE_OBJ_QUESTION_ID,
48 ApeConsts.CONFERENCE_OBJ_QUESTION_NAME, ApeConsts.CONFERENCE_OBJ_QUESTION_TAG, 0, new ArrayBuffer); 50 ApeConsts.CONFERENCE_OBJ_QUESTION_NAME, ApeConsts.CONFERENCE_OBJ_QUESTION_TAG, 0, new ArrayBuffer);
49 } 51 }
  52 + //答题卡计时器
  53 + questionTimerCounterUptate() {
  54 + if (!this.mcu.connected) {
  55 + loger.warn('MCU 连接已经断开');
  56 + if(this.questionTimer){
  57 + this.questionTimer.stopTimer();
  58 + }
  59 + }
  60 + //console.log("时间差:"+GlobalConfig.serverAndLoacTimeDistanc+' questionTimerCounterUptate',this.questionList);
  61 + for(let key in this.questionList){
  62 + let question=this.questionList[key];
  63 + if(question){
  64 + let timestamp=parseInt(question.timeLimit-(new Date().getTime()*0.001-question.timestamp-GlobalConfig.serverAndLoacTimeDistanc));
  65 + loger.log("question->type:"+question.type,"倒计时:"+timestamp);
  66 + this._emit(MessageTypes.UPDATE_QUESTION_TIME,{type:question.type,itemIdx:question.itemIdx,timestamp:timestamp});
  67 + }
  68 + }
  69 + if( this.questionTimer&&Object.keys(this.questionList).length<1){
  70 + this.questionTimer.stopTimer();
  71 + }
  72 + }
50 73
51 //更新信息 74 //更新信息
52 sendUpdaterTable(_param) { 75 sendUpdaterTable(_param) {
@@ -157,17 +180,16 @@ class QuestionApe extends Ape { @@ -157,17 +180,16 @@ class QuestionApe extends Ape {
157 //学生->如果自己已经提交过答案就不需要再显示 180 //学生->如果自己已经提交过答案就不需要再显示
158 if(model.totalUserList.indexOf(GlobalConfig.userId)>=0){ 181 if(model.totalUserList.indexOf(GlobalConfig.userId)>=0){
159 loger.log("已经提交过答案-不需要显示答题卡->userId:"+GlobalConfig.userId); 182 loger.log("已经提交过答案-不需要显示答题卡->userId:"+GlobalConfig.userId);
  183 + delete this.questionList[itemIdx];
160 }else { 184 }else {
161 //显示答题卡数据 185 //显示答题卡数据
162 this._emit(MessageTypes.START_ANSWER_QUESTION,model); 186 this._emit(MessageTypes.START_ANSWER_QUESTION,model);
163 } 187 }
164 } 188 }
  189 + if( this.questionTimer){
  190 + this.questionTimer.startTimer();
  191 + }
165 break; 192 break;
166 - //case 4:  
167 - // //停止点名  
168 - // loger.log("更新点名数据");  
169 - // this._emit(MessageTypes.UPDATE_CALL_THE_ROLL,model);  
170 - // break;  
171 default : 193 default :
172 break; 194 break;
173 } 195 }
@@ -354,16 +376,8 @@ class QuestionApe extends Ape { @@ -354,16 +376,8 @@ class QuestionApe extends Ape {
354 _sassCreatQuestionSuccessHandler(_data){ 376 _sassCreatQuestionSuccessHandler(_data){
355 //loger.log("创建答题卡成功",_data); 377 //loger.log("创建答题卡成功",_data);
356 if(_data){ 378 if(_data){
357 - //this.questionDataList[_data.questionId]=_data;//保存题目数据  
358 -  
359 let questionItem=_data; 379 let questionItem=_data;
360 - /* //判断是答题还是点名,type=100的时候是点名  
361 - if(questionItem.type==100){  
362 - questionItem.itemIdx=ApeConsts.CONFERENCE_OBJ_QUESTION_ID+1;  
363 - }else {  
364 - questionItem.itemIdx=ApeConsts.CONFERENCE_OBJ_QUESTION_ID;  
365 - }*/  
366 - questionItem.itemIdx=EngineUtils.creatTimestamp(); 380 + questionItem.itemIdx=parseInt(EngineUtils.creatTimestamp()- GlobalConfig.serverAndLoacTimeDistanc);
367 this.sendUpdaterTable(questionItem); 381 this.sendUpdaterTable(questionItem);
368 } 382 }
369 383