李勇

修改各个模块默认服务器地址选择的逻辑,由默认使用第一个修改为随机选择

此 diff 太大无法显示。
... ... @@ -27,7 +27,7 @@ import Server from "config/Server";
import UTF8 from 'utf-8';
let loger = Loger.getLoger('McuClient');
let _sdkInfo = {"version": "v1.9.12.20170419", "author": "www.3mang.com"};
let _sdkInfo = {"version": "v1.9.14.20170420", "author": "www.3mang.com"};
//APE
let _sass;
... ... @@ -261,19 +261,6 @@ export default class MessageEntrance extends Emiter {
//有人员离开
_onClassDeleteRoster(_data) {
//在conferApe中做处理,这里不需要再处理
//{"nodeId":nodeId}
//当有人员离开的时候,如果离开的人员已经推流,那么需要停止推流,然后释放channel;
/* if(_data!=null&&_data.nodeId!=null){
loger.log("有人员离开,检查一下离开的人员是否关闭推流");
if(_video_ape){
_video_ape.stopPublishVideo(_data);
}
if(_audio_ape){
_audio_ape.stopPublishAudio(_data);
}
}*/
}
//当前课堂中视频或音频占用channel的nodeId ,在人员列表中不存在,这种情况是占用channel的人员掉线或离开的时候没有释放channel
... ... @@ -304,17 +291,17 @@ export default class MessageEntrance extends Emiter {
//{"classId":"1653304953","portal":"112.126.80.182:80","userRole":"normal","userId":0}
//判断传入的参数是否存在
if (_param == null || EngineUtils.isEmptyObject(_param)) {
loger.error('init初始化失败,参数错误');
loger.error('初始化课堂失败->参数错误',_param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_PARAM);
return;
}
//判断必要的参数字段值
if (_param.classId == null || isNaN(_param.classId) || _param.portal == null || _param.portal == "") {
loger.error('init初始化失败', _param);
loger.error('初始化课堂失败->参数错误', _param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_INIT_PARAM);
return;
}
loger.log('init', _param);
loger.log('初始化课堂->', _param);
//保存参数
GlobalConfig.isRecordPlayBack = false;//设置为非录制回放状态
... ... @@ -351,12 +338,12 @@ export default class MessageEntrance extends Emiter {
_joinClass(_param) {
if (_param == null || EngineUtils.isEmptyObject(_param)) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_PARAM);
loger.log('不能进入课堂,传递的参数不对.', _param);
loger.log('加入课堂失败->参数错误.', _param);
return;
}
//判断userName
if (_param.userName == null || _param.userName == "") {
loger.log('不能进入课堂,传递的参数不对.名字不能为空');
loger.log('加入课堂失败->参数错误->名字不能为空');
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_PARAM);
return;
}
... ... @@ -395,7 +382,7 @@ export default class MessageEntrance extends Emiter {
//host默认需要密码,Sass服务器只判断学生是否需要密码,没有判断老师的
GlobalConfig.passwordRequired = _data.passwordRequired || false;//md5验证的时候需要Sass返回的值,不能更改
loger.log('SASS平台获取入会验证信息成功.');
loger.log('初始化课堂验证完成.');
//设置当前的课堂状态
GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_1);
... ... @@ -428,7 +415,7 @@ export default class MessageEntrance extends Emiter {
//获取课堂所有参数 api/meeting/detail.do? flash中的接口文件是 getClassParam.do
_sassGetClassParamSuccessHandler(_data) {
loger.log('获取课堂课堂的完整信息完成.');
loger.log('获取课堂课堂信息完成.');
//包含整个课堂最全的信息,储存数据
if (_data) {
GlobalConfig.mcuDelay = _data.h5Delay || 0;//mcu消息延迟的时间间隔,单位(秒),结合客户端传的messageDelay的值使用
... ... @@ -459,23 +446,38 @@ export default class MessageEntrance extends Emiter {
if (_data.mcuList && _data.mcuList.length > 0) {
//MCU地址默认使用第一个
GlobalConfig.MCUServerIP = _data.mcuList[0].ip || "";
GlobalConfig.MCUServerPort = _data.mcuList[0].port || "";
/* //MCU地址默认使用第一个
GlobalConfig.MCUServerIP = _data.mcuList[0].ip || "";
GlobalConfig.MCUServerPort = _data.mcuList[0].port || "";*/
//随机选择一个
let index = parseInt(Math.random() * _data.mcuList.length);
GlobalConfig.MCUServerIP = _data.mcuList[index].ip || "";
GlobalConfig.MCUServerPort = _data.mcuList[index].port || "";
loger.log('初始->MCU->.', GlobalConfig.MCUServerIP , GlobalConfig.MCUServerPort );
}
//上课中视频推流播流地址
if (_data.msList && _data.msList.length > 0) {
//MS地址默认使用第一个
GlobalConfig.MSServerIP = _data.msList[0].ip || "";
GlobalConfig.MSServerPort = _data.msList[0].port || "";
/* GlobalConfig.MSServerIP = _data.msList[0].ip || "";
GlobalConfig.MSServerPort = _data.msList[0].port || "";*/
let index = parseInt(Math.random() * _data.msList.length);
GlobalConfig.MSServerIP = _data.msList[index].ip || "";
GlobalConfig.MSServerPort = _data.msList[index].port || "";
loger.log('初始->MS->.', GlobalConfig.MSServerIP , GlobalConfig.MSServerPort );
}
//录制回放时m3u8播流地址
if (_data.rsList && _data.rsList.length > 0) {
//RS地址默认使用第一个
GlobalConfig.RSServerIP = _data.rsList[0].ip || "";
GlobalConfig.RSServerPort = _data.rsList[0].port || "";
//GlobalConfig.RSServerIP = _data.rsList[0].ip || "";
//GlobalConfig.RSServerPort = _data.rsList[0].port || "";
let index = parseInt(Math.random() * _data.msList.length);
GlobalConfig.RSServerIP = _data.rsList[index].ip || "";
GlobalConfig.RSServerPort = _data.rsList[index].port || "";
loger.log('初始->RS->.', GlobalConfig.RSServerIP , GlobalConfig.RSServerPort );
}
//文档地址
... ... @@ -485,13 +487,19 @@ export default class MessageEntrance extends Emiter {
loger.log("docServer->", _data.docList[index]);
GlobalConfig.DOCServerIP = _data.docList[index].ip || "";
GlobalConfig.DOCServerPort = _data.docList[index].port || "";
loger.log('初始->DOC->.', GlobalConfig.DOCServerIP , GlobalConfig.DOCServerPort );
}
//record
if (_data.recordList && _data.recordList.length > 0) {
//地址默认使用第一个
GlobalConfig.RecordServerIP = _data.recordList[0].ip || "";
GlobalConfig.RecordServerPort = _data.recordList[0].port || "";
//GlobalConfig.RecordServerIP = _data.recordList[0].ip || "";
//GlobalConfig.RecordServerPort = _data.recordList[0].port || "";
let index = parseInt(Math.random() * _data.recordList.length);
GlobalConfig.RecordServerIP = _data.recordList[index].ip || "";
GlobalConfig.RecordServerPort = _data.recordList[index].port || "";
loger.log('初始->RECORD->.', GlobalConfig.RecordServerIP , GlobalConfig.RecordServerPort );
}
}
... ... @@ -517,7 +525,7 @@ export default class MessageEntrance extends Emiter {
loger.log("开启录制回放流程");
_recordPlayback.readyRecordPlay();
} else {
loger.warn("开启录制回放流程失败还未创建模块");
loger.warn("开启录制回放流程失败->还未创建模块");
}
} else {
//根据用户的userIp获取信息,选点
... ... @@ -554,18 +562,20 @@ export default class MessageEntrance extends Emiter {
this._getFastestMsServer(function (_data) {
loger.log("MS选点结束->", _data);
if (_data && _data.ip) {
GlobalConfig.MSServerIP = _data.ip;
GlobalConfig.MSServerPort = _data.port;
GlobalConfig.MSServerIP = _data.ip||"";
GlobalConfig.MSServerPort = _data.port||"";
}
loger.log("当前使用的MS->", GlobalConfig.MSServerIP, GlobalConfig.MSServerPort);
_this.isGetFastestMcuCallback = true;
_this._startConnectMCU();
});
this._getFastestMcuServer(function (_data) {
loger.log("MCU选点结束->", _data);
if (_data && _data.ip) {
GlobalConfig.MCUServerIP = _data.ip;
GlobalConfig.MCUServerPort = _data.port;
GlobalConfig.MCUServerIP = _data.ip||"";
GlobalConfig.MCUServerPort = _data.port||"";
}
loger.log("当前使用的MCU->", GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort);
_this.isGetFastestMsCallback = true;
_this._startConnectMCU();
});
... ... @@ -649,7 +659,7 @@ export default class MessageEntrance extends Emiter {
loger.error("不能保存课堂数据", GlobalConfig.getCurrentStatus());
}
} else {
loger.log("没有保存课堂状态信息的权限 isHost", GlobalConfig.isHost);
loger.log("没有保存课堂状态信息的权限->身份", GlobalConfig.userRole);
}
}
... ... @@ -666,7 +676,7 @@ export default class MessageEntrance extends Emiter {
//Sass校验流程结束之后,开始加入MCU
_joinMCU() {
loger.log('加入底层MCU课堂.');
loger.log('加入课堂->.');
if (_mcu) {
_mcu.joinMCU(GlobalConfig.getClassInfo());
}
... ... @@ -728,7 +738,7 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData.gop = GlobalConfig.gop;
joinClassSuccessCallBackData.videoQuality = GlobalConfig.videoQuality;
loger.log('加入课堂成功');
loger.log('加入课堂成功->');
loger.log(joinClassSuccessCallBackData);
//加入课堂成功,广播消息
... ... @@ -736,30 +746,56 @@ export default class MessageEntrance extends Emiter {
}
//切换MCU
_changeMcuIpHandler(){
if(GlobalConfig.isRecordPlayBack){
_changeMcuIpHandler() {
if (GlobalConfig.isRecordPlayBack) {
//录制回放不做操作
return;
}
loger.log('MCU->动态选点');
let _this=this;
let _this = this;
this._getFastestMcuServer(function (_data) {
loger.log("MCU选点结束->", _data);
if (_data && _data.ip) {
GlobalConfig.MCUServerIP = _data.ip;
GlobalConfig.MCUServerPort = _data.port;
}else {
GlobalConfig.MCUServerIP = _data.ip||"";
GlobalConfig.MCUServerPort = _data.port||"";
} else {
//随机选择一个
if (GlobalConfig.mcuList &&GlobalConfig.mcuList.length > 0) {
if (GlobalConfig.mcuList && GlobalConfig.mcuList.length > 0) {
let index = parseInt(Math.random() * GlobalConfig.mcuList.length);
GlobalConfig.DOCServerIP = GlobalConfig.mcuList[index].ip || "";
GlobalConfig.DOCServerPort = GlobalConfig.mcuList[index].port || "";
GlobalConfig.MCUServerIP = GlobalConfig.mcuList[index].ip || "";
GlobalConfig.MCUServerPort = GlobalConfig.mcuList[index].port || "";
}
}
loger.log('MCU->切换->', GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort);
});
}
//切换MS
_changeMsIpHandler() {
if (GlobalConfig.isRecordPlayBack) {
//录制回放不做操作
return;
}
loger.log('MS->动态选点');
let _this = this;
this._getFastestMsServer(function (_data) {
loger.log("MS选点结束->", _data);
if (_data && _data.ip) {
GlobalConfig.MSServerIP = _data.ip||"";
GlobalConfig.MSServerPort = _data.port||"";
} else {
//随机选择一个
if (GlobalConfig.msList && GlobalConfig.msList.length > 0) {
let index = parseInt(Math.random() * GlobalConfig.msList.length);
GlobalConfig.MSServerIP = GlobalConfig.msList[index].ip || "";
GlobalConfig.MSServerPort = GlobalConfig.msList[index].port || "";
}
}
loger.log('MCU->切换->', GlobalConfig.DOCServerIP, GlobalConfig.DOCServerPort );
loger.log('MS->切换->', GlobalConfig.MSServerIP, GlobalConfig.MSServerPort);
});
}
//Sass删除文档数据
_sassDeleteDocument(_param) {
if (!_mcu.connected) {
... ... @@ -769,17 +805,17 @@ export default class MessageEntrance extends Emiter {
//判断传入的参数是否存在
if (_param == null || EngineUtils.isEmptyObject(_param)) {
loger.error('sassDeleteDocument失败,参数错误', _param);
loger.error('删除文档失败->参数错误', _param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_DOC_DELETE_FAILED_PARAM);
return;
}
//判断必要的参数字段值
if (_param.itemIdx == null || isNaN(_param.itemIdx) || _param.docId == null || _param.docId == "") {
loger.error('sassDeleteDocument失败', _param);
loger.error('删除文档失败->', _param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_DOC_DELETE_FAILED_PARAM);
return;
}
loger.log('_sassDeleteDocument', _param);
loger.log('删除文档->', _param);
if (_sass) {
_sass.sassDeleteDocument(_param);
... ... @@ -798,7 +834,7 @@ export default class MessageEntrance extends Emiter {
//Sass删除文档成功之后,同步删除MCU数据
_sassDeleteDocumentSuccess(_param) {
loger.log('sassDeleteDocumentSuccess', _param);
loger.log('删除文档成功->', _param);
this._sendDocumentDelete(_param);
}
... ... @@ -872,7 +908,7 @@ export default class MessageEntrance extends Emiter {
return;
}
if (_messageInfo === null || EngineUtils.isEmptyObject(_messageInfo)) {
loger.log('sendChatMsg 传递的参数不对', _messageInfo);
loger.log('发送聊天消息失败->参数错误', _messageInfo);
return;
}
if (_chat_ape) {
... ... @@ -1137,7 +1173,7 @@ export default class MessageEntrance extends Emiter {
loger.warn(GlobalConfig.getCurrentStatus());
return;
}
loger.log('Doc UpdateId ->');
//loger.log('Doc UpdateId ->');
//loger.log(_data);
if (_whiteboard_ape) {
_whiteboard_ape.docUpdateHandler(_data);
... ... @@ -1183,13 +1219,13 @@ export default class MessageEntrance extends Emiter {
_initRecordPlayback(_param) {
//{"classId":"1653304953","portal":"112.126.80.182:80","userRole":"normal","userId":0}
if (_param == null) {
loger.error('录制回放初始化失败,参数错误');
loger.error('录制回放初始化失败->参数错误');
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_INIT_RECORD_PLAY_BACK_FAILED);
return;
}
//判断必要的参数字段值
if (_param.classId == null || isNaN(_param.classId) || _param.portal == null || _param.portal == "") {
loger.error('录制回放初始化失败', _param);
loger.error('录制回放初始化失败->', _param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_INIT_RECORD_PLAY_BACK_FAILED);
return;
}
... ... @@ -1239,7 +1275,7 @@ export default class MessageEntrance extends Emiter {
//录制回放状态更新
_recordPlaybackClearDataHandler(_param) {
loger.log("_recordPlaybackClearDataHandler->")
loger.log("录制回放状态更新->")
if (_doc_ape) {
_doc_ape.clearData();
}
... ...
... ... @@ -15,7 +15,7 @@
import Emiter from 'Emiter';
import Loger from 'Loger';
let loger = Loger.getLoger('EverSocket');
const MCU_MAX_RECONNECTION = 5;//最多重连次数
const MCU_MAX_RECONNECTION = 4;//最多重连次数
class EverSocket extends Emiter {
constructor() {
super();
... ... @@ -84,7 +84,7 @@ class EverSocket extends Emiter {
}
this.reConnectionTimeout = window.setTimeout(() => {
loger.log('WebSocket重新建立.');
loger.log('WebSocket重新建立->', this.reConnectionCounter);
window.clearTimeout(this.reConnectionTimeout);
this._newConnection();
}, EverSocket.RECONN_INTERVAL);
... ...
... ... @@ -159,8 +159,8 @@ MessageTypes.ErrorReson[MessageTypes.ERR_CLASS_JOIN_CONFILICT]="已经在其它
MessageTypes.ErrorReson[MessageTypes.ERR_CLASS_KICK_OUT]="有相同身份的人员加入课堂,自己被踢出课堂";
MessageTypes.ErrorReson[MessageTypes.ERR_GET_CLASS_DETAIL]="获取classDetail失败";
MessageTypes.ErrorReson[MessageTypes.ERR_GET_CLASS_PARAML]="获取ClassParam失败";
MessageTypes.ErrorReson[MessageTypes.ERR_GET_CLASS_DETAIL]="获取课堂基本信息失败";
MessageTypes.ErrorReson[MessageTypes.ERR_GET_CLASS_PARAML]="获取课堂详细信息失败";
//APE
MessageTypes.ErrorReson[MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN]="APE在sdk为初始化或未加入课堂之前调用发送数据接口";
... ...