李勇

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

此 diff 太大无法显示。
... ... @@ -32,7 +32,7 @@ import QuestionApe from 'apes/QuestionApe';
import UTF8 from 'utf-8';
let loger = Loger.getLoger('McuClient');
let _sdkInfo = {"version": "v1.36.2.20170619", "author": "www.3mang.com"};
let _sdkInfo = {"version": "v1.36.4.20170620", "author": "www.3mang.com"};
//APE
let _sass;
... ... @@ -545,6 +545,10 @@ export default class MessageEntrance extends Emiter {
//是否自动开始(身份是host的时候才用到的)
GlobalConfig.isAutoStartClass = _data.autoRecord || 0;
GlobalConfig.serverTime=_data.serverTime||new Date().getTime();//获取服务器时间戳
GlobalConfig.serverAndLoacTimeDistanc=(new Date().getTime()-GlobalConfig.serverTime)/1000;//当前系统时间和服务器时间的差值 (秒)
loger.warn("服务器时间:"+GlobalConfig.serverTime+ " 系统时间:"+new Date().getTime()+ " 时间差:"+GlobalConfig.serverAndLoacTimeDistanc);
GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表
GlobalConfig.setRecordList(_data.recordList);//录制回放地址
GlobalConfig.setDocList(_data.docList);//文档地址
... ...
... ... @@ -460,6 +460,6 @@ GlobalConfig.allowRecordMaxTime=14400;//(秒)允许录制的最长时间,默
GlobalConfig.siteId_letv='shchuanbao';//乐视,MS不需要动态选点的站点
GlobalConfig.ssTunnelAppURL='';//屏幕共享插件的地址
GlobalConfig.serverTime=0;//服务器当前时间戳
GlobalConfig.serverAndLoacTimeDistanc=0;//本地时间和服务器时间错的差值;
export default GlobalConfig;
... ...
... ... @@ -88,16 +88,11 @@ MessageTypes.DOC_BROADCAST= "doc_broadcast";//
MessageTypes.MEDIA_SHARED_DELETE="media_shared_delete";//删除媒体文件
MessageTypes.MEDIA_SHARED_UPDATE ="media_shared_update";//更新媒体文件(添加、变更)
//答题卡
//答题卡和点名共用
MessageTypes.START_ANSWER_QUESTION="start_answer_question";//开始答题
MessageTypes.UPDATE_ANSWER_QUESTION="update_answer_question";//更新答题数据
MessageTypes.STOP_ANSWER_QUESTION="stop_answer_question";//停止答题
//点名
MessageTypes.START_CALL_THE_ROLL="start_call_the_roll";//开始点名
MessageTypes.UPDATE_CALL_THE_ROLL="update_call_the_roll";//更新点名数据
MessageTypes.STOP_CALL_THE_ROLL="stop_call_the_roll";//停止点名
MessageTypes.UPDATE_QUESTION_TIME="update_question_time";//更新答题时间
//白板笔记事件定义
MessageTypes.WHITEBOARD_ANNOTATION_UPDATE ="whiteboard_annotation_update";// 'whiteboard.annotation.update';
... ...
... ... @@ -23,8 +23,10 @@ class QuestionApe extends Ape {
ApeConsts.QUESTION_SESSION_NAME,
ApeConsts.QUESTION_SESSION_TAG
);
this.questionList={};//MCU同步的题目数据
this.questionDataList={};//Sass保存的题目内容数据
this.questionTimer=new TimerCounter();//答题卡计时器
this.questionTimer.addTimerCallBack(this.questionTimerCounterUptate.bind(this), 1);//计时器监听
//监听Sass事件
this._sass=Sass;
... ... @@ -47,6 +49,27 @@ class QuestionApe extends Ape {
this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.CONFERENCE_OBJ_QUESTION_ID,
ApeConsts.CONFERENCE_OBJ_QUESTION_NAME, ApeConsts.CONFERENCE_OBJ_QUESTION_TAG, 0, new ArrayBuffer);
}
//答题卡计时器
questionTimerCounterUptate() {
if (!this.mcu.connected) {
loger.warn('MCU 连接已经断开');
if(this.questionTimer){
this.questionTimer.stopTimer();
}
}
//console.log("时间差:"+GlobalConfig.serverAndLoacTimeDistanc+' questionTimerCounterUptate',this.questionList);
for(let key in this.questionList){
let question=this.questionList[key];
if(question){
let timestamp=parseInt(question.timeLimit-(new Date().getTime()*0.001-question.timestamp-GlobalConfig.serverAndLoacTimeDistanc));
loger.log("question->type:"+question.type,"倒计时:"+timestamp);
this._emit(MessageTypes.UPDATE_QUESTION_TIME,{type:question.type,itemIdx:question.itemIdx,timestamp:timestamp});
}
}
if( this.questionTimer&&Object.keys(this.questionList).length<1){
this.questionTimer.stopTimer();
}
}
//更新信息
sendUpdaterTable(_param) {
... ... @@ -157,17 +180,16 @@ class QuestionApe extends Ape {
//学生->如果自己已经提交过答案就不需要再显示
if(model.totalUserList.indexOf(GlobalConfig.userId)>=0){
loger.log("已经提交过答案-不需要显示答题卡->userId:"+GlobalConfig.userId);
delete this.questionList[itemIdx];
}else {
//显示答题卡数据
this._emit(MessageTypes.START_ANSWER_QUESTION,model);
}
}
if( this.questionTimer){
this.questionTimer.startTimer();
}
break;
//case 4:
// //停止点名
// loger.log("更新点名数据");
// this._emit(MessageTypes.UPDATE_CALL_THE_ROLL,model);
// break;
default :
break;
}
... ... @@ -354,16 +376,8 @@ class QuestionApe extends Ape {
_sassCreatQuestionSuccessHandler(_data){
//loger.log("创建答题卡成功",_data);
if(_data){
//this.questionDataList[_data.questionId]=_data;//保存题目数据
let questionItem=_data;
/* //判断是答题还是点名,type=100的时候是点名
if(questionItem.type==100){
questionItem.itemIdx=ApeConsts.CONFERENCE_OBJ_QUESTION_ID+1;
}else {
questionItem.itemIdx=ApeConsts.CONFERENCE_OBJ_QUESTION_ID;
}*/
questionItem.itemIdx=EngineUtils.creatTimestamp();
questionItem.itemIdx=parseInt(EngineUtils.creatTimestamp()- GlobalConfig.serverAndLoacTimeDistanc);
this.sendUpdaterTable(questionItem);
}
... ...