1.思路
每隔一段时间定时请求,刷新当前排队情况。返回的queueData
中自带的有当前消息的状态(是在排队queue,还是排队到我了在加载Loading),基于数据状态来刷新UI :
- 当首次进入进入排队状态时,创建异步任务
- 异步任务每10秒请求一次排队数据,然后yield等待
- 一旦发现不是排队状态,通过
AsyncStopAllBinded
停止异步任务 - 整个过程不会阻塞UI线程或造成死循环
2.C/S交互 - 排队
1.客户端先发送初步请求:请求排队
>>> BattleReportAnalysis_C2S_Msg 17:45:47.238
Head:
{
"Type": 4037,
"seqId": 116,
"clientTs": 1756719947238
}
Body:
{
"reportId": 23070368868677855,
"Param": {
"Category": 2,
"groupId": 23070368869078615,
"reportIdx": -1,
"reportId": 23070368868677855
},
"styleId": 2
}
2.服务器收到,下发Ntf:排队情况如何
若queuePos = 1,则UI表现上会显示排队UI1秒后(state.queue)马上进入下一步(state.Loading)
核心:estimatedQueueTimeMs
>>> BattleReportAnalysisNtf 17:45:47.461
Head:
{
"Type": 4146,
"serverTs": 1756719947461
}
Body:
{
"Param": {
"Uid": 23140737488943328,
"Category": 2,
"groupId": 23070368869078615,
"reportIdx": -1,
"reportId": 23070368868677855,
"analyseState": 1
},
"Analysis": {
"Records": [],
"analysingTaskId": 23070368869078625,
"analysingStyleId": 2
},
"queueData": {
"isAnalysing": true,
"queuePos": 1,
"estimatedQueueTimeMs": 13457
}
}
3.服务器针对第一个C2S返回的S2C(无意义)
>>> BattleReportAnalysis_S2C_Msg 17:45:47.461
Head:
{
"Type": 4038,
"seqId": 116,
"serverTs": 1756719947461
}
Body:
{
"Result": 0
}
3.C/S交互 - 正式开始处理
queuePos = 0
1.收到Ntf后,客户端携带reportId发起Query
>>> BattleReportQueryAnalysis_C2S_Msg 17:45:47.461
Head:
{
"Type": 4157,
"seqId": 117,
"clientTs": 1756719947461
}
Body:
{
"Param": {
"Category": 2,
"groupId": 23070368869078615,
"reportIdx": -1,
"reportId": 23070368868677855,
"analyseState": 1
}
}
2.服务器返回排队相关数据:已正式进入解读,解读时间如何?
>>> BattleReportQueryAnalysis_S2C_Msg 17:45:47.633
Head:
{
"Type": 4158,
"seqId": 117,
"serverTs": 1756719947633
}
Body:
{
"Param": {
"Category": 2,
"groupId": 23070368869078615,
"reportIdx": -1,
"reportId": 23070368868677855,
"analyseState": 1
},
"queueData": {
"isAnalysing": true,
"queuePos": 0,
"estimatedQueueTimeMs": 13457
},
"analysisData": {
"Records": [],
"analysingTaskId": 23070368869078625,
"analysingStyleId": 2
}
}
3.服务器完成解读后,携带解读结果,以Ntf的形式发给客户端
>>> BattleReportAnalysisNtf 17:46:00.112
Head:
{
"Type": 4146,
"serverTs": 1756719960112
}
Body:
{
"Param": {
"Uid": 23140737488943328,
"Category": 2,
"groupId": 23070368869078615,
"reportIdx": -1,
"reportId": 23070368868677855,
"analyseState": 3
},
"Analysis": {
"currentStyleId": 2,
"Records": [
{
"styleId": 2,
"Content": "AI战报解读内容"
}
],
"analysingTaskId": 0,
"analysingStyleId": 0
},
"queueData": {
"isAnalysing": false
}
}