李勇

1.最终使用的server信息来源描述 修复;2.被踢出课堂时,增加新进入的人员的信息

@@ -57,7 +57,7 @@ export default class MessageEntrance extends Emiter { @@ -57,7 +57,7 @@ export default class MessageEntrance extends Emiter {
57 constructor() { 57 constructor() {
58 super(); 58 super();
59 //sdk 信息 59 //sdk 信息
60 - GlobalConfig.sdkVersion="v1.61.0.20170729"; 60 + GlobalConfig.sdkVersion="v1.62.3.20170731";
61 loger.warn("sdkVersion:"+GlobalConfig.sdkVersion); 61 loger.warn("sdkVersion:"+GlobalConfig.sdkVersion);
62 62
63 //获取设备和系统信息 63 //获取设备和系统信息
@@ -300,9 +300,22 @@ export default class MessageEntrance extends Emiter { @@ -300,9 +300,22 @@ export default class MessageEntrance extends Emiter {
300 } 300 }
301 301
302 //mcu异常监听 302 //mcu异常监听
303 - _mcuErrorHandler(_data, _option) {  
304 - let option = _option || "";  
305 - let errorMessage = {"code": _data, "reson": MessageTypes.ErrorReson[_data] + " " + option}; 303 + _mcuErrorHandler(_data) {
  304 + let errorMessage={};
  305 +
  306 + //目前只有 userId和身份相同时被踢的时候有type值判断
  307 + switch (_data.type){
  308 + case MessageTypes.ERR_CLASS_KICK_OUT:
  309 + case MessageTypes.ERR_CLASS_REMOTE_LANDING:
  310 + if(_data){
  311 + errorMessage = {"code": _data.type, "reson": MessageTypes.ErrorReson[_data.type],"data":_data.data};
  312 + }
  313 + break;
  314 + default :
  315 + errorMessage = {"code": _data, "reson": MessageTypes.ErrorReson[_data],"data":{}};
  316 + break;
  317 + }
  318 +
306 this._emit(MessageTypes.ERROR_EVENT, errorMessage); 319 this._emit(MessageTypes.ERROR_EVENT, errorMessage);
307 loger.error("MCU_ERROR", errorMessage); 320 loger.error("MCU_ERROR", errorMessage);
308 } 321 }
@@ -736,12 +749,17 @@ export default class MessageEntrance extends Emiter { @@ -736,12 +749,17 @@ export default class MessageEntrance extends Emiter {
736 GlobalConfig.hlsPullListFinal = GlobalConfig.rsPullListFinal; 749 GlobalConfig.hlsPullListFinal = GlobalConfig.rsPullListFinal;
737 } 750 }
738 751
739 - loger.warn("课堂最终使用的服务列表->来自本地Server.json");  
740 - loger.warn(" GlobalConfig.mcuListFinal", GlobalConfig.mcuListFinal);  
741 - loger.warn(" GlobalConfig.msListFinal", GlobalConfig.msListFinal);  
742 - loger.warn(" GlobalConfig.rtmpPullListFinal", GlobalConfig.rtmpPullListFinal);  
743 - loger.warn(" GlobalConfig.hlsListFinal", GlobalConfig.hlsPullListFinal);  
744 - loger.warn(" GlobalConfig.rsListFinal", GlobalConfig.rsPullListFinal); 752 + if(!ServerConfig.localServerJson||!ServerConfig.localServerJson.MCU||!ServerConfig.localServerJson.MS){
  753 + loger.warn("课堂最终使用的服务列表->来自Sass");
  754 + }else {
  755 + loger.warn("课堂最终使用的服务列表->来自本地Server.json");
  756 + }
  757 +
  758 + loger.warn("mcuListFinal", GlobalConfig.mcuListFinal);
  759 + loger.warn("msListFinal", GlobalConfig.msListFinal);
  760 + loger.warn("rtmpPullListFinal", GlobalConfig.rtmpPullListFinal);
  761 + loger.warn("hlsListFinal", GlobalConfig.hlsPullListFinal);
  762 + loger.warn("rsListFinal", GlobalConfig.rsPullListFinal);
745 } 763 }
746 //从Sass中选择的mcu、ms列表 764 //从Sass中选择的mcu、ms列表
747 _choiceMcuAndMsListFromSass() { 765 _choiceMcuAndMsListFromSass() {
@@ -1422,7 +1440,7 @@ export default class MessageEntrance extends Emiter { @@ -1422,7 +1440,7 @@ export default class MessageEntrance extends Emiter {
1422 1440
1423 //是否自动开始(身份是host的时候才用到的) 1441 //是否自动开始(身份是host的时候才用到的)
1424 GlobalConfig.isAutoStartClass = _data.autoRecord || 0; 1442 GlobalConfig.isAutoStartClass = _data.autoRecord || 0;
1425 - 1443 + GlobalConfig.logUrl=_data.logUrl||"";
1426 GlobalConfig.serverTime = _data.serverTime || new Date().getTime(); //获取服务器时间戳 1444 GlobalConfig.serverTime = _data.serverTime || new Date().getTime(); //获取服务器时间戳
1427 GlobalConfig.serverAndLoacTimeDistanc = (new Date().getTime() - GlobalConfig.serverTime) / 1000; //当前系统时间和服务器时间的差值 (秒) 1445 GlobalConfig.serverAndLoacTimeDistanc = (new Date().getTime() - GlobalConfig.serverTime) / 1000; //当前系统时间和服务器时间的差值 (秒)
1428 loger.warn("服务器时间:" + GlobalConfig.serverTime + " 系统时间:" + new Date().getTime() + " 时间差:" + GlobalConfig.serverAndLoacTimeDistanc); 1446 loger.warn("服务器时间:" + GlobalConfig.serverTime + " 系统时间:" + new Date().getTime() + " 时间差:" + GlobalConfig.serverAndLoacTimeDistanc);
@@ -1485,7 +1503,7 @@ export default class MessageEntrance extends Emiter { @@ -1485,7 +1503,7 @@ export default class MessageEntrance extends Emiter {
1485 GlobalConfig.hlsListFinal=GlobalConfig.hlsPullList; 1503 GlobalConfig.hlsListFinal=GlobalConfig.hlsPullList;
1486 GlobalConfig.rsListFinal=GlobalConfig.rsList; 1504 GlobalConfig.rsListFinal=GlobalConfig.rsList;
1487 GlobalConfig.mcuListFinal=GlobalConfig.mcuList;*/ 1505 GlobalConfig.mcuListFinal=GlobalConfig.mcuList;*/
1488 - } 1506 + }
1489 1507
1490 //课堂获取Sass数据完成 1508 //课堂获取Sass数据完成
1491 this._emit(MessageTypes.CLASS_GET_INFO_SUCCESS, GlobalConfig.getClassInfo()); 1509 this._emit(MessageTypes.CLASS_GET_INFO_SUCCESS, GlobalConfig.getClassInfo());
@@ -518,6 +518,7 @@ GlobalConfig.siteId_letv = 'shchuanbao'; //乐视,MS不需要动态选点的 @@ -518,6 +518,7 @@ GlobalConfig.siteId_letv = 'shchuanbao'; //乐视,MS不需要动态选点的
518 GlobalConfig.ssTunnelAppURL = ''; //屏幕共享插件的地址 518 GlobalConfig.ssTunnelAppURL = ''; //屏幕共享插件的地址
519 GlobalConfig.serverTime = 0; //服务器当前时间戳 519 GlobalConfig.serverTime = 0; //服务器当前时间戳
520 GlobalConfig.serverAndLoacTimeDistanc = 0; //本地时间和服务器时间错的差值; 520 GlobalConfig.serverAndLoacTimeDistanc = 0; //本地时间和服务器时间错的差值;
  521 +GlobalConfig.logUrl = ""; //日志上报地址;
521 522
522 GlobalConfig.rosterNumber=0;//当前总人数 523 GlobalConfig.rosterNumber=0;//当前总人数
523 524
@@ -26,7 +26,7 @@ class ConferApe extends Ape { @@ -26,7 +26,7 @@ class ConferApe extends Ape {
26 ); 26 );
27 27
28 this.rosters = {}; //用户列表 28 this.rosters = {}; //用户列表
29 - this.rosterLen=0;//当前课堂人数 29 + this.rosterLen = 0;//当前课堂人数
30 this.timerCounter = new TimerCounter(); //计时器 30 this.timerCounter = new TimerCounter(); //计时器
31 31
32 //第三方消息控制 parent和Iframe直接的通讯 32 //第三方消息控制 parent和Iframe直接的通讯
@@ -150,7 +150,7 @@ class ConferApe extends Ape { @@ -150,7 +150,7 @@ class ConferApe extends Ape {
150 nodeInfoRecordPdu.explorer = GlobalConfig.explorer; 150 nodeInfoRecordPdu.explorer = GlobalConfig.explorer;
151 nodeInfoRecordPdu.explorerVersion = GlobalConfig.explorerVersion; 151 nodeInfoRecordPdu.explorerVersion = GlobalConfig.explorerVersion;
152 nodeInfoRecordPdu.os = GlobalConfig.os; 152 nodeInfoRecordPdu.os = GlobalConfig.os;
153 - nodeInfoRecordPdu.sdkVersion=GlobalConfig.sdkVersion||"未知版本"; 153 + nodeInfoRecordPdu.sdkVersion = GlobalConfig.sdkVersion || "未知版本";
154 154
155 return nodeInfoRecordPdu; 155 return nodeInfoRecordPdu;
156 } 156 }
@@ -449,7 +449,7 @@ class ConferApe extends Ape { @@ -449,7 +449,7 @@ class ConferApe extends Ape {
449 449
450 //将指定nodeId的人踢出课堂 450 //将指定nodeId的人踢出课堂
451 kickOutRosterFormNodeId(_param) { 451 kickOutRosterFormNodeId(_param) {
452 - if(GlobalConfig.isNormal){ 452 + if (GlobalConfig.isNormal) {
453 loger.warn("普通身份没有踢人的权限"); 453 loger.warn("普通身份没有踢人的权限");
454 return; 454 return;
455 } 455 }
@@ -747,10 +747,10 @@ class ConferApe extends Ape { @@ -747,10 +747,10 @@ class ConferApe extends Ape {
747 onThirdReciveParentMessage(_msg) { 747 onThirdReciveParentMessage(_msg) {
748 loger.log('收到页面的消息->广播给其他模块->', _msg); 748 loger.log('收到页面的消息->广播给其他模块->', _msg);
749 //尝试将外部传入的数据转换为JSON 字符串 749 //尝试将外部传入的数据转换为JSON 字符串
750 - let _message=_msg;  
751 - try{  
752 - _message=JSON.parse(_msg);  
753 - }catch(err){ 750 + let _message = _msg;
  751 + try {
  752 + _message = JSON.parse(_msg);
  753 + } catch (err) {
754 754
755 } 755 }
756 this.sendThirdBroadcastData({to: 0, message: _message}); 756 this.sendThirdBroadcastData({to: 0, message: _message});
@@ -773,12 +773,12 @@ class ConferApe extends Ape { @@ -773,12 +773,12 @@ class ConferApe extends Ape {
773 thirdBroadcastSendPdu.initiator = this._classInfo.nodeId; //发起人 773 thirdBroadcastSendPdu.initiator = this._classInfo.nodeId; //发起人
774 thirdBroadcastSendPdu.peer = parseInt(_param.to) || 0; //发送给谁,公聊的时候是0,私聊的时候是指定的用户id 774 thirdBroadcastSendPdu.peer = parseInt(_param.to) || 0; //发送给谁,公聊的时候是0,私聊的时候是指定的用户id
775 thirdBroadcastSendPdu.isPublic = true; 775 thirdBroadcastSendPdu.isPublic = true;
776 - let messageStr=_param.message||""; 776 + let messageStr = _param.message || "";
777 777
778 //尝试把信息转换为JSON 字符串,如果是字符串就不需要转 778 //尝试把信息转换为JSON 字符串,如果是字符串就不需要转
779 - try{  
780 - messageStr=JSON.stringify(messageStr);  
781 - }catch (err){ 779 + try {
  780 + messageStr = JSON.stringify(messageStr);
  781 + } catch (err) {
782 782
783 } 783 }
784 thirdBroadcastSendPdu.message = this._rCArrayBufferUtil.strToUint8Array("h5" + messageStr); 784 thirdBroadcastSendPdu.message = this._rCArrayBufferUtil.strToUint8Array("h5" + messageStr);
@@ -802,7 +802,7 @@ class ConferApe extends Ape { @@ -802,7 +802,7 @@ class ConferApe extends Ape {
802 //loger.log("监听第三方消息通道消息->1", thirdMessage); 802 //loger.log("监听第三方消息通道消息->1", thirdMessage);
803 thirdMessage.message = this._rCArrayBufferUtil.uint8ArrayToStr(thirdBroadcastReceivePdu.message, 2); 803 thirdMessage.message = this._rCArrayBufferUtil.uint8ArrayToStr(thirdBroadcastReceivePdu.message, 2);
804 loger.log("监听第三方消息通道消息->", thirdMessage); 804 loger.log("监听第三方消息通道消息->", thirdMessage);
805 - this._emit(MessageTypes.RECEIVE_THIRD_MESSGAE,thirdMessage); 805 + this._emit(MessageTypes.RECEIVE_THIRD_MESSGAE, thirdMessage);
806 if (this.thirdMessage) { 806 if (this.thirdMessage) {
807 this.thirdMessage.sendMessageToParent(thirdMessage.message); 807 this.thirdMessage.sendMessageToParent(thirdMessage.message);
808 } 808 }
@@ -861,12 +861,19 @@ class ConferApe extends Ape { @@ -861,12 +861,19 @@ class ConferApe extends Ape {
861 //1.判断进入的用户身份,如果进入的人身份是host,助教,监课,并且和自己的身份冲突,自己会被踢掉 861 //1.判断进入的用户身份,如果进入的人身份是host,助教,监课,并且和自己的身份冲突,自己会被踢掉
862 //2.最后进入的人会踢掉之前进入的人,nodeId是按时间戳生成的,最后进入的人nodeId的值比之前进入的人大 862 //2.最后进入的人会踢掉之前进入的人,nodeId是按时间戳生成的,最后进入的人nodeId的值比之前进入的人大
863 if (parseInt(nodeId) > GlobalConfig.nodeId) { 863 if (parseInt(nodeId) > GlobalConfig.nodeId) {
  864 + let newUserInfo = {
  865 + userId: nodeData.userId,
  866 + userName: nodeData.name,
  867 + nodeId: nodeData.nodeId,
  868 + userRole: nodeData.userRole,
  869 + deviceType: nodeData.deviceType
  870 + }
864 if (nodeData.role == ApeConsts.NR_HOST && GlobalConfig.isHost) { 871 if (nodeData.role == ApeConsts.NR_HOST && GlobalConfig.isHost) {
865 - this.kickOutRoster(); 872 + this.kickOutRoster(newUserInfo);
866 return; 873 return;
867 } else if (nodeData.userId == GlobalConfig.userId && GlobalConfig.userId != "0") { 874 } else if (nodeData.userId == GlobalConfig.userId && GlobalConfig.userId != "0") {
868 loger.log("异地登陆->userId->", GlobalConfig.userId); 875 loger.log("异地登陆->userId->", GlobalConfig.userId);
869 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_REMOTE_LANDING); 876 + this._emit(MessageTypes.MCU_ERROR, {type:MessageTypes.ERR_CLASS_REMOTE_LANDING, data:newUserInfo});
870 this._emit(MessageTypes.CLASS_RUN_EXIT, {'type': 1}); 877 this._emit(MessageTypes.CLASS_RUN_EXIT, {'type': 1});
871 } 878 }
872 } 879 }
@@ -912,26 +919,33 @@ class ConferApe extends Ape { @@ -912,26 +919,33 @@ class ConferApe extends Ape {
912 loger.log("NR_INVISIBLE"); 919 loger.log("NR_INVISIBLE");
913 return; 920 return;
914 } 921 }
915 - if (!rosterExists){  
916 - this.rosterLen=Object.keys(this.rosters).length; 922 + if (!rosterExists) {
  923 + this.rosterLen = Object.keys(this.rosters).length;
917 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 924 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数
918 - newNodeData.rosterLen=this.rosterLen; 925 + newNodeData.rosterLen = this.rosterLen;
919 loger.log("人员加入->", newNodeData); 926 loger.log("人员加入->", newNodeData);
920 this._emit(MessageTypes.CLASS_INSERT_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData}); 927 this._emit(MessageTypes.CLASS_INSERT_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData});
921 this.emitRosterChange(); 928 this.emitRosterChange();
922 } else { 929 } else {
923 //loger.log("更新人员列表数据,rosterExists已经存在",rosterExists); 930 //loger.log("更新人员列表数据,rosterExists已经存在",rosterExists);
924 - this.rosterLen=Object.keys(this.rosters).length; 931 + this.rosterLen = Object.keys(this.rosters).length;
925 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 932 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数
926 - newNodeData.rosterLen=this.rosterLen; 933 + newNodeData.rosterLen = this.rosterLen;
927 loger.log("人员更新信息->", newNodeData); 934 loger.log("人员更新信息->", newNodeData);
928 this._emit(MessageTypes.CLASS_UPDATE_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData}); 935 this._emit(MessageTypes.CLASS_UPDATE_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData});
929 } 936 }
930 } 937 }
931 938
932 - //踢出用户  
933 - kickOutRoster() {  
934 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_KICK_OUT); 939 + //踢出用户(_param是新进入的人的信息)
  940 + kickOutRoster(_newUserInfo) {
  941 + /* {
  942 + userId: nodeData.userId,
  943 + userName: nodeData.name,
  944 + nodeId:nodeData.nodeId,
  945 + userRole:nodeData.userRole,
  946 + deviceType: nodeData.deviceType
  947 + }*/
  948 + this._emit(MessageTypes.MCU_ERROR, {type:MessageTypes.ERR_CLASS_KICK_OUT,data: _newUserInfo});
935 this._emit(MessageTypes.CLASS_RUN_EXIT, {'type': 1}); 949 this._emit(MessageTypes.CLASS_RUN_EXIT, {'type': 1});
936 } 950 }
937 951
@@ -990,11 +1004,11 @@ class ConferApe extends Ape { @@ -990,11 +1004,11 @@ class ConferApe extends Ape {
990 loger.log(nodeId, "->离开课堂->身份->", user.role); 1004 loger.log(nodeId, "->离开课堂->身份->", user.role);
991 } 1005 }
992 delete this.rosters[nodeId]; 1006 delete this.rosters[nodeId];
993 - this.rosterLen=Object.keys(this.rosters).length; 1007 + this.rosterLen = Object.keys(this.rosters).length;
994 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 1008 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数
995 1009
996 this.emitRosterChange(); 1010 this.emitRosterChange();
997 - this._emit(MessageTypes.CLASS_DELETE_ROSTER, {"nodeId": nodeId,"rosterLen":this.rosterLen}); 1011 + this._emit(MessageTypes.CLASS_DELETE_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen});
998 1012
999 //当前人员列表中抽一个人来检查离开人员是否占用频道 1013 //当前人员列表中抽一个人来检查离开人员是否占用频道
1000 for (let key in this.rosters) { 1014 for (let key in this.rosters) {
@@ -1002,7 +1016,7 @@ class ConferApe extends Ape { @@ -1002,7 +1016,7 @@ class ConferApe extends Ape {
1002 //如果抽到的人是自己就处理以下操作 1016 //如果抽到的人是自己就处理以下操作
1003 if (randNodeId == GlobalConfig.nodeId) { 1017 if (randNodeId == GlobalConfig.nodeId) {
1004 loger.log(randNodeId, "有权限检查离开的人员是否占用channel"); 1018 loger.log(randNodeId, "有权限检查离开的人员是否占用channel");
1005 - this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": nodeId,"rosterLen":this.rosterLen}); 1019 + this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen});
1006 //如果离开的人员是老师,需要暂停当前的课堂 1020 //如果离开的人员是老师,需要暂停当前的课堂
1007 1021
1008 if (user && user.role == ApeConsts.NR_HOST) { 1022 if (user && user.role == ApeConsts.NR_HOST) {