li.shaoyi 2 yıl önce
ebeveyn
işleme
1aeda5cdbe
1 değiştirilmiş dosya ile 97 ekleme ve 0 silme
  1. 97 0
      src/services/websocket/newTrade.ts

+ 97 - 0
src/services/websocket/newTrade.ts

@@ -0,0 +1,97 @@
+import { timerInterceptor } from '@/utils/timer'
+import { FunCode } from '@/constants/funcode'
+import { useLoginStore } from '@/stores'
+import service from '@/services'
+import eventBus from '@/services/bus'
+import { MTP2WebSocket } from './build'
+import { Package50 } from './package'
+
+export default new (class {
+    private loginStore = useLoginStore()
+
+    /** 交易链路 */
+    private socket = new MTP2WebSocket(Package50);
+
+    constructor() {
+        this.socket.onPush = (p) => {
+            const { funCode, content } = p
+            const delay = 500 // 延迟推送消息,防止短时间内重复请求
+
+            switch (funCode) {
+                case FunCode.LogoutRsp: {
+                    //console.log('接收到用户登出通知', funCode)
+                    // 用户登出通知
+                    eventBus.$emit('LogoutNotify', '账号已登出')
+                    break;
+                }
+                case FunCode.MoneyChangedNotify: {
+                    //console.log('接收到资金变动通知', funCode)
+                    timerInterceptor.debounce(() => {
+                        // 资金变动通知
+                        eventBus.$emit('MoneyChangedNotify')
+                    }, delay, funCode.toString())
+                    break
+                }
+                case FunCode.OrderDealedNtf: {
+                    //console.log('接收到成交通知', funCode)
+                    timerInterceptor.debounce(() => {
+                        // 成交通知
+                        eventBus.$emit('OrderDealedNtf')
+                    }, delay, funCode.toString())
+                    break
+                }
+                case FunCode.MarketStatusChangeNtf: {
+                    const res = new TextDecoder().decode(content)
+                    const { Status } = JSON.parse(res) as Proto.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.今日免清算
+                    if ([1, 26].includes(Status)) {
+                        //console.log('接收到市场状态变更通知', Status)
+                        // 用户登出通知
+                        eventBus.$emit('LogoutNotify', '系统维护,请稍后重新登录')
+                    }
+                    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.RiskControlNtf: {
+                    console.log('接收到风控通知', funCode)
+                    const res = new TextDecoder().decode(content)
+                    const riskControlNtf = JSON.parse(res) as Proto.RiskControlNtf
+                    eventBus.$emit('RiskControlNtf', riskControlNtf.MsgContent)
+                    break;
+                }
+                default: {
+                    if (funCode) {
+                        console.warn('接收到未定义的通知', funCode)
+                    }
+                }
+            }
+        }
+    }
+
+    async connect() {
+        const res = await service.onReady()
+        await this.socket.connect(res.tradeWS, this.loginStore.token)
+    }
+
+    /**
+     * 关闭交易链路
+     */
+    close() {
+        this.socket?.close()
+    }
+})