Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
李勇
/
McuClient
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
李勇
2017-04-19 17:55:48 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
47066cbbaf0806dfcfb7f721e74044d646ca6cd4
47066cbb
1 parent
1eaaa346
1.调整MCU MS选点模块,新增IpManager.js (ServerCheck.js暂停使用),调整选点流程
隐藏空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
418 行增加
和
26 行删除
src/ServerCheck.js → ServerCheck.js
dist/McuClient.js
src/EngineEntrance.js
src/GlobalConfig.js
src/IpManager.js
src/
ServerCheck.js → ServerCheck.js
查看文件 @
47066cb
import
Emiter
from
'Emiter'
;
import
Loger
from
'Loger'
;
import
MessageTypes
from
'MessageTypes'
;
import
GlobalConfig
from
'GlobalConfig'
;
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
'apes/ApeConsts'
;
import
ApeConsts
from
'
src/
apes/ApeConsts'
;
import
iphunter
from
'iphunter'
;
import
Server
from
"config/Server"
;
import
Server
from
"
src/
config/Server"
;
import
fetchJsonp
from
'fetch-jsonp'
;
// 日志对象
...
...
dist/McuClient.js
查看文件 @
47066cb
此 diff 太大无法显示。
src/EngineEntrance.js
查看文件 @
47066cb
...
...
@@ -5,7 +5,7 @@ require('string.fromcodepoint');
import
Emiter
from
'./Emiter'
;
import
Sass
from
'Sass'
;
import
ServerCheck
from
'ServerCheck
'
;
import
IpManager
from
'IpManager
'
;
import
RecordPlayBackParse
from
'RecordPlayBackParse'
;
import
MD5
from
"md5"
;
import
Mcu
from
'mcu'
;
...
...
@@ -22,15 +22,16 @@ import GlobalConfig from 'GlobalConfig';
import
ApeConsts
from
'apes/ApeConsts'
;
import
Base64
from
'base64-js'
;
import
ArrayBufferUtil
from
'libs/ArrayBufferUtil'
;
import
Server
from
"config/Server"
;
import
UTF8
from
'utf-8'
;
let
loger
=
Loger
.
getLoger
(
'McuClient'
);
let
_sdkInfo
=
{
"version"
:
"v1.9.
6.20170418
"
,
"author"
:
"www.3mang.com"
};
let
_sdkInfo
=
{
"version"
:
"v1.9.
11.20170419
"
,
"author"
:
"www.3mang.com"
};
//APE
let
_sass
;
let
_
serverCheck
;
let
_
ipManager
;
let
_mcu
;
let
_confer_ape
;
let
_chat_ape
;
...
...
@@ -49,6 +50,10 @@ export default class MessageEntrance extends Emiter {
loger
.
log
(
this
.
sdkInfo
);
//初始化状态
this
.
isGetUserIpCallback
=
false
;
//是否获取IP信息返回
this
.
isGetFastestMcuCallback
=
false
;
//是否MCU选点结束
this
.
isGetFastestMsCallback
=
false
;
//是否MS选点结束
GlobalConfig
.
setCurrentStatus
(
GlobalConfig
.
statusCode_0
);
//全局的Error处理
...
...
@@ -66,9 +71,8 @@ export default class MessageEntrance extends Emiter {
_sass
.
on
(
_sass
.
CLASS_SAVE_RECORD_INFO_SUCCESS
,
this
.
_sassSaveClassRecordInfoSuccessHandler
.
bind
(
this
));
//保存课堂录制信息
_sass
.
on
(
_sass
.
DELETE_DOCUMENT_SUCCESS
,
this
.
_sassDeleteDocumentSuccess
.
bind
(
this
));
//sass删除文档成功
//ServerCheck ip
_serverCheck
=
ServerCheck
;
_serverCheck
.
on
(
_serverCheck
.
SEVER_CHECK_BEST_IP_SUCCESS
,
this
.
_serverCheckBestIpSuccessHandler
.
bind
(
this
));
//ip选点,获取最佳ip完成
//选点模块
_ipManager
=
new
IpManager
();
// 底层MCU消息层
_mcu
=
Mcu
;
...
...
@@ -362,9 +366,9 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
hasCamera
=
(
typeof
_param
.
hasCamera
==
"boolean"
)
?
_param
.
hasCamera
:
false
;
GlobalConfig
.
hasMicrophone
=
(
typeof
_param
.
hasMicrophone
==
"boolean"
)
?
_param
.
hasMicrophone
:
false
;
loger
.
log
(
"autoLoginMd5"
,
GlobalConfig
.
classId
,
GlobalConfig
.
userId
,
GlobalConfig
.
userRole
);
//
loger.log("autoLoginMd5", GlobalConfig.classId, GlobalConfig.userId, GlobalConfig.userRole);
let
autoLoginMd5
=
MD5
(
""
+
GlobalConfig
.
classId
+
GlobalConfig
.
userId
+
GlobalConfig
.
userRole
);
loger
.
log
(
"joinClass-GlobalConfig.autoLogin"
,
GlobalConfig
.
autoLogin
,
"autoLoginMd5-"
,
autoLoginMd5
);
//
loger.log("joinClass-GlobalConfig.autoLogin", GlobalConfig.autoLogin, "autoLoginMd5-", autoLoginMd5);
if
(
GlobalConfig
.
autoLogin
&&
autoLoginMd5
==
GlobalConfig
.
autoLogin
)
{
// MD5(classId+userId+userRole)==m
//自动登录,跳过验证流程
...
...
@@ -438,7 +442,6 @@ export default class MessageEntrance extends Emiter {
//视频质量相关设置
GlobalConfig
.
fps
=
_data
.
fps
||
15
;
GlobalConfig
.
gop
=
_data
.
gop
||
3
;
;
GlobalConfig
.
videoQuality
=
_data
.
videoQuality
||
2
;
//是否自动开始(身份是host的时候才用到的)
...
...
@@ -506,7 +509,7 @@ export default class MessageEntrance extends Emiter {
}
//录制回放不需要选点
//录制回放不需要
获取ip信息和
选点
if
(
GlobalConfig
.
isRecordPlayBack
)
{
if
(
_recordPlayback
)
{
//开启录制回放流程
...
...
@@ -516,22 +519,115 @@ export default class MessageEntrance extends Emiter {
loger
.
warn
(
"开启录制回放流程失败,还未创建模块"
);
}
}
else
{
//根据用户的userIp获取信息
//根据用户的userIp获取信息
,选点
this
.
getUserIpInfo
();
}
}
//根据UserIp获取ip信息,选点
getUserIpInfo
()
{
if
(
_serverCheck
)
{
_serverCheck
.
getUserIpInfo
(
""
,
GlobalConfig
.
userIp
);
if
(
_ipManager
)
{
_ipManager
.
getUserIpInfo
(
""
,
GlobalConfig
.
userIp
,
this
.
_getUserIpCallbackHandler
.
bind
(
this
),
1000
);
}
}
//获取IP信息完成
_getUserIpCallbackHandler
(
_data
)
{
//获取IP信息,返回一次就不再处理
if
(
this
.
isGetUserIpCallback
)
{
return
;
}
this
.
isGetUserIpCallback
=
true
;
if
(
_data
&&
_data
.
ret
==
"ok"
)
{
GlobalConfig
.
country
=
_data
.
country
;
//国家
GlobalConfig
.
city
=
_data
.
city
;
//城市
GlobalConfig
.
province
=
_data
.
province
;
//服务商
GlobalConfig
.
isp
=
_data
.
isp
;
//服务商
}
//合并MCU 、MS的列表
this
.
_mergeMcuAndMsList
();
//开始选点
let
_this
=
this
;
this
.
_getFastestMsServer
(
function
(
_data
)
{
loger
.
log
(
"MS选点结束->"
,
_data
);
if
(
_data
&&
_data
.
ip
)
{
GlobalConfig
.
MSServerIP
=
_data
.
ip
;
GlobalConfig
.
MSServerPort
=
_data
.
port
;
}
_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
;
}
_this
.
isGetFastestMsCallback
=
true
;
_this
.
_startConnectMCU
();
});
}
//开始连接MCU(MCU和MS都选点结束之后才开始连接)
_startConnectMCU
()
{
if
(
this
.
isGetFastestMcuCallback
&&
this
.
isGetFastestMsCallback
)
{
this
.
_joinMCU
();
}
}
//合并Sever和Sass的mcu、ms列表
_mergeMcuAndMsList
()
{
if
(
_ipManager
)
{
GlobalConfig
.
mcuListFromServer
=
_ipManager
.
getServerMcuList
(
GlobalConfig
.
country
,
GlobalConfig
.
province
,
GlobalConfig
.
city
,
GlobalConfig
.
isp
,
Server
.
serverList
);
GlobalConfig
.
msListFromServer
=
_ipManager
.
getServerMsList
(
GlobalConfig
.
country
,
GlobalConfig
.
province
,
GlobalConfig
.
city
,
GlobalConfig
.
isp
,
Server
.
serverList
);
}
//console.log(" GlobalConfig.mcuListFromServer", GlobalConfig.mcuListFromServer)
//console.log(" GlobalConfig.msListFromServer", GlobalConfig.msListFromServer)
//合并所有MCU、MS 列表
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
);
//console.log(" GlobalConfig.mcuListAll", GlobalConfig.mcuListAll)
//console.log(" GlobalConfig.msListAll", GlobalConfig.msListAll)
}
//开始MCU选点操作
_getFastestMcuServer
(
_callback
)
{
if
(
_ipManager
)
{
_ipManager
.
getFastestMcuServer
(
GlobalConfig
.
mcuListAll
,
_callback
);
}
else
{
if
(
_callback
)
{
_callback
({
'ip'
:
""
});
}
}
}
//MCU MS ip选点完成,开加入MCU
_serverCheckBestIpSuccessHandler
(
_data
)
{
loger
.
log
(
"_serverCheckBestIpSuccessHandler,IP选点结束"
);
this
.
_joinMCU
();
// //开始MS选点操作
_getFastestMsServer
(
_callback
)
{
if
(
_ipManager
)
{
_ipManager
.
getFastestMsServer
(
GlobalConfig
.
msListAll
,
_callback
);
}
else
{
if
(
_callback
)
{
_callback
({
ip
:
""
});
}
}
}
//保存课堂状态信息
...
...
@@ -577,7 +673,7 @@ export default class MessageEntrance extends Emiter {
// MCU 课堂成功
_mcuJoinMCUClassSuccessHandler
(
_data
)
{
loger
.
log
(
'MCU 课堂成功.'
);
//
loger.log('MCU 课堂成功.');
GlobalConfig
.
setCurrentStatus
(
GlobalConfig
.
statusCode_2
);
//返回给客户端初始化成功的数据
...
...
src/GlobalConfig.js
查看文件 @
47066cb
...
...
@@ -254,8 +254,8 @@ GlobalConfig.portal="112.126.80.182:80";//Sass IP
//GlobalConfig.ip="112.126.80.182";
//GlobalConfig.port="80";
GlobalConfig
.
MCUServerIP
=
"114.215.195.70"
;
GlobalConfig
.
MCUServerPort
=
9003
;
GlobalConfig
.
MCUServerIP
=
""
;
GlobalConfig
.
MCUServerPort
=
''
;
GlobalConfig
.
MSServerIP
=
""
;
//推流 播流的地址
GlobalConfig
.
MSServerPort
=
""
;
...
...
@@ -328,6 +328,7 @@ GlobalConfig.videoQuality=2;//画面质量 0-低;1-中;2-高;
GlobalConfig
.
classAllParam
=
{};
//Sass直接返回的所有课堂信息(最全)
GlobalConfig
.
classDetail
=
{};
//Sass直接返回的当前课堂基本信息
//从Sass获取的
GlobalConfig
.
docListPrepare
=
[];
// 已经提前上传的文档,进入课堂后需要自动加载
GlobalConfig
.
recordList
=
[];
//录制服务器地址集合
GlobalConfig
.
docList
=
[];
//文档服务器地址集合
...
...
@@ -338,11 +339,18 @@ GlobalConfig.musicListPrepare=[];//提提前上传的music集合
GlobalConfig
.
rsList
=
[];
//录制回放中视频点播地址
//根据IP从server获取
GlobalConfig
.
mcuListFromServer
=
[];
//根据userIP从server获取的mcu列表
GlobalConfig
.
msListFromServer
=
[];
//根据userIP从server获取的ms列表
GlobalConfig
.
country
=
""
;
//国家
GlobalConfig
.
city
=
""
;
//城市
GlobalConfig
.
province
=
""
;
//服务商
GlobalConfig
.
isp
=
""
;
//服务商
GlobalConfig
.
mcuListAll
=
[];
//所有MCU集合(sass+server)
GlobalConfig
.
msListAll
=
[];
//所有MS集合(sass+server)
GlobalConfig
.
isRecordPlayBack
=
false
;
//是否是录制回放,默认是否
GlobalConfig
.
allowRecordMaxTime
=
14400
;
//(秒)允许录制的最长时间,默认是4小时
export
default
GlobalConfig
;
...
...
src/IpManager.js
0 → 100644
查看文件 @
47066cb
/**
*
* IP 管理(ip信息或,动态选点)
* */
import
Emiter
from
'Emiter'
;
import
Loger
from
'Loger'
;
import
MD5
from
"md5"
;
import
iphunter
from
'iphunter'
;
import
fetchJsonp
from
'fetch-jsonp'
;
// 日志对象
const
loger
=
Loger
.
getLoger
(
'IpManager'
);
const
TIME_OUT
=
2000
;
//选点超时
const
MS_DEFAULT_PORT
=
"1935"
;
//默认流媒体端口
const
MCU_DEFAULT_PORT
=
"7777"
;
//默认的mcu端口
const
SPEED_TEST_PORT
=
'5555'
;
//测速端口(MCU/MS)
class
IpManager
extends
Emiter
{
constructor
()
{
super
();
}
//根据userIp获取ip相关的信息,参数是userIp
getUserIpInfo
(
token
,
userIp
,
_callback
,
_timeOutDelay
)
{
let
userIpInfo
=
{
ret
:
-
1
};
// //("addr=" + ip + "&token=b657c3507b324353e09c1958ee956a98efceb3e3"),转成MD5
let
md5Str
=
MD5
(
"addr="
+
userIp
+
"&token=b657c3507b324353e09c1958ee956a98efceb3e3"
);
let
timestamp
=
new
Date
().
getTime
();
let
url
=
`
http
:
//ipapi.ipip.net/find?addr=${userIp}&sid=14&uid=5237&sig=${md5Str}&_=${timestamp}`;
loger
.
log
(
"获取IP信息->"
,
url
);
let
_this
=
this
;
fetchJsonp
(
url
,
{
timeout
:
_timeOutDelay
||
TIME_OUT
,
}).
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
];
//运营商
}
loger
.
warn
(
'获取IP信息->完成->'
,
userIpInfo
);
if
(
_callback
)
{
_callback
(
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();
}*/
}
}).
catch
(
function
(
ex
)
{
loger
.
warn
(
'获取IP信息->失败->'
,
ex
.
message
);
if
(
_callback
)
{
_callback
(
userIpInfo
);
}
});
}
//获取最快的MCU服务器地址,参数是一个ip数组
getFastestMcuServer
(
_ipList
,
_callback
,
_timeOutDelay
)
{
loger
.
log
(
'开始MCU选点-> '
,
_ipList
);
let
callbackData
=
{
ip
:
""
};
if
(
_ipList
==
null
||
_ipList
.
length
<
1
)
{
if
(
_callback
)
{
_callback
(
callbackData
);
}
return
;
}
//对传入的ip数组进行组织
let
newList
=
new
Set
();
let
listLen
=
_ipList
.
length
;
for
(
let
i
=
0
;
i
<
listLen
;
i
++
)
{
let
msItem
=
_ipList
[
i
];
if
(
msItem
&&
msItem
.
ip
)
{
//测速的时候,ip地址要拼接成带端口的完整地址,测速的端口是固定的
newList
.
add
((
msItem
.
ip
+
':'
+
SPEED_TEST_PORT
));
}
}
//过滤完重复ip
let
ipListArr
=
Array
.
from
(
newList
);
loger
.
log
(
'MCU选点->列表'
,
ipListArr
);
if
(
ipListArr
==
null
||
ipListArr
.
length
<
1
)
{
if
(
_callback
)
{
_callback
(
callbackData
);
}
return
;
}
try
{
iphunter
(
ipListArr
,
function
(
fatest_ip_response
)
{
if
(
!
fatest_ip_response
)
{
loger
.
warn
(
'MCU选点-> nothing!'
);
if
(
_callback
)
{
_callback
(
callbackData
);
}
}
else
{
loger
.
log
(
'MCU选点->done -> '
,
fatest_ip_response
);
let
fastestIp
=
fatest_ip_response
.
replace
((
':'
+
SPEED_TEST_PORT
),
''
)
||
""
callbackData
.
ip
=
fastestIp
;
callbackData
.
port
=
''
;
//根据ip从原来的ip列表中查找端口
let
listLen
=
_ipList
.
length
;
for
(
let
i
=
0
;
i
<
listLen
;
i
++
)
{
let
msItem
=
_ipList
[
i
];
if
(
msItem
&&
msItem
.
ip
)
{
if
(
fastestIp
==
msItem
.
ip
)
{
callbackData
.
port
=
msItem
.
port
||
MCU_DEFAULT_PORT
;
break
;
}
}
}
//返回数据
if
(
_callback
)
{
_callback
(
callbackData
);
}
}
},
_timeOutDelay
||
TIME_OUT
);
}
catch
(
err
)
{
loger
.
log
(
'MCU选点->失败'
,
err
.
message
);
}
}
//获取最快的MS服务器地址,参数是一个ip数组
getFastestMsServer
(
_ipList
,
_callback
,
_timeOutDelay
)
{
loger
.
log
(
'开始MS选点->'
,
_ipList
);
let
callbackData
=
{
ip
:
""
};
if
(
_ipList
==
null
||
_ipList
.
length
<
1
)
{
if
(
_callback
)
{
_callback
(
callbackData
);
}
return
;
}
//对传入的ip数组进行组织
let
newList
=
new
Set
();
let
listLen
=
_ipList
.
length
;
for
(
let
i
=
0
;
i
<
listLen
;
i
++
)
{
let
msItem
=
_ipList
[
i
];
if
(
msItem
&&
msItem
.
ip
)
{
//测速的时候,ip地址要拼接成带端口的完整地址,测速的端口是固定的
newList
.
add
((
msItem
.
ip
+
':'
+
SPEED_TEST_PORT
));
}
}
//过滤完重复ip
let
ipListArr
=
Array
.
from
(
newList
);
if
(
ipListArr
==
null
||
ipListArr
.
length
<
1
)
{
if
(
_callback
)
{
_callback
(
callbackData
);
}
return
;
}
loger
.
log
(
'MS选点->列表'
,
ipListArr
);
try
{
iphunter
(
ipListArr
,
function
(
fatest_ip_response
)
{
if
(
!
fatest_ip_response
)
{
loger
.
warn
(
'MS选点-> nothing!'
);
if
(
_callback
)
{
_callback
(
callbackData
);
}
}
else
{
loger
.
log
(
'MS选点->done -> '
,
fatest_ip_response
);
let
fastestIp
=
fatest_ip_response
.
replace
((
':'
+
SPEED_TEST_PORT
),
''
)
||
""
callbackData
.
ip
=
fastestIp
;
callbackData
.
port
=
''
;
//根据ip从原来的ip列表中查找端口
let
listLen
=
_ipList
.
length
;
for
(
let
i
=
0
;
i
<
listLen
;
i
++
)
{
let
msItem
=
_ipList
[
i
];
if
(
msItem
&&
msItem
.
ip
)
{
if
(
fastestIp
==
msItem
.
ip
)
{
callbackData
.
port
=
msItem
.
port
||
MS_DEFAULT_PORT
;
break
;
}
}
}
//返回数据
if
(
_callback
)
{
_callback
(
callbackData
);
}
}
},
_timeOutDelay
||
TIME_OUT
);
}
catch
(
err
)
{
loger
.
warn
(
'MS选点->ERROR -> '
,
err
.
message
);
if
(
_callback
)
{
_callback
(
callbackData
);
}
}
}
//根据user信息从配置文件中MCU连接地址
getServerMcuList
(
country
,
province
,
ctiy
,
isp
,
jsona
)
{
let
countryData
=
jsona
.
MCU
[
country
];
//按country没有查找到就返回default
if
(
!
countryData
)
{
countryData
=
jsona
.
MCU
.
default
||
[];
return
countryData
;
}
if
(
country
!=
"中国"
)
{
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
[];
}
//根据user信息从配置文件中MS连接地址
getServerMsList
(
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
[];
}
}
export
default
IpManager
;
...
...
请
注册
或
登录
后发表评论