message.ts 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import { timerInterceptor } from '@/utils/timer'
  2. import { FunCode } from '@/constants/funcode'
  3. import { i18n, useErrorInfoStore } from '@/stores'
  4. import eventBus from '@/services/bus'
  5. import { Package50 } from './package'
  6. import { decodeProto } from './package/package50/proto'
  7. /**
  8. * 处理 Package50 消息推送
  9. * @param pkg
  10. * @param contentType
  11. */
  12. export async function pushMessage50(pkg: Package50, contentType: 'encrypted' | 'unencrypted') {
  13. const { getErrorInfoByCode } = useErrorInfoStore()
  14. const { funCode, content } = pkg
  15. const delay = 500 // 延迟推送消息,防止短时间内重复请求
  16. switch (funCode) {
  17. case FunCode.LogoutRsp: {
  18. //console.log('接收到用户登出通知', funCode)
  19. let errcode = 0
  20. if (contentType === 'encrypted') {
  21. const res = await decodeProto<Proto.LogoutRsp>('LogoutRsp', content)
  22. errcode = res.RetCode
  23. } else {
  24. const res = new TextDecoder().decode(content)
  25. errcode = JSON.parse(res).RetCode
  26. }
  27. // 用户登出通知
  28. eventBus.$emit('LogoutNotify', getErrorInfoByCode(errcode) || i18n.global.t('user.login.tips5'))
  29. break
  30. }
  31. case FunCode.MoneyChangedNotify: {
  32. //console.log('接收到资金变动通知', funCode)
  33. timerInterceptor.debounce(() => {
  34. // 资金变动通知
  35. eventBus.$emit('MoneyChangedNotify')
  36. }, delay, funCode.toString())
  37. break
  38. }
  39. case FunCode.OrderDealedNtf: {
  40. timerInterceptor.debounce(() => {
  41. decodeProto<Proto.OrderDealedNtf>('OrderDealedNtf', content).then((data) => {
  42. // 委托单成交通知
  43. eventBus.$emit('OrderDealedNtf', data)
  44. })
  45. }, delay, funCode.toString())
  46. break
  47. }
  48. case FunCode.OrderSuccessedNtf: {
  49. timerInterceptor.debounce(() => {
  50. // 成交通知
  51. eventBus.$emit('OrderSuccessedNtf')
  52. }, delay, funCode.toString())
  53. break
  54. }
  55. // case FunCode.MarketStatusChangeNtf: {
  56. // // 运行状态 - 0:初始化 1:待开市 2:开市 3:休市 4:手工休市 5:闭市 6:确认行权开始 7:确认行权结束 10:日终处理开始 11:日终处理成功 12:日终处理失败 13基础服务结算开始 14基础服务结算成功 23.资金结算开始 24.资金结算成功 25.资金结算失败 26.系统结算成功 27.系统结算失败 28.盘中处理开始 29.盘中处理成功 30.盘中处理失败 31.资金结算开始(内) 32.资金结算成功(内) 33.资金结算失败(内) 40.签到开始 41.签到成功 42.签到部份成功 43.签到失败 44.签退开始 45.签退成功 46.签退部份成功 47.签退失败 48.对账开始 49.对账成功 50.对账失败 51.清算开始 52.清算成功 53.清算失败 54.清算部分成功 55. 系统结算开始 62.今日免清算
  57. // try {
  58. // let status = -1
  59. // if (contentType === 'encrypted') {
  60. // const res = await decodeProto<Proto.MarketStatusChangeNtf>('MarketStatusChangeNtf', content)
  61. // status = res.Status
  62. // } else {
  63. // const res = new TextDecoder().decode(content)
  64. // status = JSON.parse(res).Status
  65. // }
  66. // if ([1, 26].includes(status)) {
  67. // //console.log('接收到市场状态变更通知', status)
  68. // // 用户登出通知
  69. // eventBus.$emit('LogoutNotify', '系统维护,请稍后重新登录')
  70. // }
  71. // } catch {
  72. // console.error('报文解析失败', FunCode.MarketStatusChangeNtf)
  73. // }
  74. // break
  75. // }
  76. case FunCode.ListingOrderChangeNtf: {
  77. //console.log('接收到挂牌委托变更广播通知', funCode)
  78. timerInterceptor.debounce(() => {
  79. // 挂牌委托变更广播通知
  80. eventBus.$emit('ListingOrderChangeNtf')
  81. }, delay, funCode.toString())
  82. break
  83. }
  84. case FunCode.PosChangedNtf: {
  85. //console.log('接收到头寸变化通知', funCode)
  86. timerInterceptor.debounce(() => {
  87. // 头寸变化通知
  88. eventBus.$emit('PosChangedNtf')
  89. }, delay, funCode.toString())
  90. break
  91. }
  92. case FunCode.RiskToWebNtf: {
  93. timerInterceptor.debounce(async () => {
  94. try {
  95. let res: Proto.RiskToWebNtf
  96. if (contentType === 'encrypted') {
  97. res = await decodeProto<Proto.RiskToWebNtf>('RiskToWebNtf', content)
  98. } else {
  99. const data = new TextDecoder().decode(content)
  100. res = JSON.parse(data)
  101. }
  102. const msg = JSON.parse(res.Content)
  103. switch (true) {
  104. case [1, 2].includes(res.RiskLevel):
  105. eventBus.$emit('RiskToWebNtf', msg, 1)
  106. break
  107. case [3, 5].includes(res.RiskLevel):
  108. eventBus.$emit('RiskToWebNtf', msg, 2)
  109. break
  110. }
  111. console.log('接收到风控通知', funCode, res)
  112. } catch (err) {
  113. console.error('报文解析失败', funCode, err)
  114. }
  115. }, delay, funCode.toString())
  116. break
  117. }
  118. case FunCode.DigitalAccountFundsChangedNtf: {
  119. timerInterceptor.debounce(() => {
  120. // 数字账户资金变化通知
  121. eventBus.$emit('DigitalAccountFundsChangedNtf')
  122. }, delay, funCode.toString())
  123. break
  124. }
  125. case FunCode.DigitalAccountChangedNtf: {
  126. timerInterceptor.debounce(() => {
  127. // 数字账户变化通知
  128. eventBus.$emit('DigitalAccountChangedNtf')
  129. }, delay, funCode.toString())
  130. break
  131. }
  132. default: {
  133. if (funCode) {
  134. console.warn('接收到未定义的通知', funCode)
  135. }
  136. }
  137. }
  138. }