李勇

1.会议模块增加自动开始上课的功能

2.录制回放时聊天模块和白板模块在seek的时候,历史数据最多显示30条
此 diff 太大无法显示。
@@ -296,10 +296,19 @@ export default class MessageEntrance extends Emiter { @@ -296,10 +296,19 @@ export default class MessageEntrance extends Emiter {
296 GlobalConfig.isRecordPlayBack=false;//设置为非录制回放状态 296 GlobalConfig.isRecordPlayBack=false;//设置为非录制回放状态
297 GlobalConfig.classId = parseInt(_param.classId); 297 GlobalConfig.classId = parseInt(_param.classId);
298 GlobalConfig.portal = _param.portal; 298 GlobalConfig.portal = _param.portal;
299 - GlobalConfig.userRole = _param.userRole || ApeConsts.normal;  
300 GlobalConfig.userId = _param.userId || "0"; 299 GlobalConfig.userId = _param.userId || "0";
301 GlobalConfig.userName = _param.userName || ""; 300 GlobalConfig.userName = _param.userName || "";
302 301
  302 + //设置角色身份
  303 + GlobalConfig.userRole = _param.userRole || ApeConsts.normal;
  304 + if(GlobalConfig.userRole!=ApeConsts.host&&
  305 + GlobalConfig.userRole!=ApeConsts.presenter&&
  306 + GlobalConfig.userRole!=ApeConsts.assistant&&
  307 + GlobalConfig.userRole!=ApeConsts.record&&
  308 + GlobalConfig.userRole!=ApeConsts.invisible){
  309 + GlobalConfig.userRole= ApeConsts.normal;
  310 + }
  311 +
303 //客户端决定是否延迟接收消息 312 //客户端决定是否延迟接收消息
304 GlobalConfig.messageDelay = _param.messageDelay || false; 313 GlobalConfig.messageDelay = _param.messageDelay || false;
305 314
@@ -429,6 +438,9 @@ export default class MessageEntrance extends Emiter { @@ -429,6 +438,9 @@ export default class MessageEntrance extends Emiter {
429 GlobalConfig.gop = _data.gop||3;; 438 GlobalConfig.gop = _data.gop||3;;
430 GlobalConfig.videoQuality = _data.videoQuality||2; 439 GlobalConfig.videoQuality = _data.videoQuality||2;
431 440
  441 + //是否自动开始(身份是host的时候才用到的)
  442 + GlobalConfig.isAutoStartClass= _data.autoRecord||0;
  443 +
432 GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表 444 GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表
433 GlobalConfig.setRecordList(_data.recordList);//录制回放地址 445 GlobalConfig.setRecordList(_data.recordList);//录制回放地址
434 GlobalConfig.setDocList(_data.docList);//文档地址 446 GlobalConfig.setDocList(_data.docList);//文档地址
@@ -310,6 +310,8 @@ GlobalConfig.recordFileName="";//录制的文件名,如 果为空就创建一个 @@ -310,6 +310,8 @@ GlobalConfig.recordFileName="";//录制的文件名,如 果为空就创建一个
310 GlobalConfig.recordDownloadUrl="";//下载地址 310 GlobalConfig.recordDownloadUrl="";//下载地址
311 GlobalConfig.recordReplaytickValues={}; // 滚动条关键点,用于快进快退 311 GlobalConfig.recordReplaytickValues={}; // 滚动条关键点,用于快进快退
312 312
  313 +GlobalConfig.isAutoStartClass=0;//是否自动开始上课 0-否 ;1 是
  314 +
313 GlobalConfig.updateClassInfoDelay=30;//(秒),每隔30秒同步一次课堂状态的并保存到Sass 315 GlobalConfig.updateClassInfoDelay=30;//(秒),每隔30秒同步一次课堂状态的并保存到Sass
314 //GlobalConfig.serverTimestamp=0;//当前的系统时间戳 用get set 获取 316 //GlobalConfig.serverTimestamp=0;//当前的系统时间戳 用get set 获取
315 317
@@ -293,6 +293,8 @@ class RecordPlayBackParse extends Emiter { @@ -293,6 +293,8 @@ class RecordPlayBackParse extends Emiter {
293 position += byteLen; 293 position += byteLen;
294 294
295 this._parseSaveSocketMsgReceivedHandler(byteData, timestamp); 295 this._parseSaveSocketMsgReceivedHandler(byteData, timestamp);
  296 +
  297 +
296 //记录最后一个数据的时间戳作为整个录制回放的总时间戳 298 //记录最后一个数据的时间戳作为整个录制回放的总时间戳
297 this._recordPlaybackMaxTime = timestamp; 299 this._recordPlaybackMaxTime = timestamp;
298 } 300 }
@@ -300,6 +302,12 @@ class RecordPlayBackParse extends Emiter { @@ -300,6 +302,12 @@ class RecordPlayBackParse extends Emiter {
300 this._isReady = true; 302 this._isReady = true;
301 this._stopTimerCounter(); 303 this._stopTimerCounter();
302 304
  305 + //录制回放的总时间长度按课堂最长时间计算,不能按最后一个消息的时间计算
  306 + if(this._recordPlaybackMaxTime<GlobalConfig.classTimestamp){
  307 + this._recordPlaybackMaxTime=GlobalConfig.classTimestamp;
  308 +
  309 + }
  310 +
303 GlobalConfig.recordPlaybackMaxTime = this._recordPlaybackMaxTime; 311 GlobalConfig.recordPlaybackMaxTime = this._recordPlaybackMaxTime;
304 loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime); 312 loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime);
305 //console.log("_messages", this._messages); 313 //console.log("_messages", this._messages);
@@ -382,13 +390,13 @@ class RecordPlayBackParse extends Emiter { @@ -382,13 +390,13 @@ class RecordPlayBackParse extends Emiter {
382 //查找关键帧,找到关键帧后再继续播放 390 //查找关键帧,找到关键帧后再继续播放
383 this._searchApeMessageKeyfram(this._conferApeMssages, ApeConsts.CONFERENCE_SESSION_ID); 391 this._searchApeMessageKeyfram(this._conferApeMssages, ApeConsts.CONFERENCE_SESSION_ID);
384 this._searchApeMessageKeyfram(this._docApeMssages, ApeConsts.DOCSHARING_SESSION_ID); 392 this._searchApeMessageKeyfram(this._docApeMssages, ApeConsts.DOCSHARING_SESSION_ID);
385 - this._searchApeMessageKeyfram(this._whiteApeMssages, ApeConsts.WHITEBOARD_SESSION_ID); 393 + //this._searchApeMessageKeyfram(this._whiteApeMssages, ApeConsts.WHITEBOARD_SESSION_ID);
386 this._searchApeMessageKeyfram(this._videoApeMssages, ApeConsts.VIDEO_SESSION_ID); 394 this._searchApeMessageKeyfram(this._videoApeMssages, ApeConsts.VIDEO_SESSION_ID);
387 this._searchApeMessageKeyfram(this._audioApeMssages, ApeConsts.AUDIO_SESSION_ID); 395 this._searchApeMessageKeyfram(this._audioApeMssages, ApeConsts.AUDIO_SESSION_ID);
388 396
389 - //聊天模块的比较特殊,消息是累计的  
390 - this._searchChatApeMessageKeyfram(this._chatApeMssages, ApeConsts.CHAT_SESSION_ID);  
391 - 397 + //聊天模块、白板标注模块的比较特殊,消息是累计的,默认最多30条
  398 + this._searchApeHistoryMessageKeyfram(this._chatApeMssages, ApeConsts.CHAT_SESSION_ID);
  399 + this._searchApeHistoryMessageKeyfram(this._whiteApeMssages, ApeConsts.WHITEBOARD_SESSION_ID);
392 400
393 //各个ape模块无论有没有找到关键帧数据,都继续播放 401 //各个ape模块无论有没有找到关键帧数据,都继续播放
394 this._startTimerCounter(); 402 this._startTimerCounter();
@@ -420,7 +428,9 @@ class RecordPlayBackParse extends Emiter { @@ -420,7 +428,9 @@ class RecordPlayBackParse extends Emiter {
420 } 428 }
421 429
422 //查找聊天模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示 430 //查找聊天模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示
423 - _searchChatApeMessageKeyfram(_apeMessages) { 431 + _searchApeHistoryMessageKeyfram(_apeMessages) {
  432 + //最多30条数据
  433 + let counter=0;
424 let messageItem; 434 let messageItem;
425 let keyFrameSeek = 0; 435 let keyFrameSeek = 0;
426 for (let i = this._recordPlaybackTimestamp; i > 0; i--) { 436 for (let i = this._recordPlaybackTimestamp; i > 0; i--) {
@@ -429,9 +439,15 @@ class RecordPlayBackParse extends Emiter { @@ -429,9 +439,15 @@ class RecordPlayBackParse extends Emiter {
429 //把时间点对应的数据发送,同一秒内有存在多个数据的情况 439 //把时间点对应的数据发送,同一秒内有存在多个数据的情况
430 for (let i = 0; i < messageItem.length; i++) { 440 for (let i = 0; i < messageItem.length; i++) {
431 this._everSocketMsgReceivedHandler(messageItem[i].byteData, 0); 441 this._everSocketMsgReceivedHandler(messageItem[i].byteData, 0);
  442 + counter++;
  443 + if(counter>30){
  444 + loger.warn("SEEK->最多处理历史消息30条");
  445 + return;
  446 + }
432 } 447 }
433 } 448 }
434 } 449 }
  450 +
435 } 451 }
436 452
437 } 453 }
@@ -377,6 +377,13 @@ class ConferApe extends Ape { @@ -377,6 +377,13 @@ class ConferApe extends Ape {
377 377
378 //如果是host ,开始录制 378 //如果是host ,开始录制
379 this.startRecord(); 379 this.startRecord();
  380 + }else if(GlobalConfig.classStatus == ApeConsts.CLASS_STATUS_WAIT&&
  381 + GlobalConfig.isHost&& GlobalConfig.isAutoStartClass&&
  382 + !GlobalConfig.isRecordPlayBack){
  383 + //自动开始上课的4个条件
  384 + //1.如果自己是host,2.Sass配置的是自动开始上课,3.并且当前是未开始状态,4.当前不是录制回放,开始自动上课
  385 + loger.log('自动开始上课->classStatus:', GlobalConfig.classStatus, " isHost:",GlobalConfig.isHost, " isAutoStartClass:",GlobalConfig.isAutoStartClass, " isRecordPlayBack:",GlobalConfig.isRecordPlayBack);
  386 + this.startClass();
380 } 387 }
381 } 388 }
382 389