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
  }
}