李勇

修复视频模块和音频模块,释放nodeId对应的频道信息时 信息不一致的问题,课堂中正在推流的人员掉线之后,课堂内释放占用的频道时,信息应该按使用者的信息来释放

此 diff 太大无法显示。
@@ -32,7 +32,7 @@ import QuestionApe from 'apes/QuestionApe'; @@ -32,7 +32,7 @@ import QuestionApe from 'apes/QuestionApe';
32 import UTF8 from 'utf-8'; 32 import UTF8 from 'utf-8';
33 33
34 let loger = Loger.getLoger('McuClient'); 34 let loger = Loger.getLoger('McuClient');
35 -let _sdkInfo = {"version": "v1.35.4.20170619", "author": "www.3mang.com"}; 35 +let _sdkInfo = {"version": "v1.36.1.20170619", "author": "www.3mang.com"};
36 36
37 //APE 37 //APE
38 let _sass; 38 let _sass;
@@ -381,6 +381,7 @@ export default class MessageEntrance extends Emiter { @@ -381,6 +381,7 @@ export default class MessageEntrance extends Emiter {
381 if (_video_ape) { 381 if (_video_ape) {
382 _video_ape.stopPublishVideo(data); 382 _video_ape.stopPublishVideo(data);
383 383
  384 + //停止屏幕共享
384 if(GlobalConfig.nodeId==data.nodeId){ 385 if(GlobalConfig.nodeId==data.nodeId){
385 _video_ape.stopPublishScreenShare(data); 386 _video_ape.stopPublishScreenShare(data);
386 } 387 }
@@ -205,15 +205,19 @@ class AudioApe extends Ape { @@ -205,15 +205,19 @@ class AudioApe extends Ape {
205 return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; 205 return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"};
206 } 206 }
207 207
208 - let openingChannel = this.mediaModule.getOpeningMediaChannel(nodeId);  
209 - if (openingChannel == 0) { 208 + let openingChannelInfo = this.mediaModule.getOpeningMediaChannelForNodeId(nodeId);
  209 + if (openingChannelInfo.channelId == 0) {
210 loger.warn(nodeId,"没有占用频道不需要处理"); 210 loger.warn(nodeId,"没有占用频道不需要处理");
211 return {"code": ApeConsts.RETURN_FAILED, "data": "没有占用channel不需要处理"}; 211 return {"code": ApeConsts.RETURN_FAILED, "data": "没有占用channel不需要处理"};
212 } 212 }
213 213
214 let channelInfo=this.mediaModule.getDefaultChannelInfo(); 214 let channelInfo=this.mediaModule.getDefaultChannelInfo();
215 channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; 215 channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED;
216 - channelInfo.channelId=openingChannel; 216 + channelInfo.channelId=openingChannelInfo.channelId;
  217 + channelInfo.nodeId=openingChannelInfo.fromNodeId;
  218 + channelInfo.userRole=openingChannelInfo.userRole;
  219 + channelInfo.userName=openingChannelInfo.userName;
  220 + channelInfo.userId=openingChannelInfo.userId;
217 221
218 this.sendTableUpdateHandler(channelInfo); 222 this.sendTableUpdateHandler(channelInfo);
219 //递归检查,800毫秒之后执行 223 //递归检查,800毫秒之后执行
@@ -232,18 +232,20 @@ class MediaModule { @@ -232,18 +232,20 @@ class MediaModule {
232 } 232 }
233 233
234 //获取当前属于nodeId的已经打开的的channel,返回值为0代表没有打开的,否则返回的就是打开的channelId 234 //获取当前属于nodeId的已经打开的的channel,返回值为0代表没有打开的,否则返回的就是打开的channelId
235 - getOpeningMediaChannel(_nodeId){ 235 + getOpeningMediaChannelForNodeId(_nodeId){
236 loger.log("getOpeningMediaChannel","nodeId",_nodeId,"mediaChannels:",this.mediaChannels); 236 loger.log("getOpeningMediaChannel","nodeId",_nodeId,"mediaChannels:",this.mediaChannels);
  237 + let channelInfo={};
  238 + channelInfo.channelId=0;
237 if(_nodeId==null||_nodeId==0){ 239 if(_nodeId==null||_nodeId==0){
238 - return 0; 240 + return channelInfo;
239 } 241 }
240 for (let key in this.mediaChannels) { 242 for (let key in this.mediaChannels) {
241 let item = this.mediaChannels[key]; 243 let item = this.mediaChannels[key];
242 if (item && item.status == ApeConsts.CHANNEL_STATUS_OPENING&&item.fromNodeId==_nodeId) { 244 if (item && item.status == ApeConsts.CHANNEL_STATUS_OPENING&&item.fromNodeId==_nodeId) {
243 - return item.channelId; 245 + return item;
244 } 246 }
245 } 247 }
246 - return 0; 248 + return channelInfo;
247 } 249 }
248 250
249 //检查频道是否已经被占用 251 //检查频道是否已经被占用
@@ -284,15 +284,19 @@ class VideoApe extends Ape { @@ -284,15 +284,19 @@ class VideoApe extends Ape {
284 return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; 284 return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"};
285 } 285 }
286 286
287 - let openingChannel = this.mediaModule.getOpeningMediaChannel(nodeId);  
288 - if (openingChannel == 0) { 287 + let openingChannelInfo = this.mediaModule.getOpeningMediaChannelForNodeId(nodeId);
  288 + if (openingChannelInfo.channelId== 0) {
289 loger.warn(nodeId,"没有占用channel不需要处理"); 289 loger.warn(nodeId,"没有占用channel不需要处理");
290 return {"code": ApeConsts.RETURN_FAILED, "data": "没有占用channel不需要处理"}; 290 return {"code": ApeConsts.RETURN_FAILED, "data": "没有占用channel不需要处理"};
291 } 291 }
292 292
293 let channelInfo=this.mediaModule.getDefaultChannelInfo(); 293 let channelInfo=this.mediaModule.getDefaultChannelInfo();
294 channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; 294 channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED;
295 - channelInfo.channelId=openingChannel; 295 + channelInfo.channelId=openingChannelInfo.channelId;
  296 + channelInfo.nodeId=openingChannelInfo.fromNodeId;//发送消息的人员nodeId
  297 + channelInfo.userRole=openingChannelInfo.userRole;
  298 + channelInfo.userName=openingChannelInfo.userName;
  299 + channelInfo.userId=openingChannelInfo.userId;
296 300
297 this.sendTableUpdateHandler(channelInfo); 301 this.sendTableUpdateHandler(channelInfo);
298 //递归检查,800毫秒之后执行 302 //递归检查,800毫秒之后执行