Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
debug_shell
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
template admin
debug_shell
Commits
a49d8225
Commit
a49d8225
authored
Oct 31, 2023
by
liujiangnan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 优化壳的加载逻辑和出错重试机制
parent
88aa3d43
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
118 additions
and
43 deletions
+118
-43
debug_shell.js
play/assets/debug_shell/scene/debug_shell.js
+118
-43
No files found.
play/assets/debug_shell/scene/debug_shell.js
View file @
a49d8225
...
...
@@ -17,9 +17,15 @@ cc.Class({
start
()
{
cc
.
game
.
addPersistRootNode
(
cc
.
find
(
"
cacertNode
"
));
this
.
setMiddleLayerProgress
(
`正在初始化配置,请耐心等待`
);
const
middleLayerData
=
JSON
.
parse
(
this
.
getMiddleLayerData
());
this
.
baseUrl
=
middleLayerData
.
baseUrl
;
this
.
middleLayerName
=
middleLayerData
.
middleLayerName
;
if
(
this
.
baseUrl
.
indexOf
(
`staging-`
)
>
0
)
{
this
.
DOMAIN
=
"
http://staging-teach.cdn.ireadabc.com/
"
;
}
else
{
this
.
DOMAIN
=
"
http://teach.cdn.ireadabc.com/
"
;
}
cc
.
debug
.
setDisplayStats
(
false
);
const
welcomeNode
=
cc
.
find
(
`Canvas/welcome/
${
this
.
middleLayerName
}
`
);
...
...
@@ -33,58 +39,107 @@ cc.Class({
);
}
const
uri
=
`/api/template/v
1
/
${
this
.
middleLayerName
}
`
;
const
uri
=
`/api/template/v
2
/
${
this
.
middleLayerName
}
`
;
this
.
setMiddleLayerProgress
(
`正在检查更新`
);
this
.
callNetworkApiGet
(
this
.
baseUrl
,
uri
,
{},
(
respData
)
=>
{
const
data
=
JSON
.
parse
(
respData
);
let
configData
=
data
.
data
.
conf
.
web_desktop
;
if
(
cc
.
sys
.
os
==
cc
.
sys
.
OS_IOS
)
{
configData
=
data
.
data
.
conf
.
ios
;
}
else
if
(
cc
.
sys
.
os
==
cc
.
sys
.
OS_ANDROID
)
{
configData
=
data
.
data
.
conf
.
android
;
}
cc
.
assetManager
.
loadBundle
(
configData
.
bondleUrl
,
{
version
:
configData
.
version
},
async
(
err
,
bundle
)
=>
{
if
(
err
)
{
console
.
log
(
err
);
return
;
}
const
data
=
JSON
.
parse
(
respData
).
data
;
let
sceneName
,
version
,
bondleUrl
=
""
;
bundle
.
loadScene
(
configData
.
sceneName
,
null
,
null
,
(
e
,
scene
)
=>
{
if
(
e
)
{
console
.
log
(
e
);
this
.
setMiddleLayerProgress
(
`正在检查配置文件`
);
const
templateBaseUrl
=
`
${
this
.
DOMAIN
}
h5template/
${
data
.
name
}
/v
${
data
.
last_version
}
`
;
this
.
callNetworkApiGet
(
templateBaseUrl
,
'
/config.json
'
,
{},
(
conf
)
=>
{
conf
=
JSON
.
parse
(
conf
);
sceneName
=
conf
.
android
.
sceneName
;
version
=
""
;
bondleUrl
=
`
${
templateBaseUrl
}
/web_desktop`
;
if
(
cc
.
sys
.
isNative
&&
cc
.
sys
.
os
==
cc
.
sys
.
OS_IOS
)
{
sceneName
=
conf
.
ios
.
sceneName
;
version
=
conf
.
ios
.
version
;
bondleUrl
=
`
${
templateBaseUrl
}
/ios/
${
conf
.
ios
.
sceneName
}
`
;
}
if
(
cc
.
sys
.
isNative
&&
cc
.
sys
.
os
==
cc
.
sys
.
OS_ANDROID
)
{
sceneName
=
conf
.
android
.
sceneName
;
version
=
conf
.
android
.
version
;
bondleUrl
=
`
${
templateBaseUrl
}
/android/
${
conf
.
ios
.
sceneName
}
`
;
}
this
.
setMiddleLayerProgress
(
`正在加载最新的配置文件`
);
cc
.
assetManager
.
loadBundle
(
bondleUrl
,
{
version
:
version
},
async
(
err
,
bundle
)
=>
{
if
(
err
)
{
console
.
log
(
err
);
return
;
}
cc
.
director
.
runScene
(
scene
);
});
}
);
bundle
.
loadScene
(
sceneName
,
null
,
(
finish
,
total
,
item
)
=>
{
const
p
=
Math
.
floor
(
finish
/
total
*
100
);
this
.
setMiddleLayerProgress
(
`正在下载资源
${
p
}
%`
);
},
(
e
,
scene
)
=>
{
if
(
e
)
{
console
.
log
(
e
);
return
;
}
this
.
setMiddleLayerProgress
(
`资源下载完成,正在更新`
);
cc
.
director
.
runScene
(
scene
);
});
}
);
});
});
},
callNetworkApiGet
(
baseUrl
,
uri
,
data
,
callBack
)
{
let
queryStr
=
"
?
"
;
for
(
const
key
in
data
)
{
if
(
Object
.
hasOwnProperty
.
call
(
data
,
key
))
{
const
value
=
data
[
key
];
queryStr
+=
`
${
key
}
=
${
value
}
`
;
}
}
const
xhr
=
new
XMLHttpRequest
();
xhr
.
onreadystatechange
=
()
=>
{
if
(
xhr
.
readyState
==
4
&&
xhr
.
status
>=
200
&&
xhr
.
status
<
400
)
{
callBack
(
xhr
.
responseText
);
}
};
async
callNetworkApiGet
(
baseUrl
,
uri
,
data
,
callBack
)
{
let
queryStr
=
'
?
'
;
const
params
=
[];
for
(
const
key
in
data
)
{
if
(
Object
.
hasOwnProperty
.
call
(
data
,
key
))
{
params
.
push
(
`
${
key
}
=
${
data
[
key
]}
`
);
}
}
queryStr
+=
params
.
join
(
"
&
"
);
const
url
=
`
${
baseUrl
}${
uri
}${
queryStr
}
`
;
console
.
log
(
"
url =
"
+
url
);
xhr
.
open
(
"
GET
"
,
url
,
true
);
xhr
.
send
();
// 如果请求失败 最多尝试5次重连
for
(
let
i
=
0
;
i
<
5
;
i
++
)
{
const
result
=
await
this
.
newXMLHttpRequest
(
url
)
if
(
result
!=
null
)
{
// 正常响应
callBack
(
result
)
break
}
else
{
// 5秒有没有响应 - 重新请求
this
.
setMiddleLayerProgress
(
`请求失败,重试第
${
i
+
1
}
次`
)
}
}
},
newXMLHttpRequest
(
url
)
{
return
new
Promise
((
resovle
,
reject
)
=>
{
const
xhr
=
new
XMLHttpRequest
();
// 设置定时器 5秒终止连接
let
timeoutId
=
setTimeout
(()
=>
{
xhr
.
abort
();
resovle
(
null
)
},
5000
);
xhr
.
onreadystatechange
=
()
=>
{
if
(
xhr
.
readyState
==
4
&&
(
xhr
.
status
>=
200
&&
xhr
.
status
<
400
))
{
// 如果有定时器, 清除定时器
if
(
timeoutId
)
{
clearTimeout
(
timeoutId
);
timeoutId
=
null
;
}
resovle
(
xhr
.
responseText
);
}
};
console
.
log
(
'
url =
'
+
url
);
xhr
.
open
(
'
GET
'
,
url
,
true
);
xhr
.
send
();
})
},
getMiddleLayerData
()
{
if
(
cc
.
sys
.
isNative
&&
cc
.
sys
.
os
==
cc
.
sys
.
OS_IOS
)
{
return
jsb
.
reflection
.
callStaticMethod
(
...
...
@@ -102,8 +157,28 @@ cc.Class({
}
else
{
return
JSON
.
stringify
({
baseUrl
:
"
http://staging-openapi.iteachabc.com
"
,
middleLayerName
:
"
middleLayer_for_
debug
"
,
middleLayerName
:
"
middleLayer_for_
JJ
"
,
});
}
},
setMiddleLayerProgress
(
str
=
""
)
{
if
(
cc
.
sys
.
isNative
&&
cc
.
sys
.
os
==
cc
.
sys
.
OS_IOS
)
{
return
jsb
.
reflection
.
callStaticMethod
(
"
RootViewController
"
,
"
middleLayerProgress:
"
,
str
);
}
else
if
(
cc
.
sys
.
isNative
&&
cc
.
sys
.
os
==
cc
.
sys
.
OS_ANDROID
)
{
return
jsb
.
reflection
.
callStaticMethod
(
"
com/iplayabc/cocos/AppActivity
"
,
"
middleLayerProgress
"
,
"
(Ljava/lang/String;)Ljava/lang/String;
"
,
str
);
}
else
{
console
.
log
(
`加载进度:
${
str
}
`
);
return
null
;
}
},
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment