import { timerInterceptor } from '@/utils/timer' import { FunCode } from '@/constants/funcode' import { i18n, useErrorInfoStore } from '@/stores' import eventBus from '@/services/bus' import { Package50 } from './package' import { decodeProto } from './package/package50/proto' /** * 处理 Package50 消息推送 * @param pkg * @param contentType */ export async function pushMessage50(pkg: Package50, contentType: 'encrypted' | 'unencrypted') { const { getErrorInfoByCode } = useErrorInfoStore() const { funCode, content } = pkg const delay = 500 // 延迟推送消息,防止短时间内重复请求 switch (funCode) { case FunCode.LogoutRsp: { //console.log('接收到用户登出通知', funCode) let errcode = 0 if (contentType === 'encrypted') { const res = await decodeProto('LogoutRsp', content) errcode = res.RetCode } else { const res = new TextDecoder().decode(content) errcode = JSON.parse(res).RetCode } // 用户登出通知 eventBus.$emit('LogoutNotify', getErrorInfoByCode(errcode) || i18n.global.t('user.login.tips5')) break } case FunCode.MoneyChangedNotify: { //console.log('接收到资金变动通知', funCode) timerInterceptor.debounce(() => { // 资金变动通知 eventBus.$emit('MoneyChangedNotify') }, delay, funCode.toString()) break } case FunCode.OrderDealedNtf: { timerInterceptor.debounce(() => { decodeProto('OrderDealedNtf', content).then((data) => { // 委托单成交通知 eventBus.$emit('OrderDealedNtf', data) }) }, delay, funCode.toString()) break } case FunCode.OrderSuccessedNtf: { timerInterceptor.debounce(() => { // 成交通知 eventBus.$emit('OrderSuccessedNtf') }, delay, funCode.toString()) break } // case FunCode.MarketStatusChangeNtf: { // // 运行状态 - 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.今日免清算 // try { // let status = -1 // if (contentType === 'encrypted') { // const res = await decodeProto('MarketStatusChangeNtf', content) // status = res.Status // } else { // const res = new TextDecoder().decode(content) // status = JSON.parse(res).Status // } // if ([1, 26].includes(status)) { // //console.log('接收到市场状态变更通知', status) // // 用户登出通知 // eventBus.$emit('LogoutNotify', '系统维护,请稍后重新登录') // } // } catch { // console.error('报文解析失败', FunCode.MarketStatusChangeNtf) // } // break // } case FunCode.ListingOrderChangeNtf: { //console.log('接收到挂牌委托变更广播通知', funCode) timerInterceptor.debounce(() => { // 挂牌委托变更广播通知 eventBus.$emit('ListingOrderChangeNtf') }, delay, funCode.toString()) break } case FunCode.PosChangedNtf: { //console.log('接收到头寸变化通知', funCode) timerInterceptor.debounce(() => { // 头寸变化通知 eventBus.$emit('PosChangedNtf') }, delay, funCode.toString()) break } case FunCode.RiskToWebNtf: { timerInterceptor.debounce(async () => { try { let res: Proto.RiskToWebNtf if (contentType === 'encrypted') { res = await decodeProto('RiskToWebNtf', content) } else { const data = new TextDecoder().decode(content) res = JSON.parse(data) } const msg = JSON.parse(res.Content) switch (true) { case [1, 2].includes(res.RiskLevel): eventBus.$emit('RiskToWebNtf', msg, 1) break case [3, 5].includes(res.RiskLevel): eventBus.$emit('RiskToWebNtf', msg, 2) break } console.log('接收到风控通知', funCode, res) } catch (err) { console.error('报文解析失败', funCode, err) } }, delay, funCode.toString()) break } case FunCode.DigitalAccountFundsChangedNtf: { timerInterceptor.debounce(() => { // 数字账户资金变化通知 eventBus.$emit('DigitalAccountFundsChangedNtf') }, delay, funCode.toString()) break } case FunCode.DigitalAccountChangedNtf: { timerInterceptor.debounce(() => { // 数字账户变化通知 eventBus.$emit('DigitalAccountChangedNtf') }, delay, funCode.toString()) break } default: { if (funCode) { console.warn('接收到未定义的通知', funCode) } } } }