李勇
41b6c7e0 1 parent 408cfb56 master ... 20170922-1 20171019-1 20171120-1w dev ly20170622 ly20170622-2 ly20170622-3 ly20170627-2 ly20170706-1 ly20170708-2 ly20170708-3 ly20170710-1 ly20170717-1 ly20170719-1 ly20170723-1 ly20170724-2 ly20170726-1 ly20170731-1 ly20170731-2 ly20170801-2 ly20170802-1 ly20170818-1 ly20170818-2 ly20170820-1 ly20170821-1 ly20170824-1 ly20170829-1 ly20170925-1 ly20170926-1 ly20170927-1 ly20170929-1 ly20171011-1 ly20171013-1 ly20171013-2 ly20171016-1 ly20171021-1 ly20171023-1 ly20171024-1w ly20171025-1w ly20171026-1w ly20171027-1w ly20171030-1 ly20171030-2w ly20171107-1 ly20171110-1w ly20171113-1w ly20171204-1w ly20171208-1w ly20171211-1w ly20171211-2w ly20171214-1w webRtc-dev v2.38.13.20171216 v2.38.11.20171214 v2.38.3.201712011 v2.38.1.201712011 v2.36.11.20171204 v2.36.8.20171206 v2.36.4.20171201 v2.35.11.20171130 v2.34.16.20171128 v2.34.5.20171127 v2.33.6.20171123 v2.32.1.20171123 v2.31.12.20171122 v2.31.10.20171122 v2.30.5.20171117 v2.30.2.20171117 v2.29.5.20171114 v2.28.1.20171110 v2.27.11.20171109 v2.26.9.20171107 v2.26.6.20171103 v2.26.2.20171102 v2.25.7.20171031 v2.25.6.20171031 v2.25.0.20171030 v2.24.2.20171030 v2.23.0.20171030 v2.22.7.20171026 v2.20.5.20171023 v2.20.0.20171021 v2.19.8.20171020 v2.18.14.20171020 v2.18.10.20171019 v2.17.11.20171014 v2.16.8.20171012 v2.16.5.20171012 v2.15.5.20171001 v2.15.3.20170929 v2.14.5.20170927 v2.13.5.20170927 v2.12.14.20170927 v2.12.8.20170926 v2.12.6.20170925 v2.11.13.20170925 v2.10.7.20170921 v2.10.6.20170921 v2.10.5.20170920 v2.10.4.20170920 v2.9.3.20170919 v2.8.17.20170918 v2.8.8.20170917 v2.8.2.20170916 v2.6.2.20170915 v2.5.12.20170915 v2.5.6.20170914 v2.5.5.20170914 v2.4.4.20170908 v2.4.2.20170908 v2.4.0.20170907 v2.3.6.20170907 v2.2.16.20170905 v2.1.22.20170904 v1.84.0.20170912 v1.83.2.20170831 v1.82.11.20170829 v1.81.19.20170828 v1.80.2.20170824 v1.79.6.20170822 v1.79.5.20170821 v1.79.4.20170821 v1.79.3.20170821 v1.78.4.20170820 v1.77.4.20170819 v1.76.2.20170818 v1.75.0.20170815 v1.74.0.20170814 v1.73.2.20170814 v1.73.1.20170814 v1.71.0.20170813 v1.70.5.20170812 v1.68.2.20170812 v1.66.1.20170809 v1.65.25.20170808 v1.65.24.20170806 v1.63.1.20170731 v1.62.3.20170731 v1.61.0.20170729 v1.60.0.20170729 v1.59.0.20170729 v1.58.0.20170729 v1.57.0.20170727 v1.56.1.20170727 v1.56.0.20170727 v1.52.1.20170726 v1.51.0.20170724 v1.50.7.20170724 v1.49.1.20170724 v1.48.2.20170723 v1.46.1.20170722 v1.45.1.20170717 v1.43.1.20170711 v1.42.1.20170708 v1.41.0.20170708 v1.40.0.20170706 v1.39.2.20170706 v1.39.1.20170705 v1.38.4.20170629 v1.37.5.20170627 v1.37.2.20170622 v1.36.7.20170620 v1.36.4.20170620 v1.36.1.20170619 v1.35.4.20170619 v1.34.2.20170615 v1.33.2.20170615

1.增加获取本地server.json文件,获取mcu 和ms列表;

2.开启mcu ms列表选择功能,优先从server.JSON文件中获取,没有获取到的时候再使用Sass中的
import Emiter from 'src/Emiter';
import Loger from 'src/Loger';
import MessageTypes from 'src/MessageTypes';
import GlobalConfig from 'src/GlobalConfig';
import MD5 from "md5";
import ApeConsts from 'src/apes/ApeConsts';
import iphunter from 'iphunter';
import Server from "src/config/Server";
import fetchJsonp from 'fetch-jsonp';
// 日志对象
const loger = Loger.getLoger('ServerCheck');
//ip选点流程的状态
let isRequestMcuCallback = false;//是否获取最佳mcu返回
let isRequestMsCallback = false;//是否获取ms最佳返回
let isTestFromSass = false;
let isTestFromServer = false;
let tempMcuIp = "";
let tempMcuPort = "";
let tempMsIp = "";
let tempMsPort = "";
let msDefaultPort = "1935";
let mcuDefaultPort = "7777";
let speedTestPort = ':5555';//测速端口统一
let checkMcuIpGroup = [];//储存MCU需要查询的ip数组
let checkMsIpGroup = [];//储存MCU需要查询的ip数组
const timeOutDelay = 1000;//选点超时
class ServerCheck extends Emiter {
constructor() {
super();
}
//根据userIp获取ip相关的信息,参数是userIp
getUserIpInfo(token, userIp) {
//重置ip选点流程状态
isRequestMcuCallback = false;
isRequestMsCallback = false;
isTestFromSass = false;
isTestFromServer = false;
checkMcuIpGroup = [];
checkMsIpGroup = [];
let userIpInfo = new Object;
userIpInfo.ret = -1;
let ip = userIp;
let md5Str = MD5("addr=" + ip + "&token=b657c3507b324353e09c1958ee956a98efceb3e3");
// /("addr=" + ip + "&token=b657c3507b324353e09c1958ee956a98efceb3e3"),转成MD5
let timestamp = new Date().getTime();
let location = `http://ipapi.ipip.net/find?addr=${ip}&sid=14&uid=5237&sig=${md5Str}&_=${timestamp}`;
fetchJsonp(location, {
timeout: timeOutDelay,
}).then(function (response) {
return response.json()
}).then(function (json) {
// loger.log('获取IP信息返回', json)
if (json) {
userIpInfo.ret = json.ret;
userIpInfo.country = json.data[0];//国家
userIpInfo.province = json.data[1];//省份
userIpInfo.city = json.data[2];//城市
userIpInfo.isp = json.data[4];//运营商
}
this.serverGetUserIpInfoCallback(userIpInfo);
}.bind(this)).catch(function (ex) {
// loger.log('获取IP信息失败', ex.message)
this.serverGetUserIpInfoCallback(userIpInfo);
}.bind(this));
}
//获取ip信息返回
serverGetUserIpInfoCallback(userIpInfo) {
// loger.log("获取IP详情,开始处理", userIpInfo);
if (userIpInfo.ret == "ok") {
GlobalConfig.country = userIpInfo.country;//国家
GlobalConfig.city = userIpInfo.city;//城市
GlobalConfig.province = userIpInfo.province;//服务商
GlobalConfig.isp = userIpInfo.isp;//服务商
// loger.log("获取ip详情成功,country:" + GlobalConfig.country + ",city:" + GlobalConfig.city + ",isp:" + GlobalConfig.isp);
this._chooseBestIpFromServer();
}
else {
// loger.log("获取ip详情失败");
this._chooseBestIpFromSassParam();
}
}
//从IPIP服务列表中选择最快的IP
_chooseBestIpFromServer() {
// loger.log("从Server服务列表中选择最快的IP");
isRequestMcuCallback = false;
isRequestMsCallback = false;
isTestFromServer = true;
isTestFromSass = false;
//country, province, ctiy, isp, jsona
checkMcuIpGroup = this._returnServerMCU(
GlobalConfig.country,
GlobalConfig.province,
GlobalConfig.city,
GlobalConfig.isp,
Server.serverList);
checkMsIpGroup = this._returnServerMS(
GlobalConfig.country,
GlobalConfig.province,
GlobalConfig.city,
GlobalConfig.isp,
Server.serverList);
let mcuArr = [];
let msArr = [];
for (let i in checkMcuIpGroup) {
if (checkMcuIpGroup[i]) {
mcuArr.push(checkMcuIpGroup[i].ip + speedTestPort);
}
}
for (let k in checkMsIpGroup) {
if (checkMsIpGroup[k]) {
msArr.push(checkMsIpGroup[k].ip + speedTestPort);
}
}
this.getBestMcuServer(mcuArr);
this.getBestMsServer(msArr);
}
//从Sass返回的msList mcuList中选点
_chooseBestIpFromSassParam() {
// loger.log("从Sass服务列表中选择最快的IP");
isRequestMcuCallback = false;
isRequestMsCallback = false;
isTestFromSass = false;
isTestFromServer = false;
checkMcuIpGroup = GlobalConfig.mcuList;
checkMsIpGroup = GlobalConfig.msList;
//MCU
let mcuIpGroup = [];
for (let i = 0; i < checkMcuIpGroup.length; i++) {
let ipPort = checkMcuIpGroup[i].ip + speedTestPort;
mcuIpGroup.push(ipPort)
}
this.getBestMcuServer(mcuIpGroup);
//MS
let msIpGroup = [];
for (let k = 0; k < checkMsIpGroup.length; k++) {
let ipPort = checkMsIpGroup[k].ip + speedTestPort;
msIpGroup.push(ipPort)
}
this.getBestMsServer(msIpGroup);
}
//获取最快的MCU服务器地址,参数是一个ip数组
getBestMcuServer(_param) {
// loger.log('开始MCU选点 ', _param);
if (_param == null || _param.length < 1) {
this._getBestMcuServerCallbackHandler("");
return;
}
iphunter(_param, function (fatest_ip_response) {
if (!fatest_ip_response) {
loger.warn('getBestMcuServer -> nothing!');
this._getBestMcuServerCallbackHandler("");
} else {
loger.log('getBestMcuServer done -> ', fatest_ip_response);
this._getBestMcuServerCallbackHandler(fatest_ip_response);
}
}.bind(this), timeOutDelay);
}
//获取最快的MS服务器地址,参数是一个ip数组
getBestMsServer(_param) {
// loger.log('开始MS选点 ', _param);
if (_param == null || _param.length < 1) {
this._getBestMsServerCallbackHandler("")
return;
}
iphunter(_param, function (fatest_ip_response) {
if (!fatest_ip_response) {
loger.warn('getBestMsServer -> nothing!');
this._getBestMsServerCallbackHandler("");
} else {
loger.log('getBestMsServer done -> ', fatest_ip_response);
this._getBestMsServerCallbackHandler(fatest_ip_response);
}
}.bind(this), timeOutDelay);
}
_getBestMcuServerCallbackHandler(_data) {
// loger.log("MCU选点返回1", _data);
if (isRequestMcuCallback) {
// loger.log("MCU选点,已经有返回");
return;
}
isRequestMcuCallback = true;
if (_data) {
let server = _data.split(":");
if (server[0]) {
tempMcuIp = server[0];
}
tempMcuPort = mcuDefaultPort;
for (let i = 0; i < checkMcuIpGroup.length; i++) {
if (tempMcuIp == checkMcuIpGroup[i].ip) {
tempMcuPort = checkMcuIpGroup[i].port || mcuDefaultPort;
break;
}
}
}
// loger.log("MCU选点返回2",tempMcuIp,tempMcuPort);
this._startConnectMcu();
}
_getBestMsServerCallbackHandler(_data) {
// loger.log("MS选点返回1", _data);
if (isRequestMsCallback) {
// loger.log("_getBestMsServerCallbackHandler,已经有返回");
return;
}
isRequestMsCallback = true;
if (_data) {
let server = _data.split(":");
if (server[0]) {
tempMsIp = server[0];
}
tempMsPort = msDefaultPort;
for (let i = 0; i < checkMsIpGroup.length; i++) {
if (tempMsIp == checkMsIpGroup[i].ip) {
tempMsPort = checkMsIpGroup[i].port || msDefaultPort;
break;
}
}
}
// loger.log("MS选点返回2", tempMsIp,tempMsPort);
this._startConnectMcu();
}
//ip选点结束,开始连接MCU
_startConnectMcu() {
if (isRequestMcuCallback && isRequestMsCallback) {
if (isTestFromServer && !isTestFromSass) {
//从Server服务列表中选点结束,如果没有选到合适的,从Sass的列表中获取
if (!tempMcuIp || !tempMsIp) {
this._chooseBestIpFromSassParam();
} else {
GlobalConfig.MCUServerIP = tempMcuIp;
GlobalConfig.MCUServerPort = tempMcuPort;
GlobalConfig.MS_PUBLISH_IP = tempMsIp;
GlobalConfig.MS_PUBLISH_PORT = tempMsPort;
// loger.log("Server选点完成", "mcu-->",GlobalConfig.MCUServerIP,GlobalConfig.MCUServerPort,"ms---->",GlobalConfig.MSServerIP,GlobalConfig.MSServerPort);
this._emit(ServerCheck.SEVER_CHECK_BEST_IP_SUCCESS);
}
} else {
//从Sass返回的服务列表中选点结束
if (tempMcuIp) {
GlobalConfig.MCUServerIP = tempMcuIp;
GlobalConfig.MCUServerPort = tempMcuPort;
}
if (tempMsIp) {
GlobalConfig.MS_PUBLISH_IP = tempMsIp;
GlobalConfig.MS_PUBLISH_PORT = tempMsPort;
}
loger.log("Sass选点完成", "mcu-->", GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort, "ms---->", GlobalConfig.MS_PUBLISH_IP, GlobalConfig.MS_PUBLISH_PORT);
this._emit(ServerCheck.SEVER_CHECK_BEST_IP_SUCCESS);
}
} else {
loger.warn("_startConnectMcu->正在选点", isRequestMcuCallback, isRequestMsCallback);
}
}
//检测MCU连接地址
_returnServerMCU(country, province, ctiy, isp, jsona) {
let countryData = jsona.MCU[country];
//按country没有查找到就返回default
if (!countryData) {
countryData = jsona.MCU.default;
// loger.log("_returnServerMCU->countryData->default",countryData);
return countryData;
}
if (country != "中国") {
// loger.log("_returnServerMCU->countryData",countryData);
return countryData;
}
//中国的需要细分
//按isp查找
let ispData = countryData.isp[isp];
//isp查找到就返回
if (ispData) {
// loger.log("_returnServerMCU->ispData",ispData);
return ispData;
}
//isp没查找到,用province
let provinceData = countryData.province[province];
//用province查找到就返回
if (provinceData) {
// loger.log("_returnServerMCU->provinceData",provinceData);
return provinceData;
}
//isp province都没有,使用default
let defaultData = countryData.default
if (defaultData) {
// loger.log("_returnServerMCU->defaultData",defaultData);
return defaultData;
} else {
// loger.log("_returnServerMCU->defaultData","");
return [];
}
return [];
}
//检测MS连接地址
//Config.ipInfo
_returnServerMS(country, province, ctiy, isp, jsona) {
let countryData = jsona.MS[country];
//按country没有查找到就返回default
if (!countryData) {
countryData = jsona.MS.default;
// loger.log("_returnServerMS->countryData->default",countryData);
return countryData;
}
if (country != "中国") {
// loger.log("_returnServerMS->countryData",countryData);
return countryData;
}
//中国的需要细分
//按isp查找
let ispData = countryData.isp[isp];
//isp查找到就返回
if (ispData) {
// loger.log("_returnServerMS->ispData",ispData);
return ispData;
}
//isp没查找到,用province
let provinceData = countryData.province[province];
//用province查找到就返回
if (provinceData) {
// loger.log("_returnServerMS->provinceData",provinceData);
return provinceData;
}
//isp province都没有,使用default
let defaultData = countryData.default
if (defaultData) {
// loger.log("_returnServerMS->defaultData",defaultData);
return defaultData;
} else {
// loger.log("_returnServerMS->defaultData","");
return [];
}
return [];
}
}
ServerCheck.prototype.SEVER_CHECK_BEST_IP_SUCCESS = ServerCheck.SEVER_CHECK_BEST_IP_SUCCESS = 'severCheck_checkBestIpSuccess_message';//获取最快的MS地址
export default new ServerCheck;
此 diff 太大无法显示。
... ... @@ -32,7 +32,7 @@ import QuestionApe from 'apes/QuestionApe';
import UTF8 from 'utf-8';
let loger = Loger.getLoger('McuClient');
let _sdkInfo = {"version": "v1.33.1.20170614", "author": "www.3mang.com"};
let _sdkInfo = {"version": "v1.33.2.20170615", "author": "www.3mang.com"};
//APE
let _sass;
... ... @@ -689,8 +689,11 @@ export default class MessageEntrance extends Emiter {
//根据UserIp获取ip信息,选点
getUserIpInfo() {
let _this=this;
if (_ipManager) {
_ipManager.getUserIpInfo("", GlobalConfig.userIp, this._getUserIpCallbackHandler.bind(this), 1000);
_ipManager.loadServerJosn(function(_data){
_ipManager.getUserIpInfo("", GlobalConfig.userIp, _this._getUserIpCallbackHandler.bind(_this), 2000);
})
}
}
... ... @@ -770,16 +773,41 @@ export default class MessageEntrance extends Emiter {
Server.serverList);
}
//console.log(" GlobalConfig.mcuListFromServer", GlobalConfig.mcuListFromServer)
//console.log(" GlobalConfig.msListFromServer", GlobalConfig.msListFromServer)
//合并所有MCU、MS 列表
GlobalConfig.mcuListAll.length = 0;
console.log(" GlobalConfig.mcuListFromServer", GlobalConfig.mcuListFromServer);
console.log(" GlobalConfig.msListFromServer", GlobalConfig.msListFromServer);
console.log(" GlobalConfig.mcuList", GlobalConfig.mcuList);
console.log(" GlobalConfig.msList", GlobalConfig.msList);
//********合并所有MCU、MS 列表********
//****server.json中的数据和从Sass获取的msList mcuList 数据需要分开,不能同时共存****
/*GlobalConfig.mcuListAll.length = 0;
GlobalConfig.mcuListAll = GlobalConfig.mcuListAll.concat(GlobalConfig.mcuList, GlobalConfig.mcuListFromServer);
GlobalConfig.msListAll.length = 0;
GlobalConfig.msListAll = GlobalConfig.msListAll.concat(GlobalConfig.msList, GlobalConfig.msListFromServer);
GlobalConfig.msListAll = GlobalConfig.msListAll.concat(GlobalConfig.msList, GlobalConfig.msListFromServer);*/
GlobalConfig.mcuListAll.length = 0;
if(GlobalConfig.mcuListFromServer.length>0){
//使用server中的MCU数据
loger.warn("使用server中的MCU数据")
GlobalConfig.mcuListAll = GlobalConfig.mcuListFromServer;
}else {
//使用Sass中的数据
loger.warn("使用Sass中的MCU数据")
GlobalConfig.mcuListAll = GlobalConfig.mcuList;
}
GlobalConfig.msListAll.length = 0;
if(GlobalConfig.msListFromServer.length>0){
loger.warn("使用server中的MS数据")
GlobalConfig.msListAll = GlobalConfig.msListFromServer;
}else {
loger.warn("使用Sass中的MS数据")
GlobalConfig.msListAll = GlobalConfig.msList;
}
//console.log(" GlobalConfig.mcuListAll", GlobalConfig.mcuListAll)
//console.log(" GlobalConfig.msListAll", GlobalConfig.msListAll)
console.warn("mcuListAll", GlobalConfig.mcuListAll);
console.warn("msListAll", GlobalConfig.msListAll);
}
//开始MCU选点操作
... ...
... ... @@ -8,6 +8,7 @@ import Loger from 'Loger';
import MD5 from "md5";
import iphunter from 'iphunter';
import fetchJsonp from 'fetch-jsonp';
import Server from "config/Server";
// 日志对象
const loger = Loger.getLoger('IpManager');
... ... @@ -21,7 +22,46 @@ class IpManager extends Emiter {
constructor() {
super();
}
//获取本地Server JSON
loadServerJosn(_callback){
let serverInfo = {
ret: -1
};
let timestamp=new Date().getTime();
let url = `server.json?v=${timestamp}`;
loger.log("获取Server信息->", url);
let _this = this;
fetch(url, {
timeout: 3000
})
.then(ret => {
if (ret.ok) {
return ret.json();
} else {
loger.error(`获取Server信息-网络异常.状态码:${ret.status}`);
if (_callback) {
_callback(serverInfo);
}
return;
}
})
.then(ret => {
if (ret) {
Server.serverListData=ret||{};
serverInfo.data=ret;
}
loger.log('获取Server信息->完成->', ret);
if (_callback) {
_callback(serverInfo);
}
})
.catch(err => {
loger.error(`获取Server信息-异常.状态码:${err}`);
if (_callback) {
_callback(serverInfo);
}
});
}
//根据userIp获取ip相关的信息,参数是userIp
getUserIpInfo(token, userIp, _callback, _timeOutDelay) {
let userIpInfo = {
... ...
... ... @@ -12,10 +12,8 @@ class Server {
}
static get serverList(){
return {
"MS":{},
"MCU":{}
}
return this.serverListData;
/* return {
"MS":{
"共享地址": [
... ... @@ -637,5 +635,8 @@ class Server {
}*/
}
}
Server.serverListData={
"MS":{},
"MCU":{}
};
export default Server;
\ No newline at end of file
... ...