AlexWang

增加音频共享接口

@@ -60,10 +60,10 @@ export default class MessageEntrance extends Emiter { @@ -60,10 +60,10 @@ export default class MessageEntrance extends Emiter {
60 this.sdkInfo = _sdkInfo; 60 this.sdkInfo = _sdkInfo;
61 loger.warn(this.sdkInfo); 61 loger.warn(this.sdkInfo);
62 //检查是否是移动端 62 //检查是否是移动端
63 - GlobalConfig.isMobile=mdetect.isMobileUA();  
64 - if( GlobalConfig.isMobile){ 63 + GlobalConfig.isMobile = mdetect.isMobileUA();
  64 + if (GlobalConfig.isMobile) {
65 loger.warn("当前设备是移动设备"); 65 loger.warn("当前设备是移动设备");
66 - }else { 66 + } else {
67 loger.warn("当前设备是PC"); 67 loger.warn("当前设备是PC");
68 } 68 }
69 69
@@ -89,6 +89,7 @@ export default class MessageEntrance extends Emiter { @@ -89,6 +89,7 @@ export default class MessageEntrance extends Emiter {
89 _sass.on(_sass.CLASS_SAVE_RECORD_INFO_SUCCESS, this._sassSaveClassRecordInfoSuccessHandler.bind(this)); //保存课堂录制信息 89 _sass.on(_sass.CLASS_SAVE_RECORD_INFO_SUCCESS, this._sassSaveClassRecordInfoSuccessHandler.bind(this)); //保存课堂录制信息
90 _sass.on(_sass.DELETE_DOCUMENT_SUCCESS, this._sassDeleteDocumentSuccess.bind(this)); //sass删除文档成功 90 _sass.on(_sass.DELETE_DOCUMENT_SUCCESS, this._sassDeleteDocumentSuccess.bind(this)); //sass删除文档成功
91 _sass.on(_sass.DELETE_MEDIASHARE_SUCCESS, this._sassDeleteMediaShareSuccess.bind(this)); //sass删除媒体文件成功 91 _sass.on(_sass.DELETE_MEDIASHARE_SUCCESS, this._sassDeleteMediaShareSuccess.bind(this)); //sass删除媒体文件成功
  92 + _sass.on(_sass.DELETE_MUSICSHARE_SUCCESS, this._sassDeleteMusicShareSuccess.bind(this)); //sass删除MUSIC文件成功
92 93
93 //选点模块 94 //选点模块
94 _ipManager = new IpManager(); 95 _ipManager = new IpManager();
@@ -234,6 +235,10 @@ export default class MessageEntrance extends Emiter { @@ -234,6 +235,10 @@ export default class MessageEntrance extends Emiter {
234 this.mediaSharedStop = this._sendMediaSharedStop.bind(this); //停止 235 this.mediaSharedStop = this._sendMediaSharedStop.bind(this); //停止
235 this.mediaSharedUpdate = this._sendMediaSharedUpdate.bind(this); //更新媒体的状态 236 this.mediaSharedUpdate = this._sendMediaSharedUpdate.bind(this); //更新媒体的状态
236 237
  238 + //音频共享模块
  239 + this.musicSharedUpload = this._sendMusicSharedUpload.bind(this); //上传
  240 + this.musicSharedDelete = this._sassDeletMusicShare.bind(this); //删除,先通过Sass删除,删除成功之后才删除MCU的
  241 +
237 this.musicSharedPlay = this._sendMusicSharedPlay.bind(this); //Music播放 242 this.musicSharedPlay = this._sendMusicSharedPlay.bind(this); //Music播放
238 this.musicSharedStop = this._sendMusicSharedStop.bind(this); //Music停止 243 this.musicSharedStop = this._sendMusicSharedStop.bind(this); //Music停止
239 this.musicSharedUpdate = this._sendMusicSharedUpdate.bind(this); //Music更新媒体的状态 244 this.musicSharedUpdate = this._sendMusicSharedUpdate.bind(this); //Music更新媒体的状态
@@ -720,10 +725,10 @@ export default class MessageEntrance extends Emiter { @@ -720,10 +725,10 @@ export default class MessageEntrance extends Emiter {
720 loger.log('加入课堂->.'); 725 loger.log('加入课堂->.');
721 loger.warn("课堂服务信息->"); 726 loger.warn("课堂服务信息->");
722 727
723 - loger.warn('MCU服务器地址->mcu->',GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort); 728 + loger.warn('MCU服务器地址->mcu->', GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort);
724 loger.warn('推流地址->MS->', GlobalConfig.MS_PUBLISH_IP, GlobalConfig.MS_PUBLISH_PORT); 729 loger.warn('推流地址->MS->', GlobalConfig.MS_PUBLISH_IP, GlobalConfig.MS_PUBLISH_PORT);
725 - loger.warn('RTMP播流地址->RTMP->',GlobalConfig.MS_PLAY_RTMP_IP, GlobalConfig.MS_PLAY_RTMP_PORT);  
726 - loger.warn('HLS播流地址->HLS->',GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT); 730 + loger.warn('RTMP播流地址->RTMP->', GlobalConfig.MS_PLAY_RTMP_IP, GlobalConfig.MS_PLAY_RTMP_PORT);
  731 + loger.warn('HLS播流地址->HLS->', GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT);
727 732
728 if (_mcu) { 733 if (_mcu) {
729 _mcu.joinMCU(GlobalConfig.getClassInfo()); 734 _mcu.joinMCU(GlobalConfig.getClassInfo());
@@ -800,7 +805,7 @@ export default class MessageEntrance extends Emiter { @@ -800,7 +805,7 @@ export default class MessageEntrance extends Emiter {
800 805
801 joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL; 806 joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL;
802 joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示 807 joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示
803 - joinClassSuccessCallBackData.serverAndLoacTimeDistanc=GlobalConfig.serverAndLoacTimeDistanc; 808 + joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc;
804 loger.log('加入课堂成功->'); 809 loger.log('加入课堂成功->');
805 loger.log(joinClassSuccessCallBackData); 810 loger.log(joinClassSuccessCallBackData);
806 811
@@ -946,11 +951,17 @@ export default class MessageEntrance extends Emiter { @@ -946,11 +951,17 @@ export default class MessageEntrance extends Emiter {
946 loger.log('删除文档成功->', _param); 951 loger.log('删除文档成功->', _param);
947 this._sendDocumentDelete(_param); 952 this._sendDocumentDelete(_param);
948 } 953 }
  954 +
949 _sassDeleteMediaShareSuccess(_param) { 955 _sassDeleteMediaShareSuccess(_param) {
950 loger.log('删除媒体文件成功->', _param); 956 loger.log('删除媒体文件成功->', _param);
951 this._sendMediaSharedDelete(_param); 957 this._sendMediaSharedDelete(_param);
952 } 958 }
953 959
  960 + _sassDeleteMusicShareSuccess(_param) {
  961 + loger.log('删除Music文件成功->', _param);
  962 + this._sendMusicSharedDelete(_param);
  963 + }
  964 +
954 //ConferApe 965 //ConferApe
955 //开始上课 966 //开始上课
956 _sendStartClass(_param) { 967 _sendStartClass(_param) {
@@ -1093,181 +1104,181 @@ export default class MessageEntrance extends Emiter { @@ -1093,181 +1104,181 @@ export default class MessageEntrance extends Emiter {
1093 1104
1094 //获取课堂所有参数 api/meeting/detail.do? flash中的接口文件是 getClassParam.do 1105 //获取课堂所有参数 api/meeting/detail.do? flash中的接口文件是 getClassParam.do
1095 _sassGetClassParamSuccessHandler(_data) { 1106 _sassGetClassParamSuccessHandler(_data) {
1096 - loger.log('获取课堂课堂信息完成.');  
1097 - //包含整个课堂最全的信息,储存数据  
1098 - if (_data) {  
1099 - GlobalConfig.mcuDelay = _data.h5Delay || 0; //mcu消息延迟的时间间隔,单位(秒),结合客户端传的messageDelay的值使用  
1100 - GlobalConfig.className = _data.meetingName || "";  
1101 - GlobalConfig.classBeginTime = _data.beginTime || "";  
1102 - GlobalConfig.classEndTime = _data.endTime || "";  
1103 - GlobalConfig.userIp = _data.userIp || "";  
1104 -  
1105 - GlobalConfig.maxVideoChannels = _data.maxVideoChannels;  
1106 - GlobalConfig.maxAudioChannels = _data.maxAudioChannels;  
1107 - GlobalConfig.maxMediaChannels = Math.max(GlobalConfig.maxVideoChannels, GlobalConfig.maxAudioChannels);  
1108 -  
1109 - GlobalConfig.ssTunnelAppURL = _data.ssTunnelAppURL || ''; //屏幕共享插件的地址  
1110 -  
1111 - //视频质量相关设置,每次加入课堂都按最新的获取设置  
1112 - GlobalConfig.fps = _data.fps || 15;  
1113 - GlobalConfig.gop = _data.gop || 3;  
1114 - GlobalConfig.videoQuality = parseInt(_data.videoQuality);  
1115 - GlobalConfig.curVideoQuality = GlobalConfig.videoQuality;  
1116 -  
1117 - //是否自动开始(身份是host的时候才用到的)  
1118 - GlobalConfig.isAutoStartClass = _data.autoRecord || 0;  
1119 -  
1120 - GlobalConfig.serverTime = _data.serverTime || new Date().getTime(); //获取服务器时间戳  
1121 - GlobalConfig.serverAndLoacTimeDistanc = (new Date().getTime() - GlobalConfig.serverTime) / 1000; //当前系统时间和服务器时间的差值 (秒)  
1122 - loger.warn("服务器时间:" + GlobalConfig.serverTime + " 系统时间:" + new Date().getTime() + " 时间差:" + GlobalConfig.serverAndLoacTimeDistanc);  
1123 -  
1124 - GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表  
1125 - GlobalConfig.setRecordList(_data.recordList); //录制回放地址  
1126 - GlobalConfig.setDocList(_data.docList); //文档地址  
1127 - GlobalConfig.setMsList(_data.msList); //推流播流服务器地址(需要对列表中的地址进行分类,里面包含了推流和拉流的地址,目前主要是乐视的需要区分开)  
1128 - GlobalConfig.setRsList(_data.rsList); //播放m3u8格式的地址(录制回放时使用)  
1129 - GlobalConfig.setMcuList(_data.mcuList); //mcu  
1130 - GlobalConfig.setMusicList(_data.musicList); //  
1131 - GlobalConfig.setMusicListPrepare(_data.musicListPrepare); //提前上传的声音文件列表  
1132 - GlobalConfig.setVideoCDNAddr(_data.videoCDNAddr); //cdn加速的拉流地址,直播的时候才使用  
1133 - GlobalConfig.setMediaShareList(_data.sharedMediaList); //提前上传的媒体共享文件列表  
1134 -  
1135 - //MCU地址  
1136 - if (_data.mcuList && _data.mcuList.length > 0) {  
1137 - //随机选择一个  
1138 - let index = parseInt(Math.random() * _data.mcuList.length);  
1139 - GlobalConfig.MCUServerIP = _data.mcuList[index].ip || "";  
1140 - GlobalConfig.MCUServerPort = _data.mcuList[index].port || "";  
1141 - loger.log('初始->MCU->.', GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort);  
1142 - } 1107 + loger.log('获取课堂课堂信息完成.');
  1108 + //包含整个课堂最全的信息,储存数据
  1109 + if (_data) {
  1110 + GlobalConfig.mcuDelay = _data.h5Delay || 0; //mcu消息延迟的时间间隔,单位(秒),结合客户端传的messageDelay的值使用
  1111 + GlobalConfig.className = _data.meetingName || "";
  1112 + GlobalConfig.classBeginTime = _data.beginTime || "";
  1113 + GlobalConfig.classEndTime = _data.endTime || "";
  1114 + GlobalConfig.userIp = _data.userIp || "";
1143 1115
1144 - //录制回放时m3u8播流地址  
1145 - if (_data.rsList && _data.rsList.length > 0) {  
1146 - let index = parseInt(Math.random() * _data.rsList.length);  
1147 - GlobalConfig.RS_RECORD_PLAY_IP = _data.rsList[index].ip || "";  
1148 - GlobalConfig.RS_RECORD_PLAY_PORT = _data.rsList[index].port || "";  
1149 - loger.log('初始->RS->.', GlobalConfig.RS_RECORD_PLAY_IP, GlobalConfig.RS_RECORD_PLAY_PORT);  
1150 - } 1116 + GlobalConfig.maxVideoChannels = _data.maxVideoChannels;
  1117 + GlobalConfig.maxAudioChannels = _data.maxAudioChannels;
  1118 + GlobalConfig.maxMediaChannels = Math.max(GlobalConfig.maxVideoChannels, GlobalConfig.maxAudioChannels);
1151 1119
1152 - //上课中音视频推流地址  
1153 - if (GlobalConfig.msList && GlobalConfig.msList.length > 0) {  
1154 - let index = parseInt(Math.random() * GlobalConfig.msList.length);  
1155 - GlobalConfig.MS_PUBLISH_IP = GlobalConfig.msList[index].ip || "";  
1156 - GlobalConfig.MS_PUBLISH_PORT = GlobalConfig.msList[index].port || "";  
1157 - }  
1158 - loger.log('初始->MS->.', GlobalConfig.MS_PUBLISH_IP, GlobalConfig.MS_PUBLISH_PORT);  
1159 -  
1160 - //播流的地址和推流地址需要分开的时候,单独设置拉流的地址 rtmp(目前乐视使用)  
1161 - if (GlobalConfig.pullRtmpList && GlobalConfig.pullRtmpList.length > 0) {  
1162 - //有单独的rtmp拉流地址  
1163 - let index = parseInt(Math.random() * GlobalConfig.pullRtmpList.length);  
1164 - GlobalConfig.MS_PLAY_RTMP_IP = GlobalConfig.pullRtmpList[index].ip || "";  
1165 - GlobalConfig.MS_PLAY_RTMP_PORT = GlobalConfig.pullRtmpList[index].port || "";  
1166 - } else {  
1167 - //如果没有单独的rtmp拉流地址,和推流地址一样即可  
1168 - GlobalConfig.MS_PLAY_RTMP_IP = GlobalConfig.MS_PUBLISH_IP;  
1169 - GlobalConfig.MS_PLAY_RTMP_PORT = GlobalConfig.MS_PUBLISH_PORT;  
1170 - } 1120 + GlobalConfig.ssTunnelAppURL = _data.ssTunnelAppURL || ''; //屏幕共享插件的地址
1171 1121
1172 - loger.log('初始->MSPull->.', GlobalConfig.MS_PLAY_RTMP_IP, GlobalConfig.MS_PLAY_RTMP_PORT); 1122 + //视频质量相关设置,每次加入课堂都按最新的获取设置
  1123 + GlobalConfig.fps = _data.fps || 15;
  1124 + GlobalConfig.gop = _data.gop || 3;
  1125 + GlobalConfig.videoQuality = parseInt(_data.videoQuality);
  1126 + GlobalConfig.curVideoQuality = GlobalConfig.videoQuality;
  1127 +
  1128 + //是否自动开始(身份是host的时候才用到的)
  1129 + GlobalConfig.isAutoStartClass = _data.autoRecord || 0;
  1130 +
  1131 + GlobalConfig.serverTime = _data.serverTime || new Date().getTime(); //获取服务器时间戳
  1132 + GlobalConfig.serverAndLoacTimeDistanc = (new Date().getTime() - GlobalConfig.serverTime) / 1000; //当前系统时间和服务器时间的差值 (秒)
  1133 + loger.warn("服务器时间:" + GlobalConfig.serverTime + " 系统时间:" + new Date().getTime() + " 时间差:" + GlobalConfig.serverAndLoacTimeDistanc);
  1134 +
  1135 + GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表
  1136 + GlobalConfig.setRecordList(_data.recordList); //录制回放地址
  1137 + GlobalConfig.setDocList(_data.docList); //文档地址
  1138 + GlobalConfig.setMsList(_data.msList); //推流播流服务器地址(需要对列表中的地址进行分类,里面包含了推流和拉流的地址,目前主要是乐视的需要区分开)
  1139 + GlobalConfig.setRsList(_data.rsList); //播放m3u8格式的地址(录制回放时使用)
  1140 + GlobalConfig.setMcuList(_data.mcuList); //mcu
  1141 + GlobalConfig.setMusicList(_data.musicList); //
  1142 + GlobalConfig.setMusicListPrepare(_data.musicListPrepare); //提前上传的声音文件列表
  1143 + GlobalConfig.setVideoCDNAddr(_data.videoCDNAddr); //cdn加速的拉流地址,直播的时候才使用
  1144 + GlobalConfig.setMediaShareList(_data.sharedMediaList); //提前上传的媒体共享文件列表
  1145 +
  1146 + //MCU地址
  1147 + if (_data.mcuList && _data.mcuList.length > 0) {
  1148 + //随机选择一个
  1149 + let index = parseInt(Math.random() * _data.mcuList.length);
  1150 + GlobalConfig.MCUServerIP = _data.mcuList[index].ip || "";
  1151 + GlobalConfig.MCUServerPort = _data.mcuList[index].port || "";
  1152 + loger.log('初始->MCU->.', GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort);
  1153 + }
1173 1154
1174 - //播流的地址和推流地址需要分开的时候,单独设置拉流的地址 hls(目前乐视使用)  
1175 - if (GlobalConfig.hlsList && GlobalConfig.hlsList.length > 0) {  
1176 - //有单独的hls拉流地址  
1177 - let index = parseInt(Math.random() * GlobalConfig.hlsList.length);  
1178 - GlobalConfig.MS_PLAY_HLS_IP = GlobalConfig.hlsList[index].ip || "";  
1179 - GlobalConfig.MS_PLAY_HLS_PORT = GlobalConfig.hlsList[index].port || "";  
1180 - } else {  
1181 - //没有单独的hls拉流地址,和录制回放地址一样即可  
1182 - GlobalConfig.MS_PLAY_HLS_IP = GlobalConfig.RS_RECORD_PLAY_IP;  
1183 - GlobalConfig.MS_PLAY_HLS_PORT = GlobalConfig.RS_RECORD_PLAY_PORT;  
1184 - }  
1185 - loger.log('初始->MSHls->.', GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT);  
1186 -  
1187 - //直播的时候,拉流(rtmp和hls)需要从 videoCDNAddr中获取  
1188 - //20170531-新规则,所有课堂类型都支持加速  
1189 - // if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2&&GlobalConfig.videoCDNAddrList.length>0){  
1190 -  
1191 - //20170629-直播课堂和移动端设备的时候支持  
1192 - if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2||GlobalConfig.isMobile){  
1193 - if (GlobalConfig.videoCDNAddrList.length > 0) {  
1194 - //videoCDNAddrList中rtmppush和hls是混在一起的,需要分离开;  
1195 - let listLen = GlobalConfig.videoCDNAddrList.length;  
1196 - for (let i = 0; i < listLen; i++) {  
1197 - let ipItem = GlobalConfig.videoCDNAddrList[i];  
1198 - if (ipItem) {  
1199 - if (ipItem.indexOf('hls') >= 0) {  
1200 - //直播的时候m3u8拉流地址  
1201 - GlobalConfig.MS_PLAY_HLS_IP = ipItem; //ip包含了端口  
1202 - GlobalConfig.MS_PLAY_HLS_PORT = "";  
1203 - loger.log('videoCDNAddr>初始->MSHls', GlobalConfig.MS_PLAY_HLS_IP);  
1204 - } else if (ipItem.indexOf('rtmppull') >= 0) {  
1205 - //直播的时候rtmp拉流地址  
1206 - GlobalConfig.MS_PLAY_RTMP_IP = ipItem; //ip包含了端口  
1207 - GlobalConfig.MS_PLAY_RTMP_PORT = '';  
1208 - loger.log('videoCDNAddr->初始->MSPull', GlobalConfig.MS_PLAY_RTMP_IP);  
1209 - } 1155 + //录制回放时m3u8播流地址
  1156 + if (_data.rsList && _data.rsList.length > 0) {
  1157 + let index = parseInt(Math.random() * _data.rsList.length);
  1158 + GlobalConfig.RS_RECORD_PLAY_IP = _data.rsList[index].ip || "";
  1159 + GlobalConfig.RS_RECORD_PLAY_PORT = _data.rsList[index].port || "";
  1160 + loger.log('初始->RS->.', GlobalConfig.RS_RECORD_PLAY_IP, GlobalConfig.RS_RECORD_PLAY_PORT);
  1161 + }
  1162 +
  1163 + //上课中音视频推流地址
  1164 + if (GlobalConfig.msList && GlobalConfig.msList.length > 0) {
  1165 + let index = parseInt(Math.random() * GlobalConfig.msList.length);
  1166 + GlobalConfig.MS_PUBLISH_IP = GlobalConfig.msList[index].ip || "";
  1167 + GlobalConfig.MS_PUBLISH_PORT = GlobalConfig.msList[index].port || "";
  1168 + }
  1169 + loger.log('初始->MS->.', GlobalConfig.MS_PUBLISH_IP, GlobalConfig.MS_PUBLISH_PORT);
  1170 +
  1171 + //播流的地址和推流地址需要分开的时候,单独设置拉流的地址 rtmp(目前乐视使用)
  1172 + if (GlobalConfig.pullRtmpList && GlobalConfig.pullRtmpList.length > 0) {
  1173 + //有单独的rtmp拉流地址
  1174 + let index = parseInt(Math.random() * GlobalConfig.pullRtmpList.length);
  1175 + GlobalConfig.MS_PLAY_RTMP_IP = GlobalConfig.pullRtmpList[index].ip || "";
  1176 + GlobalConfig.MS_PLAY_RTMP_PORT = GlobalConfig.pullRtmpList[index].port || "";
  1177 + } else {
  1178 + //如果没有单独的rtmp拉流地址,和推流地址一样即可
  1179 + GlobalConfig.MS_PLAY_RTMP_IP = GlobalConfig.MS_PUBLISH_IP;
  1180 + GlobalConfig.MS_PLAY_RTMP_PORT = GlobalConfig.MS_PUBLISH_PORT;
  1181 + }
  1182 +
  1183 + loger.log('初始->MSPull->.', GlobalConfig.MS_PLAY_RTMP_IP, GlobalConfig.MS_PLAY_RTMP_PORT);
  1184 +
  1185 + //播流的地址和推流地址需要分开的时候,单独设置拉流的地址 hls(目前乐视使用)
  1186 + if (GlobalConfig.hlsList && GlobalConfig.hlsList.length > 0) {
  1187 + //有单独的hls拉流地址
  1188 + let index = parseInt(Math.random() * GlobalConfig.hlsList.length);
  1189 + GlobalConfig.MS_PLAY_HLS_IP = GlobalConfig.hlsList[index].ip || "";
  1190 + GlobalConfig.MS_PLAY_HLS_PORT = GlobalConfig.hlsList[index].port || "";
  1191 + } else {
  1192 + //没有单独的hls拉流地址,和录制回放地址一样即可
  1193 + GlobalConfig.MS_PLAY_HLS_IP = GlobalConfig.RS_RECORD_PLAY_IP;
  1194 + GlobalConfig.MS_PLAY_HLS_PORT = GlobalConfig.RS_RECORD_PLAY_PORT;
  1195 + }
  1196 + loger.log('初始->MSHls->.', GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT);
  1197 +
  1198 + //直播的时候,拉流(rtmp和hls)需要从 videoCDNAddr中获取
  1199 + //20170531-新规则,所有课堂类型都支持加速
  1200 + // if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2&&GlobalConfig.videoCDNAddrList.length>0){
  1201 +
  1202 + //20170629-直播课堂和移动端设备的时候支持
  1203 + if (GlobalConfig.classType == ApeConsts.CLASS_TYPE_2 || GlobalConfig.isMobile) {
  1204 + if (GlobalConfig.videoCDNAddrList.length > 0) {
  1205 + //videoCDNAddrList中rtmppush和hls是混在一起的,需要分离开;
  1206 + let listLen = GlobalConfig.videoCDNAddrList.length;
  1207 + for (let i = 0; i < listLen; i++) {
  1208 + let ipItem = GlobalConfig.videoCDNAddrList[i];
  1209 + if (ipItem) {
  1210 + if (ipItem.indexOf('hls') >= 0) {
  1211 + //直播的时候m3u8拉流地址
  1212 + GlobalConfig.MS_PLAY_HLS_IP = ipItem; //ip包含了端口
  1213 + GlobalConfig.MS_PLAY_HLS_PORT = "";
  1214 + loger.log('videoCDNAddr>初始->MSHls', GlobalConfig.MS_PLAY_HLS_IP);
  1215 + } else if (ipItem.indexOf('rtmppull') >= 0) {
  1216 + //直播的时候rtmp拉流地址
  1217 + GlobalConfig.MS_PLAY_RTMP_IP = ipItem; //ip包含了端口
  1218 + GlobalConfig.MS_PLAY_RTMP_PORT = '';
  1219 + loger.log('videoCDNAddr->初始->MSPull', GlobalConfig.MS_PLAY_RTMP_IP);
1210 } 1220 }
1211 } 1221 }
1212 - } else {  
1213 - loger.error('videoCDNAddr数据无效->',GlobalConfig.videoCDNAddr);  
1214 } 1222 }
1215 - }else {  
1216 - loger.warn('非直播课堂或不是移动端->不需要videoCDN加速');  
1217 - }  
1218 -  
1219 - //文档地址  
1220 - if (_data.docList && _data.docList.length > 0) {  
1221 - //doc上传地址,随机获取一个  
1222 - let index = parseInt(Math.random() * _data.docList.length);  
1223 - loger.log("docServer->", _data.docList[index]);  
1224 - GlobalConfig.DOCServerIP = _data.docList[index].ip || "";  
1225 - GlobalConfig.DOCServerPort = _data.docList[index].port || "";  
1226 - loger.log('初始->DOC->.', GlobalConfig.DOCServerIP, GlobalConfig.DOCServerPort); 1223 + } else {
  1224 + loger.error('videoCDNAddr数据无效->', GlobalConfig.videoCDNAddr);
1227 } 1225 }
  1226 + } else {
  1227 + loger.warn('非直播课堂或不是移动端->不需要videoCDN加速');
  1228 + }
1228 1229
1229 - //record  
1230 - if (_data.recordList && _data.recordList.length > 0) {  
1231 - let index = parseInt(Math.random() * _data.recordList.length);  
1232 - GlobalConfig.RecordServerIP = _data.recordList[index].ip || "";  
1233 - GlobalConfig.RecordServerPort = _data.recordList[index].port || "";  
1234 - loger.log('初始->RECORD->.', GlobalConfig.RecordServerIP, GlobalConfig.RecordServerPort);  
1235 - } 1230 + //文档地址
  1231 + if (_data.docList && _data.docList.length > 0) {
  1232 + //doc上传地址,随机获取一个
  1233 + let index = parseInt(Math.random() * _data.docList.length);
  1234 + loger.log("docServer->", _data.docList[index]);
  1235 + GlobalConfig.DOCServerIP = _data.docList[index].ip || "";
  1236 + GlobalConfig.DOCServerPort = _data.docList[index].port || "";
  1237 + loger.log('初始->DOC->.', GlobalConfig.DOCServerIP, GlobalConfig.DOCServerPort);
  1238 + }
1236 1239
  1240 + //record
  1241 + if (_data.recordList && _data.recordList.length > 0) {
  1242 + let index = parseInt(Math.random() * _data.recordList.length);
  1243 + GlobalConfig.RecordServerIP = _data.recordList[index].ip || "";
  1244 + GlobalConfig.RecordServerPort = _data.recordList[index].port || "";
  1245 + loger.log('初始->RECORD->.', GlobalConfig.RecordServerIP, GlobalConfig.RecordServerPort);
1237 } 1246 }
1238 - //这里需要考虑是否加延迟处理,课堂信息刚获取完成,客户端需要根据数据创建界面UI,等创建完成后再加入课堂是最合适的(目前没有加延迟)  
1239 - this._emit(MessageTypes.CLASS_GET_INFO_SUCCESS, GlobalConfig.getClassInfo());  
1240 -  
1241 - if (_data.currentInfo) {  
1242 - //根据从Sass获取的数据信息,同步最后一次保存的课堂状态信息  
1243 - loger.log("本地同步最后一次保存过的课堂状态信息");  
1244 - try {  
1245 - GlobalConfig.setClassStatusInfo(JSON.parse(_data.currentInfo));  
1246 - } catch (err) {  
1247 - GlobalConfig.setClassStatusInfo(_data.currentInfo);  
1248 - }  
1249 - loger.log(GlobalConfig.classStatusInfo);  
1250 - } else {  
1251 - loger.log("还没有保存过课堂状信息"); 1247 +
  1248 + }
  1249 + //这里需要考虑是否加延迟处理,课堂信息刚获取完成,客户端需要根据数据创建界面UI,等创建完成后再加入课堂是最合适的(目前没有加延迟)
  1250 + this._emit(MessageTypes.CLASS_GET_INFO_SUCCESS, GlobalConfig.getClassInfo());
  1251 +
  1252 + if (_data.currentInfo) {
  1253 + //根据从Sass获取的数据信息,同步最后一次保存的课堂状态信息
  1254 + loger.log("本地同步最后一次保存过的课堂状态信息");
  1255 + try {
  1256 + GlobalConfig.setClassStatusInfo(JSON.parse(_data.currentInfo));
  1257 + } catch (err) {
  1258 + GlobalConfig.setClassStatusInfo(_data.currentInfo);
1252 } 1259 }
  1260 + loger.log(GlobalConfig.classStatusInfo);
  1261 + } else {
  1262 + loger.log("还没有保存过课堂状信息");
  1263 + }
1253 1264
1254 - //录制回放不需要获取ip信息和选点  
1255 - if (GlobalConfig.isRecordPlayBack) {  
1256 - if (_recordPlayback) {  
1257 - //开启录制回放流程  
1258 - loger.log("开启录制回放流程");  
1259 - _recordPlayback.readyRecordPlay();  
1260 - } else {  
1261 - loger.warn("开启录制回放流程失败->还未创建模块");  
1262 - } 1265 + //录制回放不需要获取ip信息和选点
  1266 + if (GlobalConfig.isRecordPlayBack) {
  1267 + if (_recordPlayback) {
  1268 + //开启录制回放流程
  1269 + loger.log("开启录制回放流程");
  1270 + _recordPlayback.readyRecordPlay();
1263 } else { 1271 } else {
1264 - //根据用户的userIp获取信息,选点  
1265 - this.getUserIpInfo(); 1272 + loger.warn("开启录制回放流程失败->还未创建模块");
1266 } 1273 }
  1274 + } else {
  1275 + //根据用户的userIp获取信息,选点
  1276 + this.getUserIpInfo();
1267 } 1277 }
  1278 + }
1268 1279
1269 - //ChatApe  
1270 - // 发送聊天消息 1280 + //ChatApe
  1281 + // 发送聊天消息
1271 _sendChatMsg(_messageInfo) { 1282 _sendChatMsg(_messageInfo) {
1272 if (!_mcu.connected) { 1283 if (!_mcu.connected) {
1273 loger.warn(GlobalConfig.getCurrentStatus()); 1284 loger.warn(GlobalConfig.getCurrentStatus());
@@ -1675,7 +1686,33 @@ export default class MessageEntrance extends Emiter { @@ -1675,7 +1686,33 @@ export default class MessageEntrance extends Emiter {
1675 } 1686 }
1676 } 1687 }
1677 1688
1678 - //删除 1689 + // 删除Music
  1690 + _sassDeletMusicShare(_param) {
  1691 + if (!_mcu.connected) {
  1692 + loger.warn(GlobalConfig.getCurrentStatus());
  1693 + return;
  1694 + }
  1695 +
  1696 + //判断传入的参数是否存在
  1697 + if (_param == null || EngineUtils.isEmptyObject(_param)) {
  1698 + loger.error('删除媒体文件失败->参数错误', _param);
  1699 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED_PARAM);
  1700 + return;
  1701 + }
  1702 + //判断必要的参数字段值
  1703 + if (_param.itemIdx == null || isNaN(_param.itemIdx) || _param.fileId == null || _param.fileId == "") {
  1704 + loger.error('删除媒体文件失败->', _param);
  1705 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED_PARAM);
  1706 + return;
  1707 + }
  1708 + loger.log('删除媒体文件->', _param);
  1709 +
  1710 + if (_sass) {
  1711 + _sass.sassDeletMusicShare(_param);
  1712 + }
  1713 + }
  1714 +
  1715 + //删除媒体
1679 _sendMediaSharedDelete(_param) { 1716 _sendMediaSharedDelete(_param) {
1680 if (!_mcu.connected) { 1717 if (!_mcu.connected) {
1681 loger.warn(GlobalConfig.getCurrentStatus()); 1718 loger.warn(GlobalConfig.getCurrentStatus());
@@ -1686,6 +1723,17 @@ export default class MessageEntrance extends Emiter { @@ -1686,6 +1723,17 @@ export default class MessageEntrance extends Emiter {
1686 } 1723 }
1687 } 1724 }
1688 1725
  1726 + //删除媒体
  1727 + _sendMusicSharedDelete(_param) {
  1728 + if (!_mcu.connected) {
  1729 + loger.warn(GlobalConfig.getCurrentStatus());
  1730 + return;
  1731 + }
  1732 + if (_musicShareApe) {
  1733 + _musicShareApe.musicSharedDelete(_param);
  1734 + }
  1735 + }
  1736 +
1689 //音乐更新 1737 //音乐更新
1690 _sendMusicSharedUpdate(_param) { 1738 _sendMusicSharedUpdate(_param) {
1691 if (!_mcu.connected) { 1739 if (!_mcu.connected) {
@@ -1934,7 +1982,7 @@ export default class MessageEntrance extends Emiter { @@ -1934,7 +1982,7 @@ export default class MessageEntrance extends Emiter {
1934 1982
1935 joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL; 1983 joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL;
1936 joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示 1984 joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示
1937 - joinClassSuccessCallBackData.serverAndLoacTimeDistanc=GlobalConfig.serverAndLoacTimeDistanc; 1985 + joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc;
1938 loger.log(joinClassSuccessCallBackData); 1986 loger.log(joinClassSuccessCallBackData);
1939 //和加入课堂成功使用同样的消息处理 1987 //和加入课堂成功使用同样的消息处理
1940 this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); 1988 this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
@@ -89,6 +89,10 @@ MessageTypes.DOC_BROADCAST = "doc_broadcast"; // @@ -89,6 +89,10 @@ MessageTypes.DOC_BROADCAST = "doc_broadcast"; //
89 MessageTypes.MEDIA_SHARED_DELETE = "media_shared_delete"; //删除媒体文件 89 MessageTypes.MEDIA_SHARED_DELETE = "media_shared_delete"; //删除媒体文件
90 MessageTypes.MEDIA_SHARED_UPDATE = "media_shared_update"; //更新媒体文件(添加、变更) 90 MessageTypes.MEDIA_SHARED_UPDATE = "media_shared_update"; //更新媒体文件(添加、变更)
91 91
  92 +//音频共享
  93 +MessageTypes.MUSIC_SHARED_DELETE = "music_shared_delete"; //删除音频文件
  94 +MessageTypes.MUSIC_SHARED_UPDATE = "music_shared_update"; //更新音频文件(添加、变更)
  95 +
92 //答题卡和点名共用 96 //答题卡和点名共用
93 MessageTypes.START_ANSWER_QUESTION = "start_answer_question"; //开始答题 97 MessageTypes.START_ANSWER_QUESTION = "start_answer_question"; //开始答题
94 MessageTypes.UPDATE_ANSWER_QUESTION = "update_answer_question"; //更新答题数据 98 MessageTypes.UPDATE_ANSWER_QUESTION = "update_answer_question"; //更新答题数据
@@ -151,6 +155,10 @@ MessageTypes.ERR_SDK_FAILED = 700; // sdk还没初始化 @@ -151,6 +155,10 @@ MessageTypes.ERR_SDK_FAILED = 700; // sdk还没初始化
151 MessageTypes.ERR_INTERFACE_NONE = 701; //调用的接口不存在 155 MessageTypes.ERR_INTERFACE_NONE = 701; //调用的接口不存在
152 MessageTypes.ERR_INTERFACE_PARAMS_ERROR = 702; //调用的接口,传递的参数不正确 156 MessageTypes.ERR_INTERFACE_PARAMS_ERROR = 702; //调用的接口,传递的参数不正确
153 157
  158 +//音频共享
  159 +MessageTypes.ERR_MUSICSHARE_DELETE_FAILED = 720; //删除媒体共享文件失败
  160 +MessageTypes.ERR_MUSICSHARE_DELETE_FAILED_PARAM = 721; //删除媒体共享文件,参数错误
  161 +
154 MessageTypes.ERR_INIT_RECORD_PLAY_BACK_FAILED = 910; //初始化录制回放失败 162 MessageTypes.ERR_INIT_RECORD_PLAY_BACK_FAILED = 910; //初始化录制回放失败
155 MessageTypes.ERR_GET_RECORD_PLAY_BACK_DATA_FAILED = 911; //获取录制回放数据失败 163 MessageTypes.ERR_GET_RECORD_PLAY_BACK_DATA_FAILED = 911; //获取录制回放数据失败
156 164
@@ -13,757 +13,797 @@ const loger = Loger.getLoger('Sass'); @@ -13,757 +13,797 @@ const loger = Loger.getLoger('Sass');
13 13
14 let confInfo = {}; 14 let confInfo = {};
15 class Sass extends Emiter { 15 class Sass extends Emiter {
16 - constructor() {  
17 - super();  
18 - }  
19 -  
20 - ///////////////////////////////////////Sass 接口///////////////////////////////////////////////////  
21 - //Sass init初始化获取课堂校验信息-----------------------------------------------------------------  
22 - getJoinParams(_initInfo) {  
23 - /* 获取用于加入课堂的参数  
24 - /3m/api/meeting/joinParams.do  
25 - 参数 (application/x-www-form-urlencoded):  
26 - 名称 类型 可选 默认值 说明  
27 - meetingNumber String 否 null 课堂号  
28 - userID String 是 0 用户id  
29 - 返回 (application/json):  
30 - code int 0 正常  
31 - 1 课堂号必填  
32 - 2 无效的课堂号  
33 - 3 没有对应的站点  
34 - 4 站点已过期  
35 - siteId String 站点号  
36 - passwordRequired Boolean 是否需要输入密码  
37 - md5 String 用于后续加入课堂验证  
38 - msType int 媒体服务器类型  
39 - classType 课堂类型  
40 - */  
41 - let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;  
42 - loger.log('1.初始化init获取课堂校验信息.');  
43 - loger.log(url);  
44 - loger.log(_initInfo);  
45 - fetch(url, {  
46 - timeout: 5000  
47 - })  
48 - .then(ret => {  
49 - if (ret.ok) {  
50 - return ret.json();  
51 - } else {  
52 - loger.error(`初始化init获取课堂校验信息-网络异常.状态码:${ret.status}`);  
53 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_NETWORK);  
54 - throw '';  
55 - }  
56 - })  
57 - .then(ret => {  
58 - // code int 0 正常  
59 - // 1 课堂号必填  
60 - //2 无效的课堂号  
61 - //3 没有对应的站点  
62 - //4 站点已过期  
63 - if (ret.code === 0) {  
64 - loger.log('初始化init获取课堂校验信息-完成');  
65 - this._emit(Sass.CLASS_INIT_SUCCESS, ret);  
66 - } else if (ret.code === 1) {  
67 - //loger.warn('Sass获取课堂校验信息失败.');  
68 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED_1);  
69 - } else if (ret.code === 2) {  
70 - //loger.warn('Sass获取课堂校验信息失败.');  
71 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED_2);  
72 - } else if (ret.code === 3) {  
73 - //loger.warn('Sass获取课堂校验信息失败.');  
74 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED_3);  
75 - } else if (ret.code === 4) {  
76 - //loger.warn('Sass获取课堂校验信息失败.');  
77 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED_4);  
78 - } else {  
79 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED, ret);  
80 - }  
81 - })  
82 - .catch(err => {  
83 - loger.error(`初始化init获取课堂校验信息-异常.状态码:${err}`);  
84 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_PROTOCOL, err);  
85 - });  
86 - }  
87 -  
88 - // Sass校验开始-->密码校验(如果需要密码)--->MD5校验----------------------------------------------------  
89 - passwordAndMd5Checking(_param) {  
90 - loger.log('2.开始Sass校验');  
91 - loger.log(_param);  
92 - confInfo = _param;  
93 - // 密码校验  
94 - if (confInfo.passwordRequired === 'true' || confInfo.passwordRequired === true) {  
95 - this.sendPWDChecking();  
96 - return; 16 + constructor() {
  17 + super();
  18 + }
  19 +
  20 + ///////////////////////////////////////Sass 接口///////////////////////////////////////////////////
  21 + //Sass init初始化获取课堂校验信息-----------------------------------------------------------------
  22 + getJoinParams(_initInfo) {
  23 + /* 获取用于加入课堂的参数
  24 + /3m/api/meeting/joinParams.do
  25 + 参数 (application/x-www-form-urlencoded):
  26 + 名称 类型 可选 默认值 说明
  27 + meetingNumber String 否 null 课堂号
  28 + userID String 是 0 用户id
  29 + 返回 (application/json):
  30 + code int 0 正常
  31 + 1 课堂号必填
  32 + 2 无效的课堂号
  33 + 3 没有对应的站点
  34 + 4 站点已过期
  35 + siteId String 站点号
  36 + passwordRequired Boolean 是否需要输入密码
  37 + md5 String 用于后续加入课堂验证
  38 + msType int 媒体服务器类型
  39 + classType 课堂类型
  40 + */
  41 + let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;
  42 + loger.log('1.初始化init获取课堂校验信息.');
  43 + loger.log(url);
  44 + loger.log(_initInfo);
  45 + fetch(url, {
  46 + timeout: 5000
  47 + })
  48 + .then(ret => {
  49 + if (ret.ok) {
  50 + return ret.json();
  51 + } else {
  52 + loger.error(`初始化init获取课堂校验信息-网络异常.状态码:${ret.status}`);
  53 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_NETWORK);
  54 + throw '';
97 } 55 }
98 - // MD5校验  
99 - this.sendMD5Checking();  
100 - }  
101 -  
102 - // 入会密码校验---------------------------------------------------------------------------------------  
103 - sendPWDChecking() {  
104 - //let url = `http://${classInfo.portal}/3m/getCheckMeetinig.do?siteId=${classInfo.siteId}&classId=${classInfo.classId}&password=${classInfo.password}`;  
105 - /*  
106 - /3m/api/meeting/signIn.do  
107 - siteId 站点号  
108 - classId 课堂号(meetingNumber)  
109 - isTeacher 是否是老师:1 是 0 否  
110 - password 输入的密码  
111 - // 请求格式 http://112.126.80.182/3m/api/meeting/signIn.do?siteId=h5test&classId=526661904&password=111111&isTeacher=0  
112 - */  
113 - //判断是否是老师  
114 - let isTeacher = 0;  
115 - if (confInfo.userRole == ApeConsts.host) {  
116 - isTeacher = 1 56 + })
  57 + .then(ret => {
  58 + // code int 0 正常
  59 + // 1 课堂号必填
  60 + //2 无效的课堂号
  61 + //3 没有对应的站点
  62 + //4 站点已过期
  63 + if (ret.code === 0) {
  64 + loger.log('初始化init获取课堂校验信息-完成');
  65 + this._emit(Sass.CLASS_INIT_SUCCESS, ret);
  66 + } else if (ret.code === 1) {
  67 + //loger.warn('Sass获取课堂校验信息失败.');
  68 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED_1);
  69 + } else if (ret.code === 2) {
  70 + //loger.warn('Sass获取课堂校验信息失败.');
  71 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED_2);
  72 + } else if (ret.code === 3) {
  73 + //loger.warn('Sass获取课堂校验信息失败.');
  74 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED_3);
  75 + } else if (ret.code === 4) {
  76 + //loger.warn('Sass获取课堂校验信息失败.');
  77 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED_4);
  78 + } else {
  79 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_FAILED, ret);
117 } 80 }
118 -  
119 - let url = `http://${confInfo.portal}/3m/api/meeting/signIn.do?siteId=${confInfo.siteId}&classId=${confInfo.classId}&isTeacher=${isTeacher}&password=${confInfo.password}`;  
120 - loger.log('3.课堂密码校验', url);  
121 - fetch(url, {  
122 - timeout: 5000  
123 - })  
124 - .then(ret => {  
125 - if (ret.status === 200) {  
126 - return ret.text();  
127 - } else {  
128 - loger.error(`课堂密码校验-网络异常.状态码:${ret.status}`);  
129 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_NETWORK);  
130 - throw '';  
131 - }  
132 - })  
133 - .then(ret => {  
134 - let rectObj = JSON.parse(ret);  
135 - if (rectObj.flag === 'false' || rectObj.flag === false) {  
136 - loger.error(`课堂密码校验-失败.`);  
137 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_PASSWORD_WRONG);  
138 - return;  
139 - }  
140 - if (rectObj.flag === 'true' || rectObj.flag === true) {  
141 - loger.log(`课堂密码校验-成功.`);  
142 - this.sendMD5Checking();  
143 - return;  
144 - }  
145 - loger.error(`课堂密码校验-协议异常.`, rectObj);  
146 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_PROTOCOL);  
147 - })  
148 - .catch(err => {  
149 - loger.error(`课堂密码校验-异常.状态码:${err}`);  
150 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_FAILED);  
151 - });  
152 - }  
153 -  
154 - //MD5校验-----------------------------------------------------------------------------------------  
155 - sendMD5Checking() {  
156 - let url = `http://${confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.classId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&nopassword=${confInfo.passwordRequired}&md5=${confInfo.md5}`;  
157 - loger.log('4.MD5校验', url);  
158 - fetch(url, {  
159 - timeout: 5000  
160 - })  
161 - .then(ret => {  
162 - if (ret.status === 200) {  
163 - return ret.json();  
164 - } else {  
165 - loger.error(`MD5校验-网络异常.状态码:${ret.status}`);  
166 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_NETWORK);  
167 - throw '';  
168 - }  
169 - })  
170 - .then(ret => {  
171 - if (ret.flag == "true" || ret.flag == true) {  
172 - loger.log('MD5校验完成');  
173 - loger.log(ret);  
174 - this._emit(Sass.SUCCESS, ret);  
175 - } else {  
176 - loger.log('MD5校验-失败.');  
177 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_MD5_WRONG);  
178 -  
179 - }  
180 - })  
181 - .catch(err => {  
182 - loger.error(`MD5校验-异常.状态码:${err}`);  
183 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_FAILED);  
184 - }); 81 + })
  82 + .catch(err => {
  83 + loger.error(`初始化init获取课堂校验信息-异常.状态码:${err}`);
  84 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_PROTOCOL, err);
  85 + });
  86 + }
  87 +
  88 + // Sass校验开始-->密码校验(如果需要密码)--->MD5校验----------------------------------------------------
  89 + passwordAndMd5Checking(_param) {
  90 + loger.log('2.开始Sass校验');
  91 + loger.log(_param);
  92 + confInfo = _param;
  93 + // 密码校验
  94 + if (confInfo.passwordRequired === 'true' || confInfo.passwordRequired === true) {
  95 + this.sendPWDChecking();
  96 + return;
185 } 97 }
  98 + // MD5校验
  99 + this.sendMD5Checking();
  100 + }
186 101
187 - // 获取课堂基本详情------------------------------------------------------------------------------------  
188 - getClassDetail() {  
189 - let url = `http://${GlobalConfig.portal}/3m/meeting/getClassH5.do?classNumber=${GlobalConfig.classId}`;  
190 - loger.log('获取Class详情.', url);  
191 - fetch(url, {  
192 - timeout: 5000  
193 - })  
194 - .then(ret => {  
195 - if (ret.ok) {  
196 - return ret.json();  
197 - } else {  
198 - loger.error(`获取Class详情-网络异常.状态码:${ret.status}`);  
199 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_DETAIL);  
200 - throw '';  
201 - }  
202 - })  
203 - .then(ret => {  
204 - if (ret.errorCode === 0) {  
205 - loger.log('获取Class详情完成');  
206 - this._emit(Sass.CLASS_GET_CLASS_DETAIL, ret);  
207 - } else {  
208 - loger.warn('获取Class详情失败.');  
209 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_DETAIL);  
210 - }  
211 - })  
212 - .catch(err => {  
213 - loger.error(`获取Class详情异常.状态码:${err}`);  
214 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_DETAIL);  
215 - }); 102 + // 入会密码校验---------------------------------------------------------------------------------------
  103 + sendPWDChecking() {
  104 + //let url = `http://${classInfo.portal}/3m/getCheckMeetinig.do?siteId=${classInfo.siteId}&classId=${classInfo.classId}&password=${classInfo.password}`;
  105 + /*
  106 + /3m/api/meeting/signIn.do
  107 + siteId 站点号
  108 + classId 课堂号(meetingNumber)
  109 + isTeacher 是否是老师:1 是 0 否
  110 + password 输入的密码
  111 + // 请求格式 http://112.126.80.182/3m/api/meeting/signIn.do?siteId=h5test&classId=526661904&password=111111&isTeacher=0
  112 + */
  113 + //判断是否是老师
  114 + let isTeacher = 0;
  115 + if (confInfo.userRole == ApeConsts.host) {
  116 + isTeacher = 1
216 } 117 }
217 118
218 - //获取课堂课堂的完整信息--------------------------------------------------------------------------------  
219 - getClassParam() {  
220 - /*  
221 - 参数 (application/x-www-form-urlencoded):  
222 - 名称 类型 可选 默认值 说明  
223 - meetingNumber String 否 null 课堂号  
224 - timestamp String 否 null 时间戳  
225 - authId String 否 null 验证信息 md5(meetingNumber + timestamp)  
226 - 返回 (application/json):  
227 - 名称 类型 说明  
228 - code int 0 正常  
229 - 1 课堂号必填  
230 - 2 无效的课堂号  
231 - 3 没有对应的站点  
232 - 4 站点已过期  
233 - siteId String 站点号  
234 - meetingNumber String 课堂号 对应的是classId  
235 - */  
236 - var timestamp = new Date().getTime();  
237 - var authId = MD5(GlobalConfig.classId + "" + timestamp);//课堂号+时间戳 的字符串,转成MD5  
238 - let url = `http://${GlobalConfig.portal}/3m/api/meeting/detail.do?meetingNumber=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;  
239 - loger.log('5.获取课堂课堂的完整信息 ');  
240 - loger.log(url);  
241 - fetch(url, {  
242 - timeout: 5000  
243 - })  
244 - .then(ret => {  
245 - if (ret.ok) {  
246 - return ret.json();  
247 - } else {  
248 - loger.error(`获取课堂课堂的完整信息-网络异常.状态码:${ret.status}`);  
249 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_PARAML);  
250 -  
251 - throw '';  
252 - }  
253 - })  
254 - .then(ret => {  
255 - if (ret.code === 0) {  
256 - loger.log('获取课堂课堂的完整信息完成');  
257 - this._emit(Sass.CLASS_GET_CLASS_PARAM, ret);  
258 - } else {  
259 - loger.warn('获取课堂课堂的完整信息 失败.');  
260 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_PARAML);  
261 - }  
262 - })  
263 - .catch(err => {  
264 - loger.error(`获取课堂课堂的完整信息异常.状态码:${err}`);  
265 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_PARAML);  
266 - });  
267 - } 119 + let url = `http://${confInfo.portal}/3m/api/meeting/signIn.do?siteId=${confInfo.siteId}&classId=${confInfo.classId}&isTeacher=${isTeacher}&password=${confInfo.password}`;
  120 + loger.log('3.课堂密码校验', url);
  121 + fetch(url, {
  122 + timeout: 5000
  123 + })
  124 + .then(ret => {
  125 + if (ret.status === 200) {
  126 + return ret.text();
  127 + } else {
  128 + loger.error(`课堂密码校验-网络异常.状态码:${ret.status}`);
  129 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_NETWORK);
  130 + throw '';
  131 + }
  132 + })
  133 + .then(ret => {
  134 + let rectObj = JSON.parse(ret);
  135 + if (rectObj.flag === 'false' || rectObj.flag === false) {
  136 + loger.error(`课堂密码校验-失败.`);
  137 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_PASSWORD_WRONG);
  138 + return;
  139 + }
  140 + if (rectObj.flag === 'true' || rectObj.flag === true) {
  141 + loger.log(`课堂密码校验-成功.`);
  142 + this.sendMD5Checking();
  143 + return;
  144 + }
  145 + loger.error(`课堂密码校验-协议异常.`, rectObj);
  146 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_PROTOCOL);
  147 + })
  148 + .catch(err => {
  149 + loger.error(`课堂密码校验-异常.状态码:${err}`);
  150 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_FAILED);
  151 + });
  152 + }
  153 +
  154 + //MD5校验-----------------------------------------------------------------------------------------
  155 + sendMD5Checking() {
  156 + let url = `http://${confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.classId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&nopassword=${confInfo.passwordRequired}&md5=${confInfo.md5}`;
  157 + loger.log('4.MD5校验', url);
  158 + fetch(url, {
  159 + timeout: 5000
  160 + })
  161 + .then(ret => {
  162 + if (ret.status === 200) {
  163 + return ret.json();
  164 + } else {
  165 + loger.error(`MD5校验-网络异常.状态码:${ret.status}`);
  166 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_NETWORK);
  167 + throw '';
  168 + }
  169 + })
  170 + .then(ret => {
  171 + if (ret.flag == "true" || ret.flag == true) {
  172 + loger.log('MD5校验完成');
  173 + loger.log(ret);
  174 + this._emit(Sass.SUCCESS, ret);
  175 + } else {
  176 + loger.log('MD5校验-失败.');
  177 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_MD5_WRONG);
268 178
269 - //删除文档----------------------------------------------------------------------------------------------------- 179 + }
  180 + })
  181 + .catch(err => {
  182 + loger.error(`MD5校验-异常.状态码:${err}`);
  183 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_FAILED);
  184 + });
  185 + }
  186 +
  187 + // 获取课堂基本详情------------------------------------------------------------------------------------
  188 + getClassDetail() {
  189 + let url = `http://${GlobalConfig.portal}/3m/meeting/getClassH5.do?classNumber=${GlobalConfig.classId}`;
  190 + loger.log('获取Class详情.', url);
  191 + fetch(url, {
  192 + timeout: 5000
  193 + })
  194 + .then(ret => {
  195 + if (ret.ok) {
  196 + return ret.json();
  197 + } else {
  198 + loger.error(`获取Class详情-网络异常.状态码:${ret.status}`);
  199 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_DETAIL);
  200 + throw '';
  201 + }
  202 + })
  203 + .then(ret => {
  204 + if (ret.errorCode === 0) {
  205 + loger.log('获取Class详情完成');
  206 + this._emit(Sass.CLASS_GET_CLASS_DETAIL, ret);
  207 + } else {
  208 + loger.warn('获取Class详情失败.');
  209 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_DETAIL);
  210 + }
  211 + })
  212 + .catch(err => {
  213 + loger.error(`获取Class详情异常.状态码:${err}`);
  214 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_DETAIL);
  215 + });
  216 + }
  217 +
  218 + //获取课堂课堂的完整信息--------------------------------------------------------------------------------
  219 + getClassParam() {
270 /* 220 /*
271 - 删除课堂中的文档,即删除课堂与文档的关联  
272 - /api/document/deleteRelation.do  
273 - 参数  
274 - docId 文档的唯一id  
275 - classId 课堂号  
276 - timestamp 时间戳  
277 - authId md5(docId+classId+timestamp) 221 + 参数 (application/x-www-form-urlencoded):
  222 + 名称 类型 可选 默认值 说明
  223 + meetingNumber String 否 null 课堂号
  224 + timestamp String 否 null 时间戳
  225 + authId String 否 null 验证信息 md5(meetingNumber + timestamp)
278 返回 (application/json): 226 返回 (application/json):
279 - 0 成功, 1 验证信息错误 227 + 名称 类型 说明
  228 + code int 0 正常
  229 + 1 课堂号必填
  230 + 2 无效的课堂号
  231 + 3 没有对应的站点
  232 + 4 站点已过期
  233 + siteId String 站点号
  234 + meetingNumber String 课堂号 对应的是classId
280 */ 235 */
281 - sassDeleteDocument(_param) {  
282 - if(GlobalConfig.isRecordPlayBack){  
283 - loger.log('录制回放中,能删除文档');  
284 - return; 236 + var timestamp = new Date().getTime();
  237 + var authId = MD5(GlobalConfig.classId + "" + timestamp); //课堂号+时间戳 的字符串,转成MD5
  238 + let url = `http://${GlobalConfig.portal}/3m/api/meeting/detail.do?meetingNumber=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  239 + loger.log('5.获取课堂课堂的完整信息 ');
  240 + loger.log(url);
  241 + fetch(url, {
  242 + timeout: 5000
  243 + })
  244 + .then(ret => {
  245 + if (ret.ok) {
  246 + return ret.json();
  247 + } else {
  248 + loger.error(`获取课堂课堂的完整信息-网络异常.状态码:${ret.status}`);
  249 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_PARAML);
  250 +
  251 + throw '';
285 } 252 }
286 - var timestamp = new Date().getTime();  
287 - var authId = MD5(_param.docId + "" + _param.classId + "" + timestamp);// docId+classId+timestamp的字符串,转成MD5  
288 - let url = `http://${GlobalConfig.portal}/3m/api/document/deleteRelation.do?docId=${_param.docId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;  
289 - loger.log('sassDeleteDocument', url);  
290 -  
291 - fetch(url, {  
292 - timeout: 5000  
293 - })  
294 - .then(ret => {  
295 - if (ret.ok) {  
296 - return ret.json();  
297 - } else {  
298 - loger.error(`删除文档-网络异常.状态码:${ret.status}`);  
299 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_DOC_DELETE_FAILED);  
300 -  
301 - throw '';  
302 - }  
303 - })  
304 - .then(ret => {  
305 - if (ret.code === 0) {  
306 - loger.log('删除文档-完成');  
307 - this._emit(Sass.DELETE_DOCUMENT_SUCCESS, _param);  
308 - } else {  
309 - loger.warn('删除文档-失败.')  
310 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_DOC_DELETE_FAILED);  
311 - }  
312 - })  
313 - .catch(err => {  
314 - loger.error(`删除文档-异常.状态码:${err}`);  
315 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_DOC_DELETE_FAILED);  
316 - }); 253 + })
  254 + .then(ret => {
  255 + if (ret.code === 0) {
  256 + loger.log('获取课堂课堂的完整信息完成');
  257 + this._emit(Sass.CLASS_GET_CLASS_PARAM, ret);
  258 + } else {
  259 + loger.warn('获取课堂课堂的完整信息 失败.');
  260 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_PARAML);
  261 + }
  262 + })
  263 + .catch(err => {
  264 + loger.error(`获取课堂课堂的完整信息异常.状态码:${err}`);
  265 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_CLASS_PARAML);
  266 + });
  267 + }
  268 +
  269 + //删除文档-----------------------------------------------------------------------------------------------------
  270 + /*
  271 + 删除课堂中的文档,即删除课堂与文档的关联
  272 + /api/document/deleteRelation.do
  273 + 参数
  274 + docId 文档的唯一id
  275 + classId 课堂号
  276 + timestamp 时间戳
  277 + authId md5(docId+classId+timestamp)
  278 + 返回 (application/json):
  279 + 0 成功, 1 验证信息错误
  280 + */
  281 + sassDeleteDocument(_param) {
  282 + if (GlobalConfig.isRecordPlayBack) {
  283 + loger.log('录制回放中,能删除文档');
  284 + return;
317 } 285 }
318 -  
319 - //删除媒体共享文件  
320 - sassDeletMediaShare(_param) {  
321 - if(GlobalConfig.isRecordPlayBack){  
322 - loger.log('录制回放中,能删除文件');  
323 - return; 286 + var timestamp = new Date().getTime();
  287 + var authId = MD5(_param.docId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
  288 + let url = `http://${GlobalConfig.portal}/3m/api/document/deleteRelation.do?docId=${_param.docId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  289 + loger.log('sassDeleteDocument', url);
  290 +
  291 + fetch(url, {
  292 + timeout: 5000
  293 + })
  294 + .then(ret => {
  295 + if (ret.ok) {
  296 + return ret.json();
  297 + } else {
  298 + loger.error(`删除文档-网络异常.状态码:${ret.status}`);
  299 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_DOC_DELETE_FAILED);
  300 +
  301 + throw '';
324 } 302 }
325 - var timestamp = new Date().getTime();  
326 - var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp);// docId+classId+timestamp的字符串,转成MD5  
327 - let url = `http://${GlobalConfig.portal}/3m/api/sharedMedia/deleteRelation.do?fileId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;  
328 - loger.log('删除媒体共享文件', url);  
329 -  
330 - fetch(url, {  
331 - timeout: 5000  
332 - })  
333 - .then(ret => {  
334 - if (ret.ok) {  
335 - return ret.json();  
336 - } else {  
337 - loger.error(`删除媒体共享文件-网络异常.状态码:${ret.status}`);  
338 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MEDIASHARE_DELETE_FAILED);  
339 -  
340 - throw '';  
341 - }  
342 - })  
343 - .then(ret => {  
344 - //code 0 成功, 1 验证信息错误  
345 - if (ret.code === 0) {  
346 - loger.log('删除媒体共享文件 完成');  
347 - this._emit(Sass.DELETE_MEDIASHARE_SUCCESS, _param);  
348 - } else {  
349 - loger.warn('删除媒体共享文件 失败.');  
350 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MEDIASHARE_DELETE_FAILED);  
351 - }  
352 - })  
353 - .catch(err => {  
354 - loger.error(`删除媒体共享文件-异常.状态码:${err}`);  
355 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MEDIASHARE_DELETE_FAILED);  
356 - }); 303 + })
  304 + .then(ret => {
  305 + if (ret.code === 0) {
  306 + loger.log('删除文档-完成');
  307 + this._emit(Sass.DELETE_DOCUMENT_SUCCESS, _param);
  308 + } else {
  309 + loger.warn('删除文档-失败.')
  310 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_DOC_DELETE_FAILED);
  311 + }
  312 + })
  313 + .catch(err => {
  314 + loger.error(`删除文档-异常.状态码:${err}`);
  315 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_DOC_DELETE_FAILED);
  316 + });
  317 + }
  318 +
  319 + //删除Music共享文件
  320 + sassDeletMusicShare(_param) {
  321 + if (GlobalConfig.isRecordPlayBack) {
  322 + loger.log('录制回放中,能删除文件');
  323 + return;
357 } 324 }
358 -  
359 -  
360 - //保存课堂的当前信息-----------------------------------------------------  
361 - /*保存课堂的当前信息,首次是插入,后面是更新  
362 - /api/meeting/saveInfo.do  
363 - 参数(application/x-www-form-urlencoded):  
364 - info Json字符串课堂信息,由前端自己维护  
365 - classId 课堂号  
366 - timestamp 时间戳  
367 - authId 做基本验证,md5(classId+timestamp)  
368 -  
369 - 返回 (application/json):  
370 - code 0 成功 1 课堂号为空 2 无效的课堂号 3 验证信息错误*/  
371 -  
372 - saveClassStatusInfo(_param) {  
373 - if(GlobalConfig.isRecordPlayBack){  
374 - loger.log('录制回放中,不需要保存课堂信息');  
375 - return; 325 + console.warn('删除Music共享实现...');
  326 + var timestamp = new Date().getTime();
  327 + var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
  328 + let url = `http://${GlobalConfig.portal}/3m/api/media/deleteRelation.do?mediaId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  329 + loger.log('删除媒体共享文件', url);
  330 +
  331 + fetch(url, {
  332 + timeout: 5000
  333 + })
  334 + .then(ret => {
  335 + if (ret.ok) {
  336 + return ret.json();
  337 + } else {
  338 + loger.error(`删除媒体共享文件-网络异常.状态码:${ret.status}`);
  339 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED);
  340 +
  341 + throw '';
376 } 342 }
377 - //{"classStatusInfo":classStatusInfo}  
378 - var timestamp = new Date().getTime();  
379 - var authId = MD5(GlobalConfig.classId + "" + timestamp);// (classId+timestamp)的字符串,转成MD5  
380 - let classStatusInfo = JSON.stringify(_param.classStatusInfo);  
381 - let url = `http://${GlobalConfig.portal}/3m/api/meeting/saveInfo.do`;  
382 - loger.log('saveClassStatusInfo', url);  
383 - fetch(url, {  
384 - method: 'POST',  
385 - headers: {  
386 - "Content-Type": "application/x-www-form-urlencoded"  
387 - },  
388 - body: `classId=${GlobalConfig.classId}&info=${classStatusInfo}&timestamp=${timestamp}&authId=${authId}`,  
389 - timeout: 5000  
390 - })  
391 - .then(ret => {  
392 - if (ret.ok) {  
393 - return ret.json();  
394 - } else {  
395 - loger.error(`saveClassStatusInfo-网络异常.状态码:${ret.status}`);  
396 - //this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_DOC_DELETE_FAILED);  
397 - throw '';  
398 - }  
399 - })  
400 - .then(ret => {  
401 - if (ret.code === 0) {  
402 - loger.log('saveClassStatusInfo 完成');  
403 - this._emit(Sass.CLASS_SAVE_STATUS_INFO_SUCCESS, _param);  
404 - } else if (ret.code === 1) {  
405 - loger.log('saveClassStatusInfo 失败 课堂号为空');  
406 - } else if (ret.code === 2) {  
407 - loger.log('saveClassStatusInfo 失败 无效的课堂号');  
408 - } else if (ret.code === 3) {  
409 - loger.log('saveClassStatusInfo 失败 验证信息错误');  
410 - } else {  
411 - loger.warn('saveClassStatusInfo 失败.', ret);  
412 - //this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_DOC_DELETE_FAILED);  
413 - }  
414 - })  
415 - .catch(err => {  
416 - loger.error(`saveClassStatusInfo.状态码:${err}`);  
417 - //this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_DOC_DELETE_FAILED);  
418 - }); 343 + })
  344 + .then(ret => {
  345 + //code 0 成功, 1 验证信息错误
  346 + if (ret.code === 0) {
  347 + loger.log('删除媒体共享文件 完成');
  348 + this._emit(Sass.DELETE_MUSICSHARE_SUCCESS, _param);
  349 + } else {
  350 + loger.warn('删除媒体共享文件 失败.');
  351 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED);
  352 + }
  353 + })
  354 + .catch(err => {
  355 + loger.error(`删除媒体共享文件-异常.状态码:${err}`);
  356 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED);
  357 + });
  358 + }
  359 +
  360 + //删除媒体共享文件
  361 + sassDeletMediaShare(_param) {
  362 + if (GlobalConfig.isRecordPlayBack) {
  363 + loger.log('录制回放中,能删除文件');
  364 + return;
419 } 365 }
420 -  
421 - //保存录制的信息,主要是录制文件的名称,必须和MCU录制的文件名相同  
422 - saveClassRecordContrlInfo(_param) {  
423 - if(GlobalConfig.isRecordPlayBack){  
424 - loger.log('录制回放中,不需要保存');  
425 - return; 366 + var timestamp = new Date().getTime();
  367 + var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
  368 + let url = `http://${GlobalConfig.portal}/3m/api/sharedMedia/deleteRelation.do?fileId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  369 + loger.log('删除媒体共享文件', url);
  370 +
  371 + fetch(url, {
  372 + timeout: 5000
  373 + })
  374 + .then(ret => {
  375 + if (ret.ok) {
  376 + return ret.json();
  377 + } else {
  378 + loger.error(`删除媒体共享文件-网络异常.状态码:${ret.status}`);
  379 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MEDIASHARE_DELETE_FAILED);
  380 +
  381 + throw '';
426 } 382 }
427 - loger.log('保存开始录制信息');  
428 - let key = "3mang123A";  
429 - let siteID = GlobalConfig.siteId;  
430 - let meetingID = GlobalConfig.classId;  
431 - let userID = GlobalConfig.userId;  
432 - let userName = GlobalConfig.userName;  
433 - let meetingName = GlobalConfig.className;  
434 - let startTime = GlobalConfig.classBeginTime;  
435 - let endTime = GlobalConfig.classEndTime;  
436 - let playUrl = "";  
437 - let streamName = GlobalConfig.recordFileName;  
438 - let confRecordFileName = GlobalConfig.recordFileName;  
439 - let downloadUrl = "";  
440 - let recordStatus = GlobalConfig.classStatus;  
441 - let recordTimestamp = GlobalConfig.classTimestamp;  
442 -  
443 - let timestamp = new Date().getTime();  
444 - let authId = MD5(key + siteID + meetingID + timestamp);  
445 - let url = `http://${GlobalConfig.portal}/3m/recordingMeeting/insertRecordingMeeting.do`;  
446 - loger.log('saveClassRecordContrlInfo', url);  
447 -  
448 - fetch( encodeURI(url), {  
449 - method: 'POST',  
450 - headers: {  
451 - "Content-Type": "application/x-www-form-urlencoded"  
452 - },  
453 - body: `siteID=${siteID}&meetingID=${meetingID}&userID=${userID}&userName=${userName}&meetingName=${meetingName}&startTime=${startTime}&endTime=${endTime}&playUrl=${playUrl}&streamName=${streamName}&downloadUrl=${downloadUrl}&configFile=${confRecordFileName}&timestamp=${timestamp}&recordTimestamp=${recordTimestamp}&authId=${authId}`,  
454 - timeout: 5000  
455 - })  
456 -  
457 - .then(ret => {  
458 - if (ret.ok) {  
459 - return ret.json();  
460 - } else {  
461 - loger.error(`保存开始录制信息-网络异常.状态码:${ret.status}`);  
462 - throw '';  
463 - }  
464 - })  
465 - .then(ret => {  
466 - if (ret.errorCode === 0) {  
467 - loger.log('保存开始录制信息 完成');  
468 - this._emit(Sass.CLASS_SAVE_RECORD_INFO_SUCCESS, _param);  
469 - } else {  
470 - loger.warn('保存开始录制信息 失败.', ret);  
471 - }  
472 - })  
473 - .catch(err => {  
474 - loger.error(`保存开始录制信息异常.状态码:${err}`);  
475 - }); 383 + })
  384 + .then(ret => {
  385 + //code 0 成功, 1 验证信息错误
  386 + if (ret.code === 0) {
  387 + loger.log('删除媒体共享文件 完成');
  388 + this._emit(Sass.DELETE_MEDIASHARE_SUCCESS, _param);
  389 + } else {
  390 + loger.warn('删除媒体共享文件 失败.');
  391 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MEDIASHARE_DELETE_FAILED);
  392 + }
  393 + })
  394 + .catch(err => {
  395 + loger.error(`删除媒体共享文件-异常.状态码:${err}`);
  396 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MEDIASHARE_DELETE_FAILED);
  397 + });
  398 + }
  399 +
  400 + //保存课堂的当前信息-----------------------------------------------------
  401 + /*保存课堂的当前信息,首次是插入,后面是更新
  402 + /api/meeting/saveInfo.do
  403 + 参数(application/x-www-form-urlencoded):
  404 + info Json字符串课堂信息,由前端自己维护
  405 + classId 课堂号
  406 + timestamp 时间戳
  407 + authId 做基本验证,md5(classId+timestamp)
  408 +
  409 + 返回 (application/json):
  410 + code 0 成功 1 课堂号为空 2 无效的课堂号 3 验证信息错误*/
  411 +
  412 + saveClassStatusInfo(_param) {
  413 + if (GlobalConfig.isRecordPlayBack) {
  414 + loger.log('录制回放中,不需要保存课堂信息');
  415 + return;
476 } 416 }
477 -  
478 -  
479 - //答题卡-------------------------------------------------------  
480 - //创建答题数据  
481 - creatQuestion(_param){  
482 - if(GlobalConfig.isRecordPlayBack){  
483 - loger.log('录制回放中->创建答题数据->不做操作');  
484 - return; 417 + //{"classStatusInfo":classStatusInfo}
  418 + var timestamp = new Date().getTime();
  419 + var authId = MD5(GlobalConfig.classId + "" + timestamp); // (classId+timestamp)的字符串,转成MD5
  420 + let classStatusInfo = JSON.stringify(_param.classStatusInfo);
  421 + let url = `http://${GlobalConfig.portal}/3m/api/meeting/saveInfo.do`;
  422 + loger.log('saveClassStatusInfo', url);
  423 + fetch(url, {
  424 + method: 'POST',
  425 + headers: {
  426 + "Content-Type": "application/x-www-form-urlencoded"
  427 + },
  428 + body: `classId=${GlobalConfig.classId}&info=${classStatusInfo}&timestamp=${timestamp}&authId=${authId}`,
  429 + timeout: 5000
  430 + })
  431 + .then(ret => {
  432 + if (ret.ok) {
  433 + return ret.json();
  434 + } else {
  435 + loger.error(`saveClassStatusInfo-网络异常.状态码:${ret.status}`);
  436 + //this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_DOC_DELETE_FAILED);
  437 + throw '';
485 } 438 }
486 - /* {  
487 - "type": 1,//1单选,2多选,3判断,4点名  
488 - "content": "题目",//没有就传""  
489 - "timeLimit": 88,//有效时间(秒)  
490 - "correct": "[]",//正确答案,没有就传[]  
491 - "options": {},//选项数组,没有就传[]  
492 - "option": []//学生选择的答案,没有就传[]  
493 - }*/  
494 - if(!_param){  
495 - loger.warn('创建答题数据->参数错误->param:',_param);  
496 - this._emit(Sass.SASS_CREAT_QUESTION_FAILED);  
497 - return; 439 + })
  440 + .then(ret => {
  441 + if (ret.code === 0) {
  442 + loger.log('saveClassStatusInfo 完成');
  443 + this._emit(Sass.CLASS_SAVE_STATUS_INFO_SUCCESS, _param);
  444 + } else if (ret.code === 1) {
  445 + loger.log('saveClassStatusInfo 失败 课堂号为空');
  446 + } else if (ret.code === 2) {
  447 + loger.log('saveClassStatusInfo 失败 无效的课堂号');
  448 + } else if (ret.code === 3) {
  449 + loger.log('saveClassStatusInfo 失败 验证信息错误');
  450 + } else {
  451 + loger.warn('saveClassStatusInfo 失败.', ret);
  452 + //this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_DOC_DELETE_FAILED);
  453 + }
  454 + })
  455 + .catch(err => {
  456 + loger.error(`saveClassStatusInfo.状态码:${err}`);
  457 + //this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_DOC_DELETE_FAILED);
  458 + });
  459 + }
  460 +
  461 + //保存录制的信息,主要是录制文件的名称,必须和MCU录制的文件名相同
  462 + saveClassRecordContrlInfo(_param) {
  463 + if (GlobalConfig.isRecordPlayBack) {
  464 + loger.log('录制回放中,不需要保存');
  465 + return;
  466 + }
  467 + loger.log('保存开始录制信息');
  468 + let key = "3mang123A";
  469 + let siteID = GlobalConfig.siteId;
  470 + let meetingID = GlobalConfig.classId;
  471 + let userID = GlobalConfig.userId;
  472 + let userName = GlobalConfig.userName;
  473 + let meetingName = GlobalConfig.className;
  474 + let startTime = GlobalConfig.classBeginTime;
  475 + let endTime = GlobalConfig.classEndTime;
  476 + let playUrl = "";
  477 + let streamName = GlobalConfig.recordFileName;
  478 + let confRecordFileName = GlobalConfig.recordFileName;
  479 + let downloadUrl = "";
  480 + let recordStatus = GlobalConfig.classStatus;
  481 + let recordTimestamp = GlobalConfig.classTimestamp;
  482 +
  483 + let timestamp = new Date().getTime();
  484 + let authId = MD5(key + siteID + meetingID + timestamp);
  485 + let url = `http://${GlobalConfig.portal}/3m/recordingMeeting/insertRecordingMeeting.do`;
  486 + loger.log('saveClassRecordContrlInfo', url);
  487 +
  488 + fetch(encodeURI(url), {
  489 + method: 'POST',
  490 + headers: {
  491 + "Content-Type": "application/x-www-form-urlencoded"
  492 + },
  493 + body: `siteID=${siteID}&meetingID=${meetingID}&userID=${userID}&userName=${userName}&meetingName=${meetingName}&startTime=${startTime}&endTime=${endTime}&playUrl=${playUrl}&streamName=${streamName}&downloadUrl=${downloadUrl}&configFile=${confRecordFileName}&timestamp=${timestamp}&recordTimestamp=${recordTimestamp}&authId=${authId}`,
  494 + timeout: 5000
  495 + })
  496 +
  497 + .then(ret => {
  498 + if (ret.ok) {
  499 + return ret.json();
  500 + } else {
  501 + loger.error(`保存开始录制信息-网络异常.状态码:${ret.status}`);
  502 + throw '';
498 } 503 }
499 - let classId=GlobalConfig.classId;//课堂号  
500 - var timestamp = new Date().getTime();  
501 - let authId = MD5(classId+""+timestamp);  
502 -  
503 - let type = parseInt(_param.type);//1单选,2多选,3判断,4点名  
504 - let content =_param.content||"";  
505 - let timeLimit = parseInt(_param.timeLimit);  
506 - let correct = _param.correct.toString();  
507 - let options = JSON.stringify(_param.options);  
508 -  
509 - let url = `http://${GlobalConfig.portal}/3m/api/question/add.do`;  
510 - loger.log('创建答题数据', url);  
511 -  
512 - fetch( encodeURI(url), {  
513 - method: 'POST',  
514 - headers: {  
515 - "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"  
516 - },  
517 - //classId=1&timestamp=2&authId=3&content=&options=["A","B","C","D"]&type=1&correct=0&timeLimit=60  
518 - body: `classId=${classId}&timestamp=${timestamp}&authId=${authId}&content=${content}&options=${options}&type=${type}&correct=${correct}&timeLimit=${timeLimit}`,  
519 - timeout: 5000 504 + })
  505 + .then(ret => {
  506 + if (ret.errorCode === 0) {
  507 + loger.log('保存开始录制信息 完成');
  508 + this._emit(Sass.CLASS_SAVE_RECORD_INFO_SUCCESS, _param);
  509 + } else {
  510 + loger.warn('保存开始录制信息 失败.', ret);
  511 + }
  512 + })
  513 + .catch(err => {
  514 + loger.error(`保存开始录制信息异常.状态码:${err}`);
  515 + });
  516 + }
  517 +
  518 + //答题卡-------------------------------------------------------
  519 + //创建答题数据
  520 + creatQuestion(_param) {
  521 + if (GlobalConfig.isRecordPlayBack) {
  522 + loger.log('录制回放中->创建答题数据->不做操作');
  523 + return;
  524 + }
  525 + /* {
  526 + "type": 1,//1单选,2多选,3判断,4点名
  527 + "content": "题目",//没有就传""
  528 + "timeLimit": 88,//有效时间(秒)
  529 + "correct": "[]",//正确答案,没有就传[]
  530 + "options": {},//选项数组,没有就传[]
  531 + "option": []//学生选择的答案,没有就传[]
  532 + }*/
  533 + if (!_param) {
  534 + loger.warn('创建答题数据->参数错误->param:', _param);
  535 + this._emit(Sass.SASS_CREAT_QUESTION_FAILED);
  536 + return;
  537 + }
  538 + let classId = GlobalConfig.classId; //课堂号
  539 + var timestamp = new Date().getTime();
  540 + let authId = MD5(classId + "" + timestamp);
  541 +
  542 + let type = parseInt(_param.type); //1单选,2多选,3判断,4点名
  543 + let content = _param.content || "";
  544 + let timeLimit = parseInt(_param.timeLimit);
  545 + let correct = _param.correct.toString();
  546 + let options = JSON.stringify(_param.options);
  547 +
  548 + let url = `http://${GlobalConfig.portal}/3m/api/question/add.do`;
  549 + loger.log('创建答题数据', url);
  550 +
  551 + fetch(encodeURI(url), {
  552 + method: 'POST',
  553 + headers: {
  554 + "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
  555 + },
  556 + //classId=1&timestamp=2&authId=3&content=&options=["A","B","C","D"]&type=1&correct=0&timeLimit=60
  557 + body: `classId=${classId}&timestamp=${timestamp}&authId=${authId}&content=${content}&options=${options}&type=${type}&correct=${correct}&timeLimit=${timeLimit}`,
  558 + timeout: 5000
  559 + })
  560 +
  561 + .then(ret => {
  562 + if (ret.ok) {
  563 + return ret.json();
  564 + } else {
  565 + loger.error(`创建答题数据-网络异常.状态码:${ret.status}`);
  566 + this._emit(Sass.SASS_CREAT_QUESTION_FAILED);
  567 + throw '';
  568 + }
520 }) 569 })
521 -  
522 - .then(ret => {  
523 - if (ret.ok) {  
524 - return ret.json();  
525 - } else {  
526 - loger.error(`创建答题数据-网络异常.状态码:${ret.status}`);  
527 - this._emit(Sass.SASS_CREAT_QUESTION_FAILED);  
528 - throw '';  
529 - }  
530 - })  
531 - .then(ret => {  
532 - if (ret.code== 0) {  
533 - //errorCode int 0 正常 1 没有指定的课堂 4 验证信息错误(authId)  
534 - // {"code":0,"id":1}  
535 - let question={};  
536 - question.questionId=ret.id;  
537 - question.type=type;  
538 - question.content=_param.content||[];  
539 - question.timeLimit=timeLimit;  
540 - question.correct=_param.correct||[];  
541 - question.options=_param.options||[];  
542 - loger.log('创建答题数据->完成->',question);  
543 - this._emit(Sass.SASS_CREAT_QUESTION_SUCCESS, question);  
544 - } else {  
545 - loger.warn('创建答题数据->失败.', ret);  
546 - this._emit(Sass.SASS_CREAT_QUESTION_FAILED);  
547 - }  
548 - })  
549 - .catch(err => {  
550 - loger.error(`创建答题数据->状态码:${err}`);  
551 - this._emit(Sass.SASS_CREAT_QUESTION_FAILED);  
552 - }); 570 + .then(ret => {
  571 + if (ret.code == 0) {
  572 + //errorCode int 0 正常 1 没有指定的课堂 4 验证信息错误(authId)
  573 + // {"code":0,"id":1}
  574 + let question = {};
  575 + question.questionId = ret.id;
  576 + question.type = type;
  577 + question.content = _param.content || [];
  578 + question.timeLimit = timeLimit;
  579 + question.correct = _param.correct || [];
  580 + question.options = _param.options || [];
  581 + loger.log('创建答题数据->完成->', question);
  582 + this._emit(Sass.SASS_CREAT_QUESTION_SUCCESS, question);
  583 + } else {
  584 + loger.warn('创建答题数据->失败.', ret);
  585 + this._emit(Sass.SASS_CREAT_QUESTION_FAILED);
  586 + }
  587 + })
  588 + .catch(err => {
  589 + loger.error(`创建答题数据->状态码:${err}`);
  590 + this._emit(Sass.SASS_CREAT_QUESTION_FAILED);
  591 + });
553 } 592 }
554 //保存答题数据 593 //保存答题数据
555 - sendAnswer(_param){  
556 - if(GlobalConfig.isRecordPlayBack){  
557 - loger.log('录制回放中->保存答题数据->不做操作');  
558 - return;  
559 - }  
560 - if(!_param){  
561 - loger.warn('保存答题数据->参数错误->param:',_param); 594 + sendAnswer(_param) {
  595 + if (GlobalConfig.isRecordPlayBack) {
  596 + loger.log('录制回放中->保存答题数据->不做操作');
  597 + return;
  598 + }
  599 + if (!_param) {
  600 + loger.warn('保存答题数据->参数错误->param:', _param);
  601 + this._emit(Sass.SASS_SEND_ANSWER_FAILED);
  602 + return;
  603 + }
  604 + /*classId String课堂号
  605 + timestamp 时间戳
  606 + authId String验证信息md5(classId+timestamp)
  607 +
  608 + questionId long 题目id
  609 + answer String 选择的选项的索引,如果是多选,用英文逗号分隔。例如:'0,3'
  610 + userId String 用户id
  611 + userName String 用户名字*/
  612 +
  613 + let classId = GlobalConfig.classId; //课堂号
  614 + var timestamp = new Date().getTime();
  615 + let authId = MD5(classId + "" + timestamp);
  616 +
  617 + let type = parseInt(_param.type); //1单选,2多选,3判断,4点名
  618 +
  619 + let questionId = parseInt(_param.questionId); //题目id
  620 + let answer = _param.answer.toString();
  621 + let userId = _param.userId;
  622 + let userName = _param.userName;
  623 +
  624 + let url = `http://${GlobalConfig.portal}/3m/api/question/answer.do`;
  625 + loger.log('保存答题数据', url);
  626 +
  627 + fetch(encodeURI(url), {
  628 + method: 'POST',
  629 + headers: {
  630 + "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
  631 + },
  632 + //classId=1&timestamp=2&authId=3&questionId=1&answer=0&userId=111&userName=zhang3
  633 + body: `classId=${classId}&timestamp=${timestamp}&authId=${authId}&questionId=${questionId}&answer=${answer}&userId=${userId}&userName=${userName}`,
  634 + timeout: 5000
  635 + })
  636 +
  637 + .then(ret => {
  638 + if (ret.ok) {
  639 + return ret.json();
  640 + } else {
  641 + loger.error(`保存答题数据-网络异常.状态码:${ret.status}`);
562 this._emit(Sass.SASS_SEND_ANSWER_FAILED); 642 this._emit(Sass.SASS_SEND_ANSWER_FAILED);
563 - return;  
564 - }  
565 - /*classId String课堂号  
566 - timestamp 时间戳  
567 - authId String验证信息md5(classId+timestamp)  
568 -  
569 - questionId long 题目id  
570 - answer String 选择的选项的索引,如果是多选,用英文逗号分隔。例如:'0,3'  
571 - userId String 用户id  
572 - userName String 用户名字*/  
573 -  
574 - let classId=GlobalConfig.classId;//课堂号  
575 - var timestamp = new Date().getTime();  
576 - let authId = MD5(classId+""+timestamp);  
577 -  
578 - let type = parseInt(_param.type);//1单选,2多选,3判断,4点名  
579 -  
580 - let questionId = parseInt(_param.questionId);//题目id  
581 - let answer = _param.answer.toString();  
582 - let userId = _param.userId;  
583 - let userName = _param.userName;  
584 -  
585 - let url = `http://${GlobalConfig.portal}/3m/api/question/answer.do`;  
586 - loger.log('保存答题数据', url);  
587 -  
588 - fetch( encodeURI(url), {  
589 - method: 'POST',  
590 - headers: {  
591 - "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"  
592 - },  
593 - //classId=1&timestamp=2&authId=3&questionId=1&answer=0&userId=111&userName=zhang3  
594 - body: `classId=${classId}&timestamp=${timestamp}&authId=${authId}&questionId=${questionId}&answer=${answer}&userId=${userId}&userName=${userName}`,  
595 - timeout: 5000 643 + throw '';
  644 + }
596 }) 645 })
597 -  
598 - .then(ret => {  
599 - if (ret.ok) {  
600 - return ret.json();  
601 - } else {  
602 - loger.error(`保存答题数据-网络异常.状态码:${ret.status}`);  
603 - this._emit(Sass.SASS_SEND_ANSWER_FAILED);  
604 - throw '';  
605 - }  
606 - })  
607 - .then(ret => {  
608 - if (ret.code== 0) {  
609 - // 0 正常 1 没有指定的课堂 4 验证信息错误(authId) 5 没有指定的题目 6 题目不属于该课堂  
610 - //{"code":0}  
611 - let question=_param;  
612 - loger.log('保存答题数据->完成');  
613 - this._emit(Sass.SASS_SEND_ANSWER_SUCCESS, question);  
614 - } else {  
615 - loger.warn('保存答题数据->失败.', ret);  
616 - this._emit(Sass.SASS_SEND_ANSWER_FAILED);  
617 - }  
618 - })  
619 - .catch(err => {  
620 - loger.error(`保存答题数据->状态码:${err}`);  
621 - this._emit(Sass.SASS_SEND_ANSWER_FAILED);  
622 - }); 646 + .then(ret => {
  647 + if (ret.code == 0) {
  648 + // 0 正常 1 没有指定的课堂 4 验证信息错误(authId) 5 没有指定的题目 6 题目不属于该课堂
  649 + //{"code":0}
  650 + let question = _param;
  651 + loger.log('保存答题数据->完成');
  652 + this._emit(Sass.SASS_SEND_ANSWER_SUCCESS, question);
  653 + } else {
  654 + loger.warn('保存答题数据->失败.', ret);
  655 + this._emit(Sass.SASS_SEND_ANSWER_FAILED);
  656 + }
  657 + })
  658 + .catch(err => {
  659 + loger.error(`保存答题数据->状态码:${err}`);
  660 + this._emit(Sass.SASS_SEND_ANSWER_FAILED);
  661 + });
623 } 662 }
624 //查询题目数据 663 //查询题目数据
625 - getQuestion(_param){  
626 - if(GlobalConfig.isRecordPlayBack){  
627 - loger.log('录制回放中->查询题目数据->不做操作');  
628 - return;  
629 - }  
630 - if(!_param){  
631 - loger.warn('查询题目数据->参数错误->param:',_param); 664 + getQuestion(_param) {
  665 + if (GlobalConfig.isRecordPlayBack) {
  666 + loger.log('录制回放中->查询题目数据->不做操作');
  667 + return;
  668 + }
  669 + if (!_param) {
  670 + loger.warn('查询题目数据->参数错误->param:', _param);
  671 + this._emit(Sass.SASS_GET_QUESTION_FAILED);
  672 + return;
  673 + }
  674 + //questionId long 题目id
  675 +
  676 + let questionId = parseInt(_param.questionId); //题目id
  677 + let url = `http://${GlobalConfig.portal}/3m/api/question/get.do`;
  678 + loger.log('查询题目数据', url);
  679 + //接口中用的是GET
  680 + fetch(encodeURI(url), {
  681 + method: 'POST',
  682 + headers: {
  683 + "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
  684 + },
  685 + body: `questionId=${questionId}`,
  686 + timeout: 5000
  687 + })
  688 +
  689 + .then(ret => {
  690 + if (ret.ok) {
  691 + return ret.json();
  692 + } else {
  693 + loger.error(`查询题目数据-网络异常.状态码:${ret.status}`);
632 this._emit(Sass.SASS_GET_QUESTION_FAILED); 694 this._emit(Sass.SASS_GET_QUESTION_FAILED);
633 - return;  
634 - }  
635 - //questionId long 题目id  
636 -  
637 - let questionId = parseInt(_param.questionId);//题目id  
638 - let url = `http://${GlobalConfig.portal}/3m/api/question/get.do`;  
639 - loger.log('查询题目数据', url);  
640 - //接口中用的是GET  
641 - fetch( encodeURI(url), {  
642 - method: 'POST',  
643 - headers: {  
644 - "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"  
645 - },  
646 - body: `questionId=${questionId}`,  
647 - timeout: 5000 695 + throw '';
  696 + }
648 }) 697 })
649 -  
650 - .then(ret => {  
651 - if (ret.ok) {  
652 - return ret.json();  
653 - } else {  
654 - loger.error(`查询题目数据-网络异常.状态码:${ret.status}`);  
655 - this._emit(Sass.SASS_GET_QUESTION_FAILED);  
656 - throw '';  
657 - }  
658 - })  
659 - .then(ret => {  
660 - if (ret.code== 0) {  
661 - //0 正常 5 没有指定的题目  
662 - //{"timeLimit":90,"code":0,"options":"[\"A\",\"B\",\"C\"]","id":22,"type":2,"content":"题目"}  
663 - loger.log('查询题目数据->完成');  
664 - let question={};  
665 - question.questionId=ret.id||questionId;  
666 - question.type=ret.type;  
667 - question.timeLimit=ret.timeLimit;  
668 - question.options=ret.options;  
669 - question.content=ret.content;  
670 -  
671 - this._emit(Sass.SASS_GET_QUESTION_SUCCESS, question);  
672 - } else {  
673 - loger.warn('查询题目数据->失败.', ret);  
674 - this._emit(Sass.SASS_GET_QUESTION_FAILED);  
675 - }  
676 - })  
677 - .catch(err => {  
678 - loger.error(`查询题目数据->状态码:${err}`);  
679 - this._emit(Sass.SASS_GET_QUESTION_FAILED);  
680 - }); 698 + .then(ret => {
  699 + if (ret.code == 0) {
  700 + //0 正常 5 没有指定的题目
  701 + //{"timeLimit":90,"code":0,"options":"[\"A\",\"B\",\"C\"]","id":22,"type":2,"content":"题目"}
  702 + loger.log('查询题目数据->完成');
  703 + let question = {};
  704 + question.questionId = ret.id || questionId;
  705 + question.type = ret.type;
  706 + question.timeLimit = ret.timeLimit;
  707 + question.options = ret.options;
  708 + question.content = ret.content;
  709 +
  710 + this._emit(Sass.SASS_GET_QUESTION_SUCCESS, question);
  711 + } else {
  712 + loger.warn('查询题目数据->失败.', ret);
  713 + this._emit(Sass.SASS_GET_QUESTION_FAILED);
  714 + }
  715 + })
  716 + .catch(err => {
  717 + loger.error(`查询题目数据->状态码:${err}`);
  718 + this._emit(Sass.SASS_GET_QUESTION_FAILED);
  719 + });
681 } 720 }
682 //查询答题结果数据 721 //查询答题结果数据
683 - getQuestionResult(_param){  
684 - if(GlobalConfig.isRecordPlayBack){  
685 - loger.log('录制回放中->查询答题结果数据->不做操作');  
686 - return; 722 + getQuestionResult(_param) {
  723 + if (GlobalConfig.isRecordPlayBack) {
  724 + loger.log('录制回放中->查询答题结果数据->不做操作');
  725 + return;
  726 + }
  727 + if (!_param) {
  728 + loger.warn('查询答题结果数据->参数错误->param:', _param);
  729 + this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);
  730 + return;
  731 + }
  732 + //questionId long 题目id
  733 +
  734 + let questionId = parseInt(_param.questionId); //题目id
  735 + let url = `http://${GlobalConfig.portal}/3m/api/question/results.do`;
  736 + loger.log('查询答题结果数据', url);
  737 +
  738 + fetch(encodeURI(url), {
  739 + method: 'POST',
  740 + headers: {
  741 + "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
  742 + },
  743 + body: `questionId=${questionId}`,
  744 + timeout: 5000
  745 + })
  746 +
  747 + .then(ret => {
  748 + if (ret.ok) {
  749 + return ret.json();
  750 + } else {
  751 + loger.error(`查询答题结果数据-网络异常.状态码:${ret.status}`);
  752 + this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);
  753 + throw '';
687 } 754 }
688 - if(!_param){  
689 - loger.warn('查询答题结果数据->参数错误->param:',_param);  
690 - this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);  
691 - return; 755 + })
  756 + .then(ret => {
  757 + if (ret.code == 0) {
  758 + //int 0 正常5 没有指定的题目
  759 + /* list array 数组
  760 + userId string 用户id
  761 + userName string 用户姓名
  762 + answer string 答案。选项的索引,多个时用逗号分隔
  763 + {"timeLimit":0,"content":"test question","id":11,"code":0,"type":3,"options":"["True", "False"]"}*/
  764 +
  765 + loger.log('查询答题结果数据->完成');
  766 + let result = _param || {};
  767 + result.questionId = questionId;
  768 + result.list = ret.list;
  769 + this._emit(Sass.SASS_GET_QUESTION_RESULT_SUCCESS, result);
  770 + } else {
  771 + loger.warn('查询答题结果数据->失败.', ret);
  772 + this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);
692 } 773 }
693 - //questionId long 题目id  
694 -  
695 - let questionId = parseInt(_param.questionId);//题目id  
696 - let url = `http://${GlobalConfig.portal}/3m/api/question/results.do`;  
697 - loger.log('查询答题结果数据', url);  
698 -  
699 - fetch( encodeURI(url), {  
700 - method: 'POST',  
701 - headers: {  
702 - "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"  
703 - },  
704 - body: `questionId=${questionId}`,  
705 - timeout: 5000  
706 - })  
707 -  
708 - .then(ret => {  
709 - if (ret.ok) {  
710 - return ret.json();  
711 - } else {  
712 - loger.error(`查询答题结果数据-网络异常.状态码:${ret.status}`);  
713 - this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);  
714 - throw '';  
715 - }  
716 - })  
717 - .then(ret => {  
718 - if (ret.code== 0) {  
719 - //int 0 正常5 没有指定的题目  
720 - /* list array 数组  
721 - userId string 用户id  
722 - userName string 用户姓名  
723 - answer string 答案。选项的索引,多个时用逗号分隔  
724 - {"timeLimit":0,"content":"test question","id":11,"code":0,"type":3,"options":"["True", "False"]"}*/  
725 -  
726 - loger.log('查询答题结果数据->完成');  
727 - let result=_param||{};  
728 - result.questionId=questionId;  
729 - result.list=ret.list;  
730 - this._emit(Sass.SASS_GET_QUESTION_RESULT_SUCCESS, result);  
731 - } else {  
732 - loger.warn('查询答题结果数据->失败.', ret);  
733 - this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);  
734 - }  
735 - })  
736 - .catch(err => {  
737 - loger.error(`查询答题结果数据->状态码:${err}`);  
738 - this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);  
739 - });  
740 - }  
741 -  
742 - //点名--------------------------------------------------------- 774 + })
  775 + .catch(err => {
  776 + loger.error(`查询答题结果数据->状态码:${err}`);
  777 + this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);
  778 + });
  779 + }
  780 +
  781 + //点名---------------------------------------------------------
743 } 782 }
744 783
745 Sass.prototype.SUCCESS = Sass.SUCCESS = 'Sass_success'; 784 Sass.prototype.SUCCESS = Sass.SUCCESS = 'Sass_success';
746 Sass.prototype.CLASS_INIT_SUCCESS = Sass.CLASS_INIT_SUCCESS = 'sass_class_init_success'; 785 Sass.prototype.CLASS_INIT_SUCCESS = Sass.CLASS_INIT_SUCCESS = 'sass_class_init_success';
747 Sass.prototype.CLASS_GET_CLASS_PARAM = Sass.CLASS_GET_CLASS_PARAM = 'sass_class_getClassParam.message'; 786 Sass.prototype.CLASS_GET_CLASS_PARAM = Sass.CLASS_GET_CLASS_PARAM = 'sass_class_getClassParam.message';
748 Sass.prototype.CLASS_GET_CLASS_DETAIL = Sass.CLASS_GET_CLASS_DETAIL = 'sass_class_getClassDetail_message'; 787 Sass.prototype.CLASS_GET_CLASS_DETAIL = Sass.CLASS_GET_CLASS_DETAIL = 'sass_class_getClassDetail_message';
749 -Sass.prototype.DELETE_DOCUMENT_SUCCESS = Sass.DELETE_DOCUMENT_SUCCESS = 'sass_class_deleteDocumentSuccess_message';//删除文档成功  
750 -Sass.prototype.DELETE_MEDIASHARE_SUCCESS = Sass.DELETE_MEDIASHARE_SUCCESS = 'sass_class_deleteMediaShareSuccess_message';//删除文档成功 788 +Sass.prototype.DELETE_DOCUMENT_SUCCESS = Sass.DELETE_DOCUMENT_SUCCESS = 'sass_class_deleteDocumentSuccess_message'; //删除文档成功
  789 +Sass.prototype.DELETE_MEDIASHARE_SUCCESS = Sass.DELETE_MEDIASHARE_SUCCESS = 'sass_class_deleteMediaShareSuccess_message'; //删除文档成功
  790 +Sass.prototype.DELETE_MUSICSHARE_SUCCESS = Sass.DELETE_MUSICSHARE_SUCCESS = 'sass_class_deleteMusicShareSuccess_message'; //删除文档成功
751 791
752 -Sass.prototype.CLASS_SAVE_STATUS_INFO_SUCCESS = Sass.CLASS_SAVE_STATUS_INFO_SUCCESS = 'sass_class_saveClassStatusInfoSuccess_message';//保存课堂状态信息  
753 -Sass.prototype.CLASS_SAVE_RECORD_INFO_SUCCESS = Sass.CLASS_SAVE_RECORD_INFO_SUCCESS = 'sass_class_saveClassRecordInfoSuccess_message';//保存录制课堂信息 792 +Sass.prototype.CLASS_SAVE_STATUS_INFO_SUCCESS = Sass.CLASS_SAVE_STATUS_INFO_SUCCESS = 'sass_class_saveClassStatusInfoSuccess_message'; //保存课堂状态信息
  793 +Sass.prototype.CLASS_SAVE_RECORD_INFO_SUCCESS = Sass.CLASS_SAVE_RECORD_INFO_SUCCESS = 'sass_class_saveClassRecordInfoSuccess_message'; //保存录制课堂信息
754 794
755 //答题卡和点名 795 //答题卡和点名
756 -Sass.prototype.SASS_CREAT_QUESTION_SUCCESS = Sass.SASS_CREAT_QUESTION_SUCCESS = 'sass_creat_question_success';//创建答题卡问题成功  
757 -Sass.prototype.SASS_CREAT_QUESTION_FAILED = Sass.SASS_CREAT_QUESTION_FAILED = 'sass_creat_question_failed';//创建答题卡失败 796 +Sass.prototype.SASS_CREAT_QUESTION_SUCCESS = Sass.SASS_CREAT_QUESTION_SUCCESS = 'sass_creat_question_success'; //创建答题卡问题成功
  797 +Sass.prototype.SASS_CREAT_QUESTION_FAILED = Sass.SASS_CREAT_QUESTION_FAILED = 'sass_creat_question_failed'; //创建答题卡失败
758 798
759 -Sass.prototype.SASS_GET_QUESTION_SUCCESS = Sass.SASS_GET_QUESTION_SUCCESS = 'sass_get_question_success';//获取问题成功  
760 -Sass.prototype.SASS_GET_QUESTION_FAILED = Sass.SASS_GET_QUESTION_FAILED = 'sass_get_question_failed';//获取问题失败 799 +Sass.prototype.SASS_GET_QUESTION_SUCCESS = Sass.SASS_GET_QUESTION_SUCCESS = 'sass_get_question_success'; //获取问题成功
  800 +Sass.prototype.SASS_GET_QUESTION_FAILED = Sass.SASS_GET_QUESTION_FAILED = 'sass_get_question_failed'; //获取问题失败
761 801
762 -Sass.prototype.SASS_GET_QUESTION_RESULT_SUCCESS = Sass.SASS_GET_QUESTION_RESULT_SUCCESS = 'sass_get_question_result_success';//获取问题结果成功  
763 -Sass.prototype.SASS_GET_QUESTION_RESULT_FAILED = Sass.SASS_GET_QUESTION_RESULT_FAILED = 'sass_get_question_result_failed';//获取问题结果失败 802 +Sass.prototype.SASS_GET_QUESTION_RESULT_SUCCESS = Sass.SASS_GET_QUESTION_RESULT_SUCCESS = 'sass_get_question_result_success'; //获取问题结果成功
  803 +Sass.prototype.SASS_GET_QUESTION_RESULT_FAILED = Sass.SASS_GET_QUESTION_RESULT_FAILED = 'sass_get_question_result_failed'; //获取问题结果失败
764 804
765 -Sass.prototype.SASS_SEND_ANSWER_SUCCESS = Sass.SASS_SEND_ANSWER_SUCCESS = 'sass_send_answer_success';//保存答案成功  
766 -Sass.prototype.SASS_SEND_ANSWER_FAILED = Sass.SASS_SEND_ANSWER_FAILED = 'sass_send_answer_failed';//保存答案失败 805 +Sass.prototype.SASS_SEND_ANSWER_SUCCESS = Sass.SASS_SEND_ANSWER_SUCCESS = 'sass_send_answer_success'; //保存答案成功
  806 +Sass.prototype.SASS_SEND_ANSWER_FAILED = Sass.SASS_SEND_ANSWER_FAILED = 'sass_send_answer_failed'; //保存答案失败
767 807
768 export default new Sass; 808 export default new Sass;
769 809
@@ -95,7 +95,7 @@ class ConferApe extends Ape { @@ -95,7 +95,7 @@ class ConferApe extends Ape {
95 getNodeInfo() { 95 getNodeInfo() {
96 let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu']; 96 let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu'];
97 nodeInfoRecordPdu.nodeId = GlobalConfig.nodeId; 97 nodeInfoRecordPdu.nodeId = GlobalConfig.nodeId;
98 - nodeInfoRecordPdu.selfSilence = JSON.stringify(GlobalConfig.selfSilence)||""; 98 + nodeInfoRecordPdu.selfSilence = JSON.stringify(GlobalConfig.selfSilence) || "";
99 nodeInfoRecordPdu.name = GlobalConfig.userName; 99 nodeInfoRecordPdu.name = GlobalConfig.userName;
100 nodeInfoRecordPdu.role = ApeConsts.userTypesToId[GlobalConfig.userRole] || 1; //NR_NORMAL用户的身份,根据用户登录时的身份设置; 100 nodeInfoRecordPdu.role = ApeConsts.userTypesToId[GlobalConfig.userRole] || 1; //NR_NORMAL用户的身份,根据用户登录时的身份设置;
101 nodeInfoRecordPdu.level = GlobalConfig.level; 101 nodeInfoRecordPdu.level = GlobalConfig.level;
@@ -333,11 +333,11 @@ class ConferApe extends Ape { @@ -333,11 +333,11 @@ class ConferApe extends Ape {
333 333
334 // 全局禁言 334 // 全局禁言
335 silenceClass(params) { 335 silenceClass(params) {
336 - if (GlobalConfig.isHost) { 336 + if (!GlobalConfig.isNormal) {
337 //同步禁言状态 337 //同步禁言状态
338 this.sendUpdaterClassStatusInfo(params); 338 this.sendUpdaterClassStatusInfo(params);
339 } else { 339 } else {
340 - loger.warn('没有开始课堂的权限'); 340 + loger.warn('老师/监客拥有改权限');
341 } 341 }
342 } 342 }
343 343
@@ -415,13 +415,13 @@ class ConferApe extends Ape { @@ -415,13 +415,13 @@ class ConferApe extends Ape {
415 } 415 }
416 let msgObj = {}; 416 let msgObj = {};
417 msgObj.nodeId = _param.nodeId; 417 msgObj.nodeId = _param.nodeId;
418 - msgObj.silence = _param.silence ||{}; 418 + msgObj.silence = _param.silence || {};
419 this.sendConferMsg({ "to": _param.nodeId, "message": JSON.stringify(msgObj), "actionType": ApeConsts.USER_ACTION_SILENCE_STATUS_CHANGE }); 419 this.sendConferMsg({ "to": _param.nodeId, "message": JSON.stringify(msgObj), "actionType": ApeConsts.USER_ACTION_SILENCE_STATUS_CHANGE });
420 } 420 }
421 421
422 changeSilenceStatus(_param) { 422 changeSilenceStatus(_param) {
423 loger.log('切换禁言状态->', _param); 423 loger.log('切换禁言状态->', _param);
424 - GlobalConfig.selfSilence = _param.silence||{}; 424 + GlobalConfig.selfSilence = _param.silence || {};
425 this.updateUserInfo(); 425 this.updateUserInfo();
426 } 426 }
427 427
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 // Author: AlexWang 8 // Author: AlexWang
9 // Date: 2016-08-26 17:36:20 9 // Date: 2016-08-26 17:36:20
10 // QQ Email: 1669499355@qq.com 10 // QQ Email: 1669499355@qq.com
11 -// Last Modified time: 2017-06-27 18:13:39 11 +// Last Modified time: 2017-06-29 14:09:25
12 // Description: LiveClass-CursorApe 12 // Description: LiveClass-CursorApe
13 // 13 //
14 // ////////////////////////////////////////////////////////////////////////////// 14 // //////////////////////////////////////////////////////////////////////////////
@@ -54,7 +54,7 @@ class CursorApe extends Ape { @@ -54,7 +54,7 @@ class CursorApe extends Ape {
54 return; 54 return;
55 } 55 }
56 56
57 - let itemIdx = EngineUtils.creatSoleNumberFromTimestamp(); //创建时间戳,保证每条数据的唯一 57 + let itemIdx = ApeConsts.CURSOR_OBJ_TABLE_ID;
58 let cursorModelPdu = this.packPdu(_param, itemIdx); 58 let cursorModelPdu = this.packPdu(_param, itemIdx);
59 if (cursorModelPdu == null) { 59 if (cursorModelPdu == null) {
60 loger.warn('添加标注失败-->参数错误->', _param); 60 loger.warn('添加标注失败-->参数错误->', _param);
@@ -68,13 +68,14 @@ class CursorApe extends Ape { @@ -68,13 +68,14 @@ class CursorApe extends Ape {
68 tableItemPdu.owner = 0; //收到flash的是这个值,不清楚先写固定 68 tableItemPdu.owner = 0; //收到flash的是这个值,不清楚先写固定
69 tableItemPdu.itemData = cursorModelPdu.toArrayBuffer(); 69 tableItemPdu.itemData = cursorModelPdu.toArrayBuffer();
70 70
71 - //insert  
72 - let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];  
73 - tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU; // 71 + let tableInsertItemPdu = new pdu['RCRegistryTableUpdateItemPdu'];
  72 + //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
  73 + //repeated RCRegistryTableItemPdu items = 2;
  74 + tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_UPDATE_PDU; //
74 tableInsertItemPdu.items.push(tableItemPdu); 75 tableInsertItemPdu.items.push(tableItemPdu);
75 76
76 let updateObjPdu = new pdu['RCRegistryUpdateObjPdu']; 77 let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
77 - updateObjPdu.objId = ApeConsts.CURSOR_OBJ_TABLE_ID; 78 + updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID; // updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
78 updateObjPdu.subType = tableInsertItemPdu.type; 79 updateObjPdu.subType = tableInsertItemPdu.type;
79 updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer(); 80 updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
80 81
@@ -87,14 +88,14 @@ class CursorApe extends Ape { @@ -87,14 +88,14 @@ class CursorApe extends Ape {
87 adapterPdu.type = pdu.RCPDU_REG_ADAPTER; 88 adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
88 adapterPdu.item.push(adapterItemPdu); 89 adapterPdu.item.push(adapterItemPdu);
89 90
90 - loger.log("添加标注->itemIdx=" + tableItemPdu.itemIdx); 91 + loger.log("发送更新.itemIdx=" + tableItemPdu.itemIdx);
91 this.sendUniform(adapterPdu, true); 92 this.sendUniform(adapterPdu, true);
92 } 93 }
93 94
94 /////鼠标数据接受///////////////////////////////////////////////////////////////////////////////// 95 /////鼠标数据接受/////////////////////////////////////////////////////////////////////////////////
95 - tableInsertHandler(owner, itemIdx, itemData) { 96 + tableUpdateHandler(owner, itemIdx, itemData) {
96 let cursorModel = this.unPackPdu(owner, itemIdx, itemData); 97 let cursorModel = this.unPackPdu(owner, itemIdx, itemData);
97 - loger.log('tableInsertHandler', "activeDocId->", GlobalConfig.activeDocId, "parentId->", cursorModel.parentId); 98 + loger.log('tableUpdateHandler', "activeDocId->", GlobalConfig.activeDocId, "parentId->", cursorModel.parentId);
98 loger.log(cursorModel); 99 loger.log(cursorModel);
99 if (cursorModel) { 100 if (cursorModel) {
100 this._emit(MessageTypes.CURSOR_UPDATE, cursorModel); 101 this._emit(MessageTypes.CURSOR_UPDATE, cursorModel);
@@ -131,8 +132,8 @@ class CursorApe extends Ape { @@ -131,8 +132,8 @@ class CursorApe extends Ape {
131 unPackPdu(owner, itemIdx, itemData) { 132 unPackPdu(owner, itemIdx, itemData) {
132 try { 133 try {
133 loger.log("鼠标标注数据->unPackPdu"); 134 loger.log("鼠标标注数据->unPackPdu");
134 - let cursorModelPdu = pdu['RCCursorDataModelPdu'].decode(itemData);  
135 - let _pointGroup = EngineUtils.arrayFromJsonString(cursorModelPdu.pointGroup); 135 + const cursorModelPdu = pdu['RCCursorDataModelPdu'].decode(itemData);
  136 + const _pointGroup = EngineUtils.arrayFromJsonString(cursorModelPdu.pointGroup);
136 cursorModelPdu.pointGroup = _pointGroup; 137 cursorModelPdu.pointGroup = _pointGroup;
137 return cursorModelPdu; 138 return cursorModelPdu;
138 } catch (err) { 139 } catch (err) {
@@ -102,7 +102,7 @@ class MusicSharedApe extends Ape { @@ -102,7 +102,7 @@ class MusicSharedApe extends Ape {
102 adapterPdu.type = pdu.RCPDU_REG_ADAPTER; 102 adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
103 adapterPdu.item.push(adapterItemPdu); 103 adapterPdu.item.push(adapterItemPdu);
104 104
105 - loger.log("媒体文件发送删除数据=============>" + tableDeleteItemPdu.itemIdx); 105 + loger.log("MUSIC文件发送删除数据=============>" + tableDeleteItemPdu.itemIdx);
106 this.sendUniform(adapterPdu, true); 106 this.sendUniform(adapterPdu, true);
107 } 107 }
108 108
@@ -347,7 +347,7 @@ class MusicSharedApe extends Ape { @@ -347,7 +347,7 @@ class MusicSharedApe extends Ape {
347 loger.log('添加媒体文件->设置当前激活的媒体文件id'); 347 loger.log('添加媒体文件->设置当前激活的媒体文件id');
348 } 348 }
349 let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo); 349 let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo);
350 - this._emit(MessageTypes.MEDIA_SHARED_UPDATE, getMusicPackFullInfo); 350 + this._emit(MessageTypes.MUSIC_SHARED_UPDATE, getMusicPackFullInfo);
351 } 351 }
352 } 352 }
353 //媒体文件数据更新完毕,如果当前没有显示的媒体文件,默认选择一个显示 353 //媒体文件数据更新完毕,如果当前没有显示的媒体文件,默认选择一个显示
@@ -367,7 +367,7 @@ class MusicSharedApe extends Ape { @@ -367,7 +367,7 @@ class MusicSharedApe extends Ape {
367 GlobalConfig.activeMusicSeek = 1; //当前激活的媒体文件的当前页 367 GlobalConfig.activeMusicSeek = 1; //当前激活的媒体文件的当前页
368 loger.log('删除媒体文件数据->清除当前显示的媒体文件'); 368 loger.log('删除媒体文件数据->清除当前显示的媒体文件');
369 } 369 }
370 - this._emit(MessageTypes.MEDIA_SHARED_DELETE, { "itemIdx": itemIdxs[i] }); 370 + this._emit(MessageTypes.MUSIC_SHARED_DELETE, { "itemIdx": itemIdxs[i] });
371 delete this.musicSharedList[itemIdxs[i]]; 371 delete this.musicSharedList[itemIdxs[i]];
372 } 372 }
373 } 373 }
@@ -393,7 +393,7 @@ class MusicSharedApe extends Ape { @@ -393,7 +393,7 @@ class MusicSharedApe extends Ape {
393 loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMusicId, "curPageNum->", GlobalConfig.activeMusicSeek); 393 loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMusicId, "curPageNum->", GlobalConfig.activeMusicSeek);
394 } 394 }
395 let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo); 395 let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo);
396 - this._emit(MessageTypes.MEDIA_SHARED_UPDATE, getMusicPackFullInfo); 396 + this._emit(MessageTypes.MUSIC_SHARED_UPDATE, getMusicPackFullInfo);
397 } else { 397 } else {
398 loger.log('更新媒体文件-> 数据无效--> itemIdx', itemIdx); 398 loger.log('更新媒体文件-> 数据无效--> itemIdx', itemIdx);
399 } 399 }