diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js index 8be7f4f..6ef3bf7 100644 --- a/src/EngineEntrance.js +++ b/src/EngineEntrance.js @@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter { super(); this.lastClassActiveTime=0;//最后一次课堂激活的时间戳 //sdk 信息 - GlobalConfig.sdkVersion = "v2.31.12.20171122"; + GlobalConfig.sdkVersion = "v2.32.1.20171123"; loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); console.log("sdkVersion:" + GlobalConfig.sdkVersion); //设置 @@ -1177,7 +1177,7 @@ export default class MessageEntrance extends Emiter { _mcuJoinMCUClassSuccessHandler(_data) { //loger.log('MCU 课堂成功.'); loger.warn('=====================STEP9======================='); - //console.log("当前课堂人员列表",GlobalConfig.rosterNumber,GlobalConfig.rosters) + //console.log("当前课堂人员列表",GlobalConfig.rosterNum,GlobalConfig.rosters) GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_2); GlobalConfig.classJoinSuccess = true; @@ -2742,11 +2742,11 @@ export default class MessageEntrance extends Emiter { let interval=new Date().getTime()-parseInt(this.lastClassActiveTime); interval=interval/1000; //loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+interval+"秒"); - loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length); + loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNum, "sassDoclength=", GlobalConfig.docListPrepare.length); //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传 if (GlobalConfig.docListPrepare && GlobalConfig.docListPrepare.length > 0) { //如果当前身份是老师或者当前课堂内只有一个人并且不是H5,有权限同步文档到MCU - if (GlobalConfig.isHost || (GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) { + if (GlobalConfig.isHost || (GlobalConfig.rosterNum <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) { for (let i = 0; i < GlobalConfig.docListPrepare.length; i++) { let value = GlobalConfig.docListPrepare[i]; if (value) { @@ -2774,7 +2774,7 @@ export default class MessageEntrance extends Emiter { musicShareApeJoinChannelSuccess() { //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传 if (GlobalConfig.musicListPrepare&& GlobalConfig.musicListPrepare.length > 0) { - if (GlobalConfig.isHost || (GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) { + if (GlobalConfig.isHost || (GlobalConfig.rosterNum <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) { for (let i = 0; i < GlobalConfig.musicListPrepare.length; i++) { let value = GlobalConfig.musicListPrepare[i]; if (value) { @@ -2805,7 +2805,7 @@ export default class MessageEntrance extends Emiter { mediaShareApeJoinChannelSuccess() { //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传 if (GlobalConfig.sharedMediaList&& GlobalConfig.sharedMediaList.length > 0) { - if (GlobalConfig.isHost || (GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) { + if (GlobalConfig.isHost || (GlobalConfig.rosterNum <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) { for (let i = 0; i < GlobalConfig.sharedMediaList.length; i++) { let value = GlobalConfig.sharedMediaList[i]; if (value) { diff --git a/src/GlobalConfig.js b/src/GlobalConfig.js index 5a2c9cb..e72b29c 100644 --- a/src/GlobalConfig.js +++ b/src/GlobalConfig.js @@ -641,7 +641,7 @@ GlobalConfig.serverTime = 0; //服务器当前时间戳 GlobalConfig.serverAndLoacTimeDistanc = 0; //本地时间和服务器时间错的差值; GlobalConfig.logUrl = ""; //日志上报地址; -GlobalConfig.rosterNumber = 0;//当前总人数 +GlobalConfig.rosterNum = 0;//当前总人数 GlobalConfig.rosters = {};//当前课堂内的人员数据 GlobalConfig.isMobile = false; //是否是移动端 diff --git a/src/apes/Ape.js b/src/apes/Ape.js index cc818e6..1e2c02e 100644 --- a/src/apes/Ape.js +++ b/src/apes/Ape.js @@ -81,6 +81,17 @@ export default class Ape extends Emiter { // 数据同步处理 _pduRegAdapterHandler(regBuffer, seekTime) { let regPdu = pdu['RCAdapterPdu'].decode(regBuffer); + if(!regPdu){ + console.warn("regPdu 无效"); + return; + } + //console.log("regPdu",regPdu); + let newUserNum=regPdu.userNum||0; + if(newUserNum!=GlobalConfig.rosterNum){ + GlobalConfig.rosterNum=newUserNum; + this._emit(MessageTypes.CLASS_UPDATE_ROSTER_NUM,{rosterLen:GlobalConfig.rosterNum}); + } + let regItems = regPdu.item; let regItemSize = regItems.length; //console.log("RCAdapterPdu数据同步处理",regPdu); diff --git a/src/apes/ConferApe.js b/src/apes/ConferApe.js index c85a595..aa80403 100644 --- a/src/apes/ConferApe.js +++ b/src/apes/ConferApe.js @@ -26,7 +26,6 @@ class ConferApe extends Ape { this.isSendInsterRoster=false;//这个很重要,每次MCU连接成功之后只发一次 this.isLeave=false;//记录自己是否已经离开 this.rosters = {}; //用户列表 - this.rosterLen = 0;//当前课堂人数 this.timerCounter = new TimerCounter(); //计时器 this.startRecordTimer;//开始录制的计时器 this.recordStatus=false;//记录录制状态 @@ -290,13 +289,13 @@ class ConferApe extends Ape { return; } //如果已经开始录制就不再开启 - if (GlobalConfig.recordStatus && this.rosterLen > 1) { - loger.warn('目前已经是录制状态->当前课堂人数:' + this.rosterLen); + if (GlobalConfig.recordStatus && GlobalConfig.rosterNum > 1) { + loger.warn('目前已经是录制状态->当前课堂人数:' + GlobalConfig.rosterNum); return false; } //如果是host或者当前课堂只有1个人,并且不是H5 if (this.checkHasRecordControl()) { - loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus, "当前人数:" + this.rosterLen); + loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus, "当前人数:" +GlobalConfig.rosterNum); //如果录制的文件名不存在,需要创建一个名字 let timestampYMD = EngineUtils.creatTimestampYMD(); if (!GlobalConfig.recordFileName) { @@ -313,7 +312,7 @@ class ConferApe extends Ape { checkHasRecordControl() { //loger.warn('检测是否有控制录制操作的权限', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen); //1.如果自己是老师或者当前课堂只有一个人 - if (GlobalConfig.isHost || (this.rosterLen <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) { + if (GlobalConfig.isHost || (GlobalConfig.rosterNum <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) { return true; } //2.如果自己不是老师,需要判断当前课堂内是否有老师,如果有老师就不做操作 @@ -973,8 +972,8 @@ class ConferApe extends Ape { //loger.log("自己加入课堂的消息->",nodeId,"role-->", nodeData.role, ApeConsts.userTypes[nodeData.role]); //自己加入的时候,需要做一下判断操作,如果满足以下3个条件就要暂停课堂: // 1.当前课堂只有自己;2.自己的身份不是host;3当前的课堂状态为(CLASS_STATUS_STARTED= 1;//直播中) - this.rosterLen = Object.keys(this.rosters).length; - GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 + //this.rosterLen = Object.keys(this.rosters).length; + //GlobalConfig.rosterNum = this.rosterLen;//记录当前的总人数 /* if (this.rosterLen <=1 && !GlobalConfig.isHost && GlobalConfig.classStatus == ApeConsts.CLASS_STATUS_STARTED) { loger.warn("当前课堂没有老师->暂停课堂"); this.pauseClass({isForce: true}); @@ -1030,9 +1029,10 @@ class ConferApe extends Ape { return; } if (!rosterExists) { - this.rosterLen = Object.keys(this.rosters).length; - GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 - newNodeData.rosterLen = this.rosterLen; + //this.rosterLen = Object.keys(this.rosters).length; + //GlobalConfig.rosterNum = this.rosterLen;//记录当前的总人数 + //newNodeData.rosterLen = this.rosterLen; + newNodeData.rosterLen=GlobalConfig.rosterNum if(GlobalConfig.classType!= ApeConsts.CLASS_TYPE_ZHIBO){ loger.log("人员加入->", newNodeData); } @@ -1043,9 +1043,9 @@ class ConferApe extends Ape { } } else { //loger.log("更新人员列表数据,rosterExists已经存在",rosterExists); - this.rosterLen = Object.keys(this.rosters).length; - GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 - newNodeData.rosterLen = this.rosterLen; + //this.rosterLen = Object.keys(this.rosters).length; + //GlobalConfig.rosterNum = this.rosterLen;//记录当前的总人数 + newNodeData.rosterLen = GlobalConfig.rosterNum; if (nodeId != GlobalConfig.nodeId) { if(GlobalConfig.classType!= ApeConsts.CLASS_TYPE_ZHIBO){ loger.log("人员更新信息->", newNodeData); @@ -1079,13 +1079,13 @@ class ConferApe extends Ape { //如果推流的人员已经不存在,并且当前课堂内人员大于0; // 如果不判断当前的人数,会出现把正常的视频消息释放的情况; // 因为会出现先收到视频消息后收到人员加入和更新的消息 - if(this.rosters[_param.fromNodeId] == null&&this.rosterLen>0){ + if(this.rosters[_param.fromNodeId] == null&&GlobalConfig.rosterNum>0){ //H5不做释放处理 if(GlobalConfig.deviceType==GlobalConfig.deviceH5){ - loger.warn("H5不做媒体模块的频道释放->当前总人数->"+this.rosterLen, _param); + loger.warn("H5不做媒体模块的频道释放->当前总人数->"+GlobalConfig.rosterNum, _param); return ; } - loger.warn("媒体模块被占用->占有人已经不存在课堂中->释放->当前总人数->"+this.rosterLen, _param); + loger.warn("媒体模块被占用->占有人已经不存在课堂中->释放->当前总人数->"+GlobalConfig.rosterNum, _param); this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": _param.fromNodeId}); } } @@ -1118,12 +1118,12 @@ class ConferApe extends Ape { } delete this.rosters[nodeId]; GlobalConfig.rosters = this.rosters; - this.rosterLen = Object.keys(this.rosters).length; - GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 + //this.rosterLen = Object.keys(this.rosters).length; + //GlobalConfig.rosterNum = this.rosterLen;//记录当前的总人数 if(!GlobalConfig.isH5) { this.emitRosterChange(); - this._emit(MessageTypes.CLASS_DELETE_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen}); + this._emit(MessageTypes.CLASS_DELETE_ROSTER, {"nodeId": nodeId, "rosterLen": GlobalConfig.rosterNum}); //当前人员列表中抽一个人来检查离开人员是否占用频道 for (let key in this.rosters) { @@ -1131,7 +1131,7 @@ class ConferApe extends Ape { //判断是否是自己就处理以下操作 if (randNodeId == GlobalConfig.nodeId) { loger.log("检查离开的人员是否占用channel"); - this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen}); + this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": nodeId, "rosterLen": GlobalConfig.rosterNum}); //如果离开的人员是老师,需要暂停当前的课堂 if (user && user.role == ApeConsts.NR_HOST) { this.pauseClass(); @@ -1145,9 +1145,9 @@ class ConferApe extends Ape { //广播当前的人数 emitRosterChange() { - if(!GlobalConfig.isH5){ - this._emit(MessageTypes.CLASS_UPDATE_ROSTER_NUM, Object.keys(this.rosters).length); - } + //if(!GlobalConfig.isH5){ + this._emit(MessageTypes.CLASS_UPDATE_ROSTER_NUM,{rosterLen:GlobalConfig.rosterNum}); + //} } ///////数据的封包和解包///////////////////////////////////////// @@ -1222,8 +1222,7 @@ class ConferApe extends Ape { stopApe() { this.rosters = {}; - this.rosterLen = 0; - GlobalConfig.rosterNumber = this.rosterLen; + GlobalConfig.rosterNum = 0; GlobalConfig.rosters = this.rosters; this.isLeave=true; this.isSendInsterRoster=false; diff --git a/src/apes/DocApe.js b/src/apes/DocApe.js index 10dda1d..43fa30a 100644 --- a/src/apes/DocApe.js +++ b/src/apes/DocApe.js @@ -684,7 +684,7 @@ class DocApe extends Ape { return; } //如果自己不是老师,并且当前课堂内人数大于1,不能操作 - if (!GlobalConfig.isHost && GlobalConfig.rosterNumber > 1) { + if (!GlobalConfig.isHost && GlobalConfig.rosterNum > 1) { return; } diff --git a/src/pdus/pro.js b/src/pdus/pro.js index 550f824..f0cae72 100644 --- a/src/pdus/pro.js +++ b/src/pdus/pro.js @@ -253,6 +253,7 @@ message RCAdapterItemPdu { message RCAdapterPdu { optional RCPduType_E type = 1 [default = RCPDU_REG_ADAPTER]; repeated RCAdapterItemPdu item = 2; + optional uint32 user_num = 3;//rosterLen } // table operation pdu