index.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { finishSession } from '../../utils/backendApi'
  2. import { loadBackendAuthTokens, loadBackendBaseUrl } from '../../utils/backendAuth'
  3. import { clearSessionRecoverySnapshot, loadSessionRecoverySnapshot } from '../../game/core/sessionRecovery'
  4. import { getBackendSessionContextFromLaunchEnvelope, prepareMapPageUrlForRecovery } from '../../utils/gameLaunch'
  5. Page({
  6. onLoad() {
  7. const recoverySnapshot = loadSessionRecoverySnapshot()
  8. if (recoverySnapshot) {
  9. this.promptRecoveryAtEntry()
  10. return
  11. }
  12. this.redirectToDefaultEntry()
  13. },
  14. redirectToDefaultEntry() {
  15. const tokens = loadBackendAuthTokens()
  16. const url = tokens && tokens.accessToken
  17. ? '/pages/home/home'
  18. : '/pages/login/login'
  19. wx.redirectTo({ url })
  20. },
  21. promptRecoveryAtEntry() {
  22. const recoverySnapshot = loadSessionRecoverySnapshot()
  23. if (!recoverySnapshot) {
  24. this.redirectToDefaultEntry()
  25. return
  26. }
  27. wx.showModal({
  28. title: '恢复对局',
  29. content: '检测到上次有未正常结束的对局,是否继续恢复?',
  30. confirmText: '继续恢复',
  31. cancelText: '放弃',
  32. success: (result) => {
  33. if (result.confirm) {
  34. wx.redirectTo({
  35. url: prepareMapPageUrlForRecovery(recoverySnapshot.launchEnvelope),
  36. })
  37. return
  38. }
  39. const sessionContext = getBackendSessionContextFromLaunchEnvelope(recoverySnapshot.launchEnvelope)
  40. if (!sessionContext) {
  41. clearSessionRecoverySnapshot()
  42. wx.showToast({
  43. title: '已放弃上次对局',
  44. icon: 'none',
  45. duration: 1400,
  46. })
  47. this.redirectToDefaultEntry()
  48. return
  49. }
  50. finishSession({
  51. baseUrl: loadBackendBaseUrl(),
  52. sessionId: sessionContext.sessionId,
  53. sessionToken: sessionContext.sessionToken,
  54. status: 'cancelled',
  55. summary: {},
  56. })
  57. .catch(() => {
  58. // 放弃恢复不阻塞进入业务页;失败只丢给后续状态页处理。
  59. })
  60. .finally(() => {
  61. clearSessionRecoverySnapshot()
  62. wx.showToast({
  63. title: '已放弃上次对局',
  64. icon: 'none',
  65. duration: 1400,
  66. })
  67. this.redirectToDefaultEntry()
  68. })
  69. },
  70. })
  71. },
  72. })