李勇

1.修改nodeId和userId的生成规则,避免重复;2.统一设备类型定义;3.处理课堂模块和视频模块离开课堂后的消息处理

@@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter { @@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter {
63 super(); 63 super();
64 this.lastClassActiveTime=0;//最后一次课堂激活的时间戳 64 this.lastClassActiveTime=0;//最后一次课堂激活的时间戳
65 //sdk 信息 65 //sdk 信息
66 - GlobalConfig.sdkVersion = "v2.30.5.20171117"; 66 + GlobalConfig.sdkVersion = "v2.31.1.20171120";
67 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); 67 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
68 console.log("sdkVersion:" + GlobalConfig.sdkVersion); 68 console.log("sdkVersion:" + GlobalConfig.sdkVersion);
69 //设置 69 //设置
@@ -456,8 +456,23 @@ export default class MessageEntrance extends Emiter { @@ -456,8 +456,23 @@ export default class MessageEntrance extends Emiter {
456 LogManager.IS_OPEN_SEND_LOG = false;//断开之后不再上报日志 456 LogManager.IS_OPEN_SEND_LOG = false;//断开之后不再上报日志
457 },2000); 457 },2000);
458 458
  459 + this.clearClientData();
  460 + }
  461 + //清除所有客户端数据
  462 + clearClientData(){
  463 + GlobalConfig.MCUServerIP="";
  464 + GlobalConfig.MCUServerPort="";
  465 + GlobalConfig.mcuListFinal=[];
  466 + if(_mcu){
  467 + _mcu.leaveMCU();
  468 + }
  469 + if(_confer_ape){
  470 + _confer_ape.stopApe();
  471 + }
  472 + if(_video_ape){
  473 + _video_ape.stopApe();
  474 + }
459 } 475 }
460 -  
461 //当前的课堂状态信息发生改变,需要保存课堂状态到Sass 476 //当前的课堂状态信息发生改变,需要保存课堂状态到Sass
462 _onClassStatusInfoChange(_param) { 477 _onClassStatusInfoChange(_param) {
463 //如果MCU连接已经断开,不发送 478 //如果MCU连接已经断开,不发送
@@ -493,6 +508,10 @@ export default class MessageEntrance extends Emiter { @@ -493,6 +508,10 @@ export default class MessageEntrance extends Emiter {
493 if (GlobalConfig.isRecordPlayBack || !_confer_ape) { 508 if (GlobalConfig.isRecordPlayBack || !_confer_ape) {
494 return; 509 return;
495 } 510 }
  511 + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO){
  512 + //直播的时候不再同步所有模块的消息
  513 + return
  514 + }
496 //老师身份和非录制回放的时候执行,录制状态发送改变,需要更新当前的数据,否则已有的消息会录制不上 515 //老师身份和非录制回放的时候执行,录制状态发送改变,需要更新当前的数据,否则已有的消息会录制不上
497 if (_confer_ape.checkHasRecordControl()) { 516 if (_confer_ape.checkHasRecordControl()) {
498 loger.warn('录制状态发送改变->更新所有模块的当前数据发送到MCU'); 517 loger.warn('录制状态发送改变->更新所有模块的当前数据发送到MCU');
@@ -529,7 +548,10 @@ export default class MessageEntrance extends Emiter { @@ -529,7 +548,10 @@ export default class MessageEntrance extends Emiter {
529 if (!_data) { 548 if (!_data) {
530 return; 549 return;
531 } 550 }
532 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2 || GlobalConfig.deviceType == 3 || _data.nodeId == GlobalConfig.nodeId) { 551 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS ||
  552 + GlobalConfig.deviceType == GlobalConfig.deviceAndroid ||
  553 + GlobalConfig.deviceType == GlobalConfig.deviceH5 ||
  554 + _data.nodeId == GlobalConfig.nodeId) {
533 return; 555 return;
534 } 556 }
535 if (_webRtc) { 557 if (_webRtc) {
@@ -600,7 +622,7 @@ export default class MessageEntrance extends Emiter { @@ -600,7 +622,7 @@ export default class MessageEntrance extends Emiter {
600 GlobalConfig.isH5 = _param.isH5 || false;//外部传入的参数,是否是H5 622 GlobalConfig.isH5 = _param.isH5 || false;//外部传入的参数,是否是H5
601 if (GlobalConfig.isH5 == true) { 623 if (GlobalConfig.isH5 == true) {
602 GlobalConfig.platform = "h5"; 624 GlobalConfig.platform = "h5";
603 - GlobalConfig.deviceType = 3//3是H5 625 + GlobalConfig.deviceType = GlobalConfig.deviceH5;
604 loger.warn("设备类型是H5"); 626 loger.warn("设备类型是H5");
605 } 627 }
606 628
@@ -619,25 +641,27 @@ export default class MessageEntrance extends Emiter { @@ -619,25 +641,27 @@ export default class MessageEntrance extends Emiter {
619 GlobalConfig.userRole != ApeConsts.invisible) { 641 GlobalConfig.userRole != ApeConsts.invisible) {
620 GlobalConfig.userRole = ApeConsts.normal; 642 GlobalConfig.userRole = ApeConsts.normal;
621 } 643 }
622 - //如果没有名字或没有userId的时候,需要随机生成  
623 - let timestampStr = new Date().getTime().toString();  
624 - timestampStr = timestampStr.substr(timestampStr.length - 4); 644 +
  645 +
  646 + //如果没有名字的时候需要随机生成
  647 + let randUserId =parseInt(Math.random()*1000)+""+parseInt(Math.random()*1000)+""+parseInt(Math.random()*1000);
625 if (GlobalConfig.userRole == ApeConsts.host) { 648 if (GlobalConfig.userRole == ApeConsts.host) {
626 - timestampStr = "T" + timestampStr; 649 + randUserId = "T" + randUserId;
627 } else if (GlobalConfig.userRole == ApeConsts.assistant) { 650 } else if (GlobalConfig.userRole == ApeConsts.assistant) {
628 - timestampStr = "A" + timestampStr; 651 + randUserId = "A" + randUserId;
629 } else if (GlobalConfig.userRole == ApeConsts.presenter) { 652 } else if (GlobalConfig.userRole == ApeConsts.presenter) {
630 - timestampStr = "P" + timestampStr; 653 + randUserId = "P" + randUserId;
631 } else { 654 } else {
632 - timestampStr = "S" + timestampStr; 655 + randUserId = "S" + randUserId;
633 } 656 }
  657 +
634 //如果没有名字,随机起一个名字 658 //如果没有名字,随机起一个名字
635 - GlobalConfig.userName = _param.userName || timestampStr; 659 + GlobalConfig.userName = _param.userName || randUserId;
636 //如果没有userId或者为"0",随机生成 660 //如果没有userId或者为"0",随机生成
637 if (!GlobalConfig.userId || GlobalConfig.userId == "0") { 661 if (!GlobalConfig.userId || GlobalConfig.userId == "0") {
638 - GlobalConfig.userId = timestampStr; 662 + GlobalConfig.userId = randUserId;
639 } 663 }
640 - 664 + console.log("userId", GlobalConfig.userId);
641 //客户端决定是否延迟接收消息 665 //客户端决定是否延迟接收消息
642 GlobalConfig.messageDelay = _param.messageDelay || false; 666 GlobalConfig.messageDelay = _param.messageDelay || false;
643 667
@@ -696,7 +720,7 @@ export default class MessageEntrance extends Emiter { @@ -696,7 +720,7 @@ export default class MessageEntrance extends Emiter {
696 GlobalConfig.md5 = _data.md5 || ""; //这个暂时用假数据,后台接口写完就有数据了 720 GlobalConfig.md5 = _data.md5 || ""; //这个暂时用假数据,后台接口写完就有数据了
697 GlobalConfig.msType = _data.msType || 1; 721 GlobalConfig.msType = _data.msType || 1;
698 GlobalConfig.siteId = _data.siteId || ""; 722 GlobalConfig.siteId = _data.siteId || "";
699 - GlobalConfig.classType = _data.meetingType || ApeConsts.CLASS_TYPE_1; 723 + GlobalConfig.classType = _data.meetingType || ApeConsts.CLASS_TYPE_1v1;
700 724
701 //host默认需要密码,Sass服务器只判断学生是否需要密码,没有判断老师的 725 //host默认需要密码,Sass服务器只判断学生是否需要密码,没有判断老师的
702 GlobalConfig.passwordRequired = _data.passwordRequired || false; //md5验证的时候需要Sass返回的值,不能更改 726 GlobalConfig.passwordRequired = _data.passwordRequired || false; //md5验证的时候需要Sass返回的值,不能更改
@@ -1211,7 +1235,7 @@ export default class MessageEntrance extends Emiter { @@ -1211,7 +1235,7 @@ export default class MessageEntrance extends Emiter {
1211 joinClassSuccessCallBackData.userRole = GlobalConfig.userRole; 1235 joinClassSuccessCallBackData.userRole = GlobalConfig.userRole;
1212 joinClassSuccessCallBackData.userId = GlobalConfig.userId; 1236 joinClassSuccessCallBackData.userId = GlobalConfig.userId;
1213 joinClassSuccessCallBackData.passwordRequired = GlobalConfig.passwordRequired; 1237 joinClassSuccessCallBackData.passwordRequired = GlobalConfig.passwordRequired;
1214 - joinClassSuccessCallBackData.classType = GlobalConfig.classType || ApeConsts.CLASS_TYPE_1; 1238 + joinClassSuccessCallBackData.classType = GlobalConfig.classType || ApeConsts.CLASS_TYPE_1v1;
1215 1239
1216 joinClassSuccessCallBackData.country = GlobalConfig.country; //国家 1240 joinClassSuccessCallBackData.country = GlobalConfig.country; //国家
1217 joinClassSuccessCallBackData.city = GlobalConfig.city; //城市 1241 joinClassSuccessCallBackData.city = GlobalConfig.city; //城市
@@ -1360,12 +1384,12 @@ export default class MessageEntrance extends Emiter { @@ -1360,12 +1384,12 @@ export default class MessageEntrance extends Emiter {
1360 //用更状态数据发送变更 1384 //用更状态数据发送变更
1361 _onRosterUpdateHandler(_data) { 1385 _onRosterUpdateHandler(_data) {
1362 //数据无效/ios/android 不处理数据 1386 //数据无效/ios/android 不处理数据
1363 - if (!_data || GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 1387 + if (!_data || GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
1364 return; 1388 return;
1365 } 1389 }
1366 let nodeData = _data.nodeData; 1390 let nodeData = _data.nodeData;
1367 //数据用户是pc或H5不处理 1391 //数据用户是pc或H5不处理
1368 - if (!nodeData || nodeData.deviceType == 0 || nodeData.deviceType == 3) { 1392 + if (!nodeData || nodeData.deviceType == GlobalConfig.devicePC || nodeData.deviceType == GlobalConfig.deviceH5) {
1369 return; 1393 return;
1370 } 1394 }
1371 if (nodeData.openCamera > 0 && _webRtc) { 1395 if (nodeData.openCamera > 0 && _webRtc) {
@@ -1572,7 +1596,6 @@ export default class MessageEntrance extends Emiter { @@ -1572,7 +1596,6 @@ export default class MessageEntrance extends Emiter {
1572 //开始上课 1596 //开始上课
1573 _confer_ape.startClass(_param); 1597 _confer_ape.startClass(_param);
1574 ////开始录制 1598 ////开始录制
1575 - //_confer_ape.startRecord();  
1576 } 1599 }
1577 } 1600 }
1578 1601
@@ -2564,8 +2587,8 @@ export default class MessageEntrance extends Emiter { @@ -2564,8 +2587,8 @@ export default class MessageEntrance extends Emiter {
2564 2587
2565 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传 2588 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
2566 if (GlobalConfig.docListPrepare && GlobalConfig.docListPrepare.length > 0) { 2589 if (GlobalConfig.docListPrepare && GlobalConfig.docListPrepare.length > 0) {
2567 - //如果当前身份是老师或者当前课堂内只有一个人,有权限同步文档到MCU  
2568 - if (GlobalConfig.isHost || GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=3) { 2590 + //如果当前身份是老师或者当前课堂内只有一个人并且不是H5,有权限同步文档到MCU
  2591 + if (GlobalConfig.isHost || (GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) {
2569 for (let i = 0; i < GlobalConfig.docListPrepare.length; i++) { 2592 for (let i = 0; i < GlobalConfig.docListPrepare.length; i++) {
2570 let value = GlobalConfig.docListPrepare[i]; 2593 let value = GlobalConfig.docListPrepare[i];
2571 if (value) { 2594 if (value) {
@@ -2759,7 +2782,7 @@ export default class MessageEntrance extends Emiter { @@ -2759,7 +2782,7 @@ export default class MessageEntrance extends Emiter {
2759 //loger.log("伴音MUSIC模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.musicListPrepare.length); 2782 //loger.log("伴音MUSIC模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.musicListPrepare.length);
2760 //console.log("伴音MUSIC模块共享模数据->", GlobalConfig.musicListPrepare); 2783 //console.log("伴音MUSIC模块共享模数据->", GlobalConfig.musicListPrepare);
2761 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传 2784 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
2762 - if (GlobalConfig.isHost && GlobalConfig.musicListPrepare.length > 0&&GlobalConfig.deviceType!=3) { 2785 + if (GlobalConfig.isHost && GlobalConfig.musicListPrepare.length > 0&&GlobalConfig.deviceType!=GlobalConfig.deviceH5) {
2763 for (let i = 0; i < GlobalConfig.musicListPrepare.length; i++) { 2786 for (let i = 0; i < GlobalConfig.musicListPrepare.length; i++) {
2764 let value = GlobalConfig.musicListPrepare[i]; 2787 let value = GlobalConfig.musicListPrepare[i];
2765 if (value) { 2788 if (value) {
@@ -2790,7 +2813,7 @@ export default class MessageEntrance extends Emiter { @@ -2790,7 +2813,7 @@ export default class MessageEntrance extends Emiter {
2790 //loger.log("媒体共享模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.sharedMediaList.length); 2813 //loger.log("媒体共享模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.sharedMediaList.length);
2791 //console.log("媒体共享模数据->", GlobalConfig.sharedMediaList); 2814 //console.log("媒体共享模数据->", GlobalConfig.sharedMediaList);
2792 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传 2815 //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
2793 - if (GlobalConfig.isHost && GlobalConfig.sharedMediaList.length > 0&&GlobalConfig.deviceType!=3) { 2816 + if (GlobalConfig.isHost && GlobalConfig.sharedMediaList.length > 0&&GlobalConfig.deviceType!=GlobalConfig.deviceH5) {
2794 for (let i = 0; i < GlobalConfig.sharedMediaList.length; i++) { 2817 for (let i = 0; i < GlobalConfig.sharedMediaList.length; i++) {
2795 let value = GlobalConfig.sharedMediaList[i]; 2818 let value = GlobalConfig.sharedMediaList[i];
2796 if (value) { 2819 if (value) {
@@ -2943,7 +2966,7 @@ export default class MessageEntrance extends Emiter { @@ -2943,7 +2966,7 @@ export default class MessageEntrance extends Emiter {
2943 joinClassSuccessCallBackData.userRole = GlobalConfig.userRole; 2966 joinClassSuccessCallBackData.userRole = GlobalConfig.userRole;
2944 joinClassSuccessCallBackData.userId = GlobalConfig.userId; 2967 joinClassSuccessCallBackData.userId = GlobalConfig.userId;
2945 joinClassSuccessCallBackData.passwordRequired = GlobalConfig.passwordRequired; 2968 joinClassSuccessCallBackData.passwordRequired = GlobalConfig.passwordRequired;
2946 - joinClassSuccessCallBackData.classType = GlobalConfig.classType || ApeConsts.CLASS_TYPE_1; 2969 + joinClassSuccessCallBackData.classType = GlobalConfig.classType || ApeConsts.CLASS_TYPE_1v1;
2947 2970
2948 joinClassSuccessCallBackData.country = GlobalConfig.country; //国家 2971 joinClassSuccessCallBackData.country = GlobalConfig.country; //国家
2949 joinClassSuccessCallBackData.city = GlobalConfig.city; //城市 2972 joinClassSuccessCallBackData.city = GlobalConfig.city; //城市
@@ -3029,7 +3052,7 @@ export default class MessageEntrance extends Emiter { @@ -3029,7 +3052,7 @@ export default class MessageEntrance extends Emiter {
3029 * 初始化webRtc 3052 * 初始化webRtc
3030 * */ 3053 * */
3031 _initWebRtcSdk(_params, _callback) { 3054 _initWebRtcSdk(_params, _callback) {
3032 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2 || GlobalConfig.deviceType == 3) { 3055 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid || GlobalConfig.deviceType == GlobalConfig.deviceH5) {
3033 loger.warn("移动端不需要处理初始化webRtc"); 3056 loger.warn("移动端不需要处理初始化webRtc");
3034 if (_callback) { 3057 if (_callback) {
3035 _callback(); 3058 _callback();
@@ -3104,7 +3127,7 @@ export default class MessageEntrance extends Emiter { @@ -3104,7 +3127,7 @@ export default class MessageEntrance extends Emiter {
3104 * 加入视频通话 3127 * 加入视频通话
3105 * */ 3128 * */
3106 _joinChannel(_params) { 3129 _joinChannel(_params) {
3107 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3130 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3108 loger.warn("移动端不需要处理加入视频房间"); 3131 loger.warn("移动端不需要处理加入视频房间");
3109 return; 3132 return;
3110 } 3133 }
@@ -3117,7 +3140,7 @@ export default class MessageEntrance extends Emiter { @@ -3117,7 +3140,7 @@ export default class MessageEntrance extends Emiter {
3117 * 离开视频通话频道 3140 * 离开视频通话频道
3118 * */ 3141 * */
3119 _leaveChannel(_params) { 3142 _leaveChannel(_params) {
3120 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3143 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3121 return; 3144 return;
3122 } 3145 }
3123 if (_webRtc) { 3146 if (_webRtc) {
@@ -3139,7 +3162,7 @@ export default class MessageEntrance extends Emiter { @@ -3139,7 +3162,7 @@ export default class MessageEntrance extends Emiter {
3139 return; 3162 return;
3140 } 3163 }
3141 //ios和安卓的只需要更新数据即可 3164 //ios和安卓的只需要更新数据即可
3142 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3165 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3143 loger.log("调用webRtc推流"); 3166 loger.log("调用webRtc推流");
3144 GlobalConfig.openCamera = EngineUtils.creatTimestamp(); 3167 GlobalConfig.openCamera = EngineUtils.creatTimestamp();
3145 GlobalConfig.openMicrophones = GlobalConfig.openCamera; 3168 GlobalConfig.openMicrophones = GlobalConfig.openCamera;
@@ -3167,7 +3190,7 @@ export default class MessageEntrance extends Emiter { @@ -3167,7 +3190,7 @@ export default class MessageEntrance extends Emiter {
3167 * */ 3190 * */
3168 _unpublishMedia(_params) { 3191 _unpublishMedia(_params) {
3169 //ios和安卓的只需要更新数据即可 3192 //ios和安卓的只需要更新数据即可
3170 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3193 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3171 loger.log("调用webRtc停止推流"); 3194 loger.log("调用webRtc停止推流");
3172 GlobalConfig.openCamera = 0; 3195 GlobalConfig.openCamera = 0;
3173 GlobalConfig.openMicrophones = 0; 3196 GlobalConfig.openMicrophones = 0;
@@ -3193,7 +3216,7 @@ export default class MessageEntrance extends Emiter { @@ -3193,7 +3216,7 @@ export default class MessageEntrance extends Emiter {
3193 * 切换摄像头和麦克风设备 3216 * 切换摄像头和麦克风设备
3194 * */ 3217 * */
3195 _changeDevices(_params) { 3218 _changeDevices(_params) {
3196 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3219 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3197 return; 3220 return;
3198 } 3221 }
3199 if (_webRtc) { 3222 if (_webRtc) {
@@ -3205,7 +3228,7 @@ export default class MessageEntrance extends Emiter { @@ -3205,7 +3228,7 @@ export default class MessageEntrance extends Emiter {
3205 * 设置旁路推流 3228 * 设置旁路推流
3206 * */ 3229 * */
3207 _setConfigPublisher(_params) { 3230 _setConfigPublisher(_params) {
3208 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3231 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3209 return; 3232 return;
3210 } 3233 }
3211 if (_webRtc) { 3234 if (_webRtc) {
@@ -3217,7 +3240,7 @@ export default class MessageEntrance extends Emiter { @@ -3217,7 +3240,7 @@ export default class MessageEntrance extends Emiter {
3217 * 设置本地video视图 3240 * 设置本地video视图
3218 * */ 3241 * */
3219 _setLocalMediaView(_params) { 3242 _setLocalMediaView(_params) {
3220 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3243 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3221 return; 3244 return;
3222 } 3245 }
3223 if (_webRtc) { 3246 if (_webRtc) {
@@ -3229,7 +3252,7 @@ export default class MessageEntrance extends Emiter { @@ -3229,7 +3252,7 @@ export default class MessageEntrance extends Emiter {
3229 * 设置房间内老师身份的视图 3252 * 设置房间内老师身份的视图
3230 * */ 3253 * */
3231 _setHostRemoteMediaView(_params) { 3254 _setHostRemoteMediaView(_params) {
3232 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3255 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3233 return; 3256 return;
3234 } 3257 }
3235 if (_webRtc) { 3258 if (_webRtc) {
@@ -3241,7 +3264,7 @@ export default class MessageEntrance extends Emiter { @@ -3241,7 +3264,7 @@ export default class MessageEntrance extends Emiter {
3241 * 设置房间内普通身份的视图 3264 * 设置房间内普通身份的视图
3242 * */ 3265 * */
3243 _setNormalRemoteMediaView(_params) { 3266 _setNormalRemoteMediaView(_params) {
3244 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3267 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3245 return; 3268 return;
3246 } 3269 }
3247 if (_webRtc) { 3270 if (_webRtc) {
@@ -3257,7 +3280,7 @@ export default class MessageEntrance extends Emiter { @@ -3257,7 +3280,7 @@ export default class MessageEntrance extends Emiter {
3257 if (!_params) { 3280 if (!_params) {
3258 return; 3281 return;
3259 } 3282 }
3260 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3283 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3261 return; 3284 return;
3262 } 3285 }
3263 if (_webRtc) { 3286 if (_webRtc) {
@@ -3283,7 +3306,7 @@ export default class MessageEntrance extends Emiter { @@ -3283,7 +3306,7 @@ export default class MessageEntrance extends Emiter {
3283 * 设置监课和需要隐藏显示的用户视图 3306 * 设置监课和需要隐藏显示的用户视图
3284 * */ 3307 * */
3285 _setInvisibleMediaView(_params) { 3308 _setInvisibleMediaView(_params) {
3286 - if (GlobalConfig.deviceType == 1 || GlobalConfig.deviceType == 2) { 3309 + if (GlobalConfig.deviceType == GlobalConfig.deviceIOS || GlobalConfig.deviceType == GlobalConfig.deviceAndroid) {
3287 return; 3310 return;
3288 } 3311 }
3289 if (_webRtc) { 3312 if (_webRtc) {
@@ -15,18 +15,20 @@ @@ -15,18 +15,20 @@
15 import Emiter from 'Emiter'; 15 import Emiter from 'Emiter';
16 import Loger from 'Loger'; 16 import Loger from 'Loger';
17 import GlobalConfig from 'GlobalConfig'; 17 import GlobalConfig from 'GlobalConfig';
  18 +import EngineUtils from 'EngineUtils';
18 import LogManager from 'LogManager'; 19 import LogManager from 'LogManager';
19 let loger = Loger.getLoger('EverSocket'); 20 let loger = Loger.getLoger('EverSocket');
20 const MCU_MAX_RECONNECTION = 3;//最多重连次数 21 const MCU_MAX_RECONNECTION = 3;//最多重连次数
21 class EverSocket extends Emiter { 22 class EverSocket extends Emiter {
22 constructor() { 23 constructor() {
23 super(); 24 super();
  25 + this.sendToMcuList=[];//发送到MCU的数据记录
  26 + this.receiveFromMcuList=[];//接到MCU的数据记录
24 this.mcuReconnectCounter=0;//(重要)记录mcu连续重连的次数,最大连续8次就不再重连 27 this.mcuReconnectCounter=0;//(重要)记录mcu连续重连的次数,最大连续8次就不再重连
25 this._connected = false; 28 this._connected = false;
26 this._lastActiveTime = 0;//最后一次收到消息的时间 29 this._lastActiveTime = 0;//最后一次收到消息的时间
27 this._enableEverSocket = false; 30 this._enableEverSocket = false;
28 this.reConnectionCounter = 0;//重连次数 31 this.reConnectionCounter = 0;//重连次数
29 -  
30 } 32 }
31 33
32 begin(ip, port) { 34 begin(ip, port) {
@@ -68,17 +70,25 @@ class EverSocket extends Emiter { @@ -68,17 +70,25 @@ class EverSocket extends Emiter {
68 return this._connected; 70 return this._connected;
69 } 71 }
70 72
71 - send(data) { 73 + send(data,type) {
72 if (this._connected) { 74 if (this._connected) {
73 if (data) { 75 if (data) {
74 let len=data.byteLength; 76 let len=data.byteLength;
  77 + //超过1024 警告提示
75 if (len> 1024) { 78 if (len> 1024) {
76 - loger.warn('发送到MCU的数据文件超过1k-->byteLength->', len); 79 + loger.warn('发送到MCU的数据文件超过1k-->byteLength->'+len,"type:"+type);
77 } 80 }
  81 + //大于10k 不发送
78 if (len>=1024*10) { 82 if (len>=1024*10) {
79 - loger.warn('发送到MCU的数据文件超过10k-->byteLength->', len); 83 + loger.warn('发送到MCU的数据文件超过10k-->byteLength->'+len,"type:"+type);
80 return; 84 return;
81 } 85 }
  86 +
  87 + this.sendToMcuList.push("c2s_"+EngineUtils.creatTimestampStr()+"_"+len+"_"+type);
  88 + if(this.sendToMcuList.length>80){
  89 + loger.log("发送到MCU数据统计->",this.sendToMcuList);
  90 + this.sendToMcuList=[];
  91 + }
82 } 92 }
83 this.websocket.send(data); 93 this.websocket.send(data);
84 } else { 94 } else {
@@ -206,8 +216,14 @@ class EverSocket extends Emiter { @@ -206,8 +216,14 @@ class EverSocket extends Emiter {
206 _onMessage(messageEvent) { 216 _onMessage(messageEvent) {
207 this._lastActiveTime = Date.now(); 217 this._lastActiveTime = Date.now();
208 const bufferData = messageEvent.data; 218 const bufferData = messageEvent.data;
209 - //loger.log('RECEIVE MESSAGE-->byteLength->',bufferData.byteLength);  
210 - if (bufferData.byteLength > 0) { 219 + //loger.log('RECEIVE-->byteLength->',bufferData.byteLength);
  220 + let len=bufferData.byteLength;
  221 + this.receiveFromMcuList.push("s2c_"+EngineUtils.creatTimestampStr()+"_"+len);
  222 + if(this.receiveFromMcuList.length>80){
  223 + loger.log("收到MCU数据统计->",this.receiveFromMcuList);
  224 + this.receiveFromMcuList=[];
  225 + }
  226 + if (len> 0) {
211 this._emit(EverSocket.MESSAGE, bufferData); 227 this._emit(EverSocket.MESSAGE, bufferData);
212 } 228 }
213 } 229 }
@@ -542,7 +542,13 @@ GlobalConfig.hasCamera = false; //摄像头是否可用 @@ -542,7 +542,13 @@ GlobalConfig.hasCamera = false; //摄像头是否可用
542 GlobalConfig.hasMicrophone = false; //麦克风是否可用 542 GlobalConfig.hasMicrophone = false; //麦克风是否可用
543 543
544 GlobalConfig.returnCitySN = null;//获取的ip数据 {"cip":"60.253.214.122","cid":"110000","cname":"北京市"} 544 GlobalConfig.returnCitySN = null;//获取的ip数据 {"cip":"60.253.214.122","cid":"110000","cname":"北京市"}
545 -GlobalConfig.deviceType = 0; //设备类型 0:电脑 1:ios 2:安卓 545 +//设备类型 0:电脑 1:ios 2:安卓 3 h5
  546 +GlobalConfig.deviceType = 0;
  547 +GlobalConfig.devicePC=0;
  548 +GlobalConfig.deviceIOS=1;
  549 +GlobalConfig.deviceAndroid=2;
  550 +GlobalConfig.deviceH5=3;
  551 +
546 GlobalConfig.userIp = ""; //用户当前IP 552 GlobalConfig.userIp = ""; //用户当前IP
547 GlobalConfig.userId = 0; 553 GlobalConfig.userId = 0;
548 GlobalConfig.paramUserId=0; 554 GlobalConfig.paramUserId=0;
@@ -588,7 +594,7 @@ GlobalConfig.topNodeID = 101; //现在固定值,还不知道是做什么用 @@ -588,7 +594,7 @@ GlobalConfig.topNodeID = 101; //现在固定值,还不知道是做什么用
588 GlobalConfig.siteId = ""; //站点号 594 GlobalConfig.siteId = ""; //站点号
589 GlobalConfig.className = ""; // 课程名称 595 GlobalConfig.className = ""; // 课程名称
590 GlobalConfig.classId = 0; //课堂号=classId=meetingNumber 之后统一修改为classId 596 GlobalConfig.classId = 0; //课堂号=classId=meetingNumber 之后统一修改为classId
591 -GlobalConfig.classType = ApeConsts.CLASS_TYPE_1; //课堂类型 597 +GlobalConfig.classType = ApeConsts.CLASS_TYPE_1v1; //课堂类型
592 GlobalConfig.classStatus = ApeConsts.CLASS_STATUS_WAIT; // 0;//课堂还未开始 1;//直播中 2 //课间休息 3已经停止 598 GlobalConfig.classStatus = ApeConsts.CLASS_STATUS_WAIT; // 0;//课堂还未开始 1;//直播中 2 //课间休息 3已经停止
593 GlobalConfig.classStartTime = ""; //课堂点击开始时间 599 GlobalConfig.classStartTime = ""; //课堂点击开始时间
594 GlobalConfig.classStopTime = ""; //最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳 600 GlobalConfig.classStopTime = ""; //最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳
@@ -29,9 +29,9 @@ ApeConsts.STOP_ALL_PUBLISH=5; //所有人停止推流 @@ -29,9 +29,9 @@ ApeConsts.STOP_ALL_PUBLISH=5; //所有人停止推流
29 ApeConsts.CLASS_ACTION_DRAW_STATUS_CHANGE = 6; //更改用户的画笔状态 29 ApeConsts.CLASS_ACTION_DRAW_STATUS_CHANGE = 6; //更改用户的画笔状态
30 30
31 //课堂类型 1:1v1(2路流) 2:直播(1路流) 3:小班课(可以多路流) 31 //课堂类型 1:1v1(2路流) 2:直播(1路流) 3:小班课(可以多路流)
32 -ApeConsts.CLASS_TYPE_1 = 1; // 互动课堂,通过MS转发音视频,不能进行H5观看 1v1(2路流)  
33 -ApeConsts.CLASS_TYPE_2 = 2; // 直播课堂,通过CDN转发音视频,不能进行音视频互动 :直播(1路流)  
34 -ApeConsts.CLASS_TYPE_3 = 3; // 小班课,通过CDN转发音视频,不能进行音视频互动 ::小班课(可以多路流) 32 +ApeConsts.CLASS_TYPE_1v1 = 1; // 互动课堂,通过MS转发音视频,不能进行H5观看 1v1(2路流)
  33 +ApeConsts.CLASS_TYPE_ZHIBO = 2; // 直播课堂,通过CDN转发音视频,不能进行音视频互动 :直播(1路流)
  34 +ApeConsts.CLASS_TYPE_XIAOBAN = 3; // 小班课,通过CDN转发音视频,不能进行音视频互动 ::小班课(可以多路流)
35 35
36 //角色身份 36 //角色身份
37 //ApeConsts.NR_GUEST = 0; // 客人 37 //ApeConsts.NR_GUEST = 0; // 客人
@@ -410,7 +410,7 @@ class AudioApe extends Ape { @@ -410,7 +410,7 @@ class AudioApe extends Ape {
410 receiveChannelInfo.mediaType = unpackChannelInfo.mediaType || ApeConsts.MEDIA_TYPE_DEFAULT; 410 receiveChannelInfo.mediaType = unpackChannelInfo.mediaType || ApeConsts.MEDIA_TYPE_DEFAULT;
411 receiveChannelInfo.screenWidth = unpackChannelInfo.screenWidth || GlobalConfig.screenWidth; 411 receiveChannelInfo.screenWidth = unpackChannelInfo.screenWidth || GlobalConfig.screenWidth;
412 receiveChannelInfo.screenHeight = unpackChannelInfo.screenHeight || GlobalConfig.screenHeight; 412 receiveChannelInfo.screenHeight = unpackChannelInfo.screenHeight || GlobalConfig.screenHeight;
413 - receiveChannelInfo.deviceType = unpackChannelInfo.deviceType || 0; 413 + receiveChannelInfo.deviceType = unpackChannelInfo.deviceType || GlobalConfig.devicePC;
414 receiveChannelInfo.optionJsonData = unpackChannelInfo.optionJsonData || ""; 414 receiveChannelInfo.optionJsonData = unpackChannelInfo.optionJsonData || "";
415 415
416 //消息不是自己同步的,需要处理 416 //消息不是自己同步的,需要处理
@@ -23,7 +23,7 @@ class ConferApe extends Ape { @@ -23,7 +23,7 @@ class ConferApe extends Ape {
23 ApeConsts.CONFERENCE_SESSION_NAME, 23 ApeConsts.CONFERENCE_SESSION_NAME,
24 ApeConsts.CONFERENCE_SESSION_TAG 24 ApeConsts.CONFERENCE_SESSION_TAG
25 ); 25 );
26 - 26 + this.isLeave=false;//记录自己是否已经离开
27 this.rosters = {}; //用户列表 27 this.rosters = {}; //用户列表
28 this.rosterLen = 0;//当前课堂人数 28 this.rosterLen = 0;//当前课堂人数
29 this.timerCounter = new TimerCounter(); //计时器 29 this.timerCounter = new TimerCounter(); //计时器
@@ -160,7 +160,7 @@ class ConferApe extends Ape { @@ -160,7 +160,7 @@ class ConferApe extends Ape {
160 160
161 //更新角色数据 161 //更新角色数据
162 updateUserInfo() { 162 updateUserInfo() {
163 - if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2&&GlobalConfig.isH5==true){ 163 + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5==true){
164 //直播模式下H5不处理更新信息 164 //直播模式下H5不处理更新信息
165 console.log("直播模式下H5不处理用户更新信息"); 165 console.log("直播模式下H5不处理用户更新信息");
166 return; 166 return;
@@ -207,7 +207,7 @@ class ConferApe extends Ape { @@ -207,7 +207,7 @@ class ConferApe extends Ape {
207 } 207 }
208 return; 208 return;
209 } 209 }
210 - if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2&&GlobalConfig.isH5){ 210 + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5){
211 loger.warn("直播模式H5不能发送课堂控制消息"); 211 loger.warn("直播模式H5不能发送课堂控制消息");
212 return; 212 return;
213 } 213 }
@@ -308,7 +308,7 @@ class ConferApe extends Ape { @@ -308,7 +308,7 @@ class ConferApe extends Ape {
308 checkHasRecordControl() { 308 checkHasRecordControl() {
309 //loger.warn('检测是否有控制录制操作的权限', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen); 309 //loger.warn('检测是否有控制录制操作的权限', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen);
310 //1.如果自己是老师或者当前课堂只有一个人 310 //1.如果自己是老师或者当前课堂只有一个人
311 - if (GlobalConfig.isHost || (this.rosterLen <= 1&&GlobalConfig.deviceType!=3)) { 311 + if (GlobalConfig.isHost || (this.rosterLen <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) {
312 return true; 312 return true;
313 } 313 }
314 //2.如果自己不是老师,需要判断当前课堂内是否有老师,如果有老师就不做操作 314 //2.如果自己不是老师,需要判断当前课堂内是否有老师,如果有老师就不做操作
@@ -1022,7 +1022,7 @@ class ConferApe extends Ape { @@ -1022,7 +1022,7 @@ class ConferApe extends Ape {
1022 this.rosterLen = Object.keys(this.rosters).length; 1022 this.rosterLen = Object.keys(this.rosters).length;
1023 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 1023 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数
1024 newNodeData.rosterLen = this.rosterLen; 1024 newNodeData.rosterLen = this.rosterLen;
1025 - if(GlobalConfig.classType!= ApeConsts.CLASS_TYPE_2){ 1025 + if(GlobalConfig.classType!= ApeConsts.CLASS_TYPE_ZHIBO){
1026 loger.log("人员加入->", newNodeData); 1026 loger.log("人员加入->", newNodeData);
1027 } 1027 }
1028 1028
@@ -1034,7 +1034,7 @@ class ConferApe extends Ape { @@ -1034,7 +1034,7 @@ class ConferApe extends Ape {
1034 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 1034 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数
1035 newNodeData.rosterLen = this.rosterLen; 1035 newNodeData.rosterLen = this.rosterLen;
1036 if (nodeId != GlobalConfig.nodeId) { 1036 if (nodeId != GlobalConfig.nodeId) {
1037 - if(GlobalConfig.classType!= ApeConsts.CLASS_TYPE_2){ 1037 + if(GlobalConfig.classType!= ApeConsts.CLASS_TYPE_ZHIBO){
1038 loger.log("人员更新信息->", newNodeData); 1038 loger.log("人员更新信息->", newNodeData);
1039 } 1039 }
1040 } 1040 }
@@ -1065,7 +1065,7 @@ class ConferApe extends Ape { @@ -1065,7 +1065,7 @@ class ConferApe extends Ape {
1065 // 因为会出现先收到视频消息后收到人员加入和更新的消息 1065 // 因为会出现先收到视频消息后收到人员加入和更新的消息
1066 if(this.rosters[_param.fromNodeId] == null&&this.rosterLen>0){ 1066 if(this.rosters[_param.fromNodeId] == null&&this.rosterLen>0){
1067 //H5不做释放处理 1067 //H5不做释放处理
1068 - if(GlobalConfig.deviceType==3){ 1068 + if(GlobalConfig.deviceType==GlobalConfig.deviceH5){
1069 loger.warn("H5不做媒体模块的频道释放->当前总人数->"+this.rosterLen, _param); 1069 loger.warn("H5不做媒体模块的频道释放->当前总人数->"+this.rosterLen, _param);
1070 return ; 1070 return ;
1071 } 1071 }
@@ -1084,8 +1084,9 @@ class ConferApe extends Ape { @@ -1084,8 +1084,9 @@ class ConferApe extends Ape {
1084 //删除用户 1084 //删除用户
1085 rosterDelHandler(nodeId) { 1085 rosterDelHandler(nodeId) {
1086 if (GlobalConfig.nodeId == nodeId) { 1086 if (GlobalConfig.nodeId == nodeId) {
1087 - if(GlobalConfig.classExit==false){  
1088 - loger.log("自己离开课堂"); 1087 + if(GlobalConfig.classExit==false||this.isLeave==false){
  1088 + this.isLeave=true;
  1089 + loger.log("自己离开课堂","classExit:"+GlobalConfig.classExit);
1089 // 自己退出 1090 // 自己退出
1090 this._emit(MessageTypes.CLASS_RUN_EXIT, {'type': 0}); 1091 this._emit(MessageTypes.CLASS_RUN_EXIT, {'type': 0});
1091 } 1092 }
@@ -1094,7 +1095,7 @@ class ConferApe extends Ape { @@ -1094,7 +1095,7 @@ class ConferApe extends Ape {
1094 } else { 1095 } else {
1095 let user = this.rosters[nodeId]; 1096 let user = this.rosters[nodeId];
1096 if (user) { 1097 if (user) {
1097 - if(GlobalConfig.classType!= ApeConsts.CLASS_TYPE_2){ 1098 + if(GlobalConfig.classType!= ApeConsts.CLASS_TYPE_ZHIBO){
1098 loger.log(nodeId, "->离开课堂->身份->", user.userRole); 1099 loger.log(nodeId, "->离开课堂->身份->", user.userRole);
1099 } 1100 }
1100 1101
@@ -1204,6 +1205,7 @@ class ConferApe extends Ape { @@ -1204,6 +1205,7 @@ class ConferApe extends Ape {
1204 this.rosterLen = 0; 1205 this.rosterLen = 0;
1205 GlobalConfig.rosterNumber = this.rosterLen; 1206 GlobalConfig.rosterNumber = this.rosterLen;
1206 GlobalConfig.rosters = this.rosters; 1207 GlobalConfig.rosters = this.rosters;
  1208 + this.isLeave=true;
1207 } 1209 }
1208 1210
1209 } 1211 }
@@ -20,7 +20,7 @@ class VideoApe extends Ape { @@ -20,7 +20,7 @@ class VideoApe extends Ape {
20 ApeConsts.VIDEO_SESSION_NAME, 20 ApeConsts.VIDEO_SESSION_NAME,
21 ApeConsts.VIDEO_SESSION_TAG 21 ApeConsts.VIDEO_SESSION_TAG
22 ); 22 );
23 - 23 + this.isLeave=false;
24 this.mediaModule = new MediaModule(); 24 this.mediaModule = new MediaModule();
25 this.mediaModule.MEDIA_OBJ_TABLE_ID = ApeConsts.VIDEO_OBJ_TABLE_ID; 25 this.mediaModule.MEDIA_OBJ_TABLE_ID = ApeConsts.VIDEO_OBJ_TABLE_ID;
26 this.mediaModule.mediaChannels = {}; 26 this.mediaModule.mediaChannels = {};
@@ -37,7 +37,6 @@ class VideoApe extends Ape { @@ -37,7 +37,6 @@ class VideoApe extends Ape {
37 // Ape Models 37 // Ape Models
38 this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer); 38 this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer);
39 this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.VIDEO_OBJ_TABLE_ID, ApeConsts.VIDEO_OBJ_TABLE_NAME, ApeConsts.VIDEO_OBJ_TABLE_TAG, 0, new ArrayBuffer); 39 this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.VIDEO_OBJ_TABLE_ID, ApeConsts.VIDEO_OBJ_TABLE_NAME, ApeConsts.VIDEO_OBJ_TABLE_TAG, 0, new ArrayBuffer);
40 -  
41 // videoApe 监听视频控制消息,用户之间的消息传递 40 // videoApe 监听视频控制消息,用户之间的消息传递
42 this.on(pdu.RCPDU_SEND_VIDEO_DATA_REQUEST, this.receiveVideoCommandHandler.bind(this)); 41 this.on(pdu.RCPDU_SEND_VIDEO_DATA_REQUEST, this.receiveVideoCommandHandler.bind(this));
43 } 42 }
@@ -425,7 +424,7 @@ class VideoApe extends Ape { @@ -425,7 +424,7 @@ class VideoApe extends Ape {
425 this.sendTableUpdateHandler(channelInfo); 424 this.sendTableUpdateHandler(channelInfo);
426 //递归检查,800毫秒之后执行 425 //递归检查,800毫秒之后执行
427 clearTimeout(this.releaseTimeId); 426 clearTimeout(this.releaseTimeId);
428 - if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2&&GlobalConfig.isH5){ 427 + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5){
429 return; 428 return;
430 } 429 }
431 this.releaseTimeId = setTimeout(function () { 430 this.releaseTimeId = setTimeout(function () {
@@ -498,6 +497,11 @@ class VideoApe extends Ape { @@ -498,6 +497,11 @@ class VideoApe extends Ape {
498 //发送到mcu同步(更新数据) 497 //发送到mcu同步(更新数据)
499 sendTableUpdateHandler(_channelInfo) { 498 sendTableUpdateHandler(_channelInfo) {
500 //loger.log("video===sendTableUpdateHandler "); 499 //loger.log("video===sendTableUpdateHandler ");
  500 + if(GlobalConfig.classExit||this.isLeave){
  501 + //已经离开课堂就不再做处理
  502 + return;
  503 + }
  504 +
501 let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId);//let updateModelPdu=this.packPdu({},ApeConsts.VIDEO_OBJ_TABLE_ID+2); 505 let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId);//let updateModelPdu=this.packPdu({},ApeConsts.VIDEO_OBJ_TABLE_ID+2);
502 506
503 if (updateModelPdu == null) { 507 if (updateModelPdu == null) {
@@ -662,7 +666,7 @@ class VideoApe extends Ape { @@ -662,7 +666,7 @@ class VideoApe extends Ape {
662 receiveChannelInfo.mediaType = unpackChannelInfo.mediaType || ApeConsts.MEDIA_TYPE_DEFAULT; 666 receiveChannelInfo.mediaType = unpackChannelInfo.mediaType || ApeConsts.MEDIA_TYPE_DEFAULT;
663 receiveChannelInfo.screenWidth = unpackChannelInfo.screenWidth || GlobalConfig.screenWidth; 667 receiveChannelInfo.screenWidth = unpackChannelInfo.screenWidth || GlobalConfig.screenWidth;
664 receiveChannelInfo.screenHeight = unpackChannelInfo.screenHeight || GlobalConfig.screenHeight; 668 receiveChannelInfo.screenHeight = unpackChannelInfo.screenHeight || GlobalConfig.screenHeight;
665 - receiveChannelInfo.deviceType = unpackChannelInfo.deviceType || 0; 669 + receiveChannelInfo.deviceType = unpackChannelInfo.deviceType || GlobalConfig.devicePC;
666 receiveChannelInfo.optionJsonData = unpackChannelInfo.optionJsonData || ""; 670 receiveChannelInfo.optionJsonData = unpackChannelInfo.optionJsonData || "";
667 //消息不是自己同步的,需要处理 671 //消息不是自己同步的,需要处理
668 if (unpackChannelInfo.status == ApeConsts.CHANNEL_STATUS_OPENING) { 672 if (unpackChannelInfo.status == ApeConsts.CHANNEL_STATUS_OPENING) {
@@ -782,7 +786,7 @@ class VideoApe extends Ape { @@ -782,7 +786,7 @@ class VideoApe extends Ape {
782 mediaChannelInfo.mediaType = _param.mediaType || ApeConsts.MEDIA_TYPE_DEFAULT; 786 mediaChannelInfo.mediaType = _param.mediaType || ApeConsts.MEDIA_TYPE_DEFAULT;
783 mediaChannelInfo.screenWidth = _param.screenWidth || GlobalConfig.screenWidth; 787 mediaChannelInfo.screenWidth = _param.screenWidth || GlobalConfig.screenWidth;
784 mediaChannelInfo.screenHeight = _param.screenHeight || GlobalConfig.screenHeight; 788 mediaChannelInfo.screenHeight = _param.screenHeight || GlobalConfig.screenHeight;
785 - mediaChannelInfo.deviceType = _param.deviceType || 0; 789 + mediaChannelInfo.deviceType = _param.deviceType || GlobalConfig.devicePC;
786 mediaChannelInfo.optionJsonData = _param.optionJsonData || ""; 790 mediaChannelInfo.optionJsonData = _param.optionJsonData || "";
787 mediaChannelInfo.m3u8Url = ""; 791 mediaChannelInfo.m3u8Url = "";
788 mediaChannelInfo.rtmpUrl = ""; 792 mediaChannelInfo.rtmpUrl = "";
@@ -884,6 +888,9 @@ class VideoApe extends Ape { @@ -884,6 +888,9 @@ class VideoApe extends Ape {
884 } 888 }
885 return null; 889 return null;
886 } 890 }
  891 + stopApe(){
  892 + this.isLeave=true;
  893 + }
887 } 894 }
888 895
889 export default VideoApe; 896 export default VideoApe;
@@ -245,7 +245,7 @@ class WebRtcApe extends Emiter { @@ -245,7 +245,7 @@ class WebRtcApe extends Emiter {
245 $("#"+this.xdyRemote + uid).remove(); 245 $("#"+this.xdyRemote + uid).remove();
246 } 246 }
247 } 247 }
248 - if (user && (user.deviceType == 1 || user.deviceType == 2)) { 248 + if (user && (user.deviceType == GlobalConfig.deviceIOS || user.deviceType == GlobalConfig.deviceAndroid)) {
249 this.remoteVideoList[user.nodeId] = stream; 249 this.remoteVideoList[user.nodeId] = stream;
250 } 250 }
251 } 251 }
@@ -105,7 +105,7 @@ class MCU extends Emiter { @@ -105,7 +105,7 @@ class MCU extends Emiter {
105 pduMsg.set("deviceType", "" + GlobalConfig.deviceType); 105 pduMsg.set("deviceType", "" + GlobalConfig.deviceType);
106 pduMsg.set("data", joinRequestPdu.toArrayBuffer()); 106 pduMsg.set("data", joinRequestPdu.toArrayBuffer());
107 107
108 - this._everSocket.send(pduMsg.toArrayBuffer()); 108 + this._everSocket.send(pduMsg.toArrayBuffer(),joinRequestPdu.type);
109 } 109 }
110 110
111 // EverSocket底层消息处理 111 // EverSocket底层消息处理
@@ -197,7 +197,7 @@ class MCU extends Emiter { @@ -197,7 +197,7 @@ class MCU extends Emiter {
197 send(msg) { 197 send(msg) {
198 if (this.connected) { 198 if (this.connected) {
199 // loger.log('发送数据到服务端-------------------->'); 199 // loger.log('发送数据到服务端-------------------->');
200 - this._everSocket.send(msg.toArrayBuffer()); 200 + this._everSocket.send(msg.toArrayBuffer(),msg.type);
201 } else { 201 } else {
202 loger.warn('发送数据到服务端-------------------->失败->未连接到服务端'); 202 loger.warn('发送数据到服务端-------------------->失败->未连接到服务端');
203 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_SOCKET_DISCONNECT); 203 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_SOCKET_DISCONNECT);
@@ -209,8 +209,10 @@ class MCU extends Emiter { @@ -209,8 +209,10 @@ class MCU extends Emiter {
209 loger.log('leaveMCU'); 209 loger.log('leaveMCU');
210 GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); 210 GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3);
211 GlobalConfig.classJoinSuccess = false; 211 GlobalConfig.classJoinSuccess = false;
  212 + if( this._everSocket){
212 this._everSocket.end(); 213 this._everSocket.end();
213 } 214 }
  215 + }
214 216
215 // 主动建立MCU连接 217 // 主动建立MCU连接
216 joinMCU(_classInfo) { 218 joinMCU(_classInfo) {
@@ -223,9 +225,15 @@ class MCU extends Emiter { @@ -223,9 +225,15 @@ class MCU extends Emiter {
223 loger.log(_classInfo); 225 loger.log(_classInfo);
224 _classInfo.classId = parseInt(_classInfo.classId); // classId 必须整形 226 _classInfo.classId = parseInt(_classInfo.classId); // classId 必须整形
225 this.classInfo = _classInfo; 227 this.classInfo = _classInfo;
  228 +
226 // 创建刷新nodeId 229 // 创建刷新nodeId
227 - this.classInfo.nodeId = EngineUtils.creatSoleNumberFromTimestamp(); 230 + let randNodeId =parseInt(Math.random()*1000)+""+parseInt(Math.random()*1000)+""+parseInt(Math.random()*1000);
  231 + //生成的字符串nodeId转换为数字
  232 + randNodeId=parseInt(randNodeId);
  233 +
  234 + this.classInfo.nodeId =randNodeId; //EngineUtils.creatSoleNumberFromTimestamp();
228 GlobalConfig.nodeId = this.classInfo.nodeId; //这是标识自己身份的id 235 GlobalConfig.nodeId = this.classInfo.nodeId; //这是标识自己身份的id
  236 + console.log("创建nodeId",GlobalConfig.nodeId);
229 237
230 let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu']; 238 let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu'];
231 nodeInfoRecordPdu.name = this.classInfo.userName; 239 nodeInfoRecordPdu.name = this.classInfo.userName;