| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import { v4 } from 'uuid'
- import { quoteServerRequest } from '@/services/socket/quote'
- import { sessionData } from '@/stores'
- import eventBus from '@/services/bus'
- import socket from '@/services/socket'
- /**
- * 订阅行情
- */
- export default new (class {
- /** 行情订阅列表 */
- private quoteSubscribeMap = new Map<string, string[]>()
- constructor() {
- // 接收行情服务断线重连成功通知
- eventBus.$on('QuoteServerReconnectNotify', () => {
- this.quoteSubscribe();
- })
- }
- /**
- * 开始行情订阅
- */
- private quoteSubscribe = () => {
- const subscribeData: Proto.QuoteReq[] = []
- this.quoteSubscribeMap.forEach((value) => {
- const item = value.map((code) => ({
- goodsCode: code,
- exchangeCode: 250,
- subState: 0
- }))
- subscribeData.push(...item)
- })
- if (subscribeData.length) {
- console.log('开始行情订阅', subscribeData)
- quoteServerRequest({
- data: subscribeData,
- success: (res) => {
- if (res.length) {
- console.log('行情订阅成功', res)
- } else {
- console.error('行情订阅失败')
- }
- },
- fail: (err) => {
- console.error('行情订阅失败', err)
- }
- })
- } else {
- // 没有订阅商品的时候,断开连接
- socket.closeQuoteServer()
- }
- }
- /**
- * 添加行情订阅
- * @param goodsCodes
- * @param key
- * @returns
- */
- addQuoteSubscribe = (goodsCodes: string[], key?: string) => {
- const uuid = key ?? v4()
- const value = this.quoteSubscribeMap.get(uuid) ?? []
- const start = () => {
- // 对相同 key 订阅的商品进行合并处理
- this.quoteSubscribeMap.set(uuid, [...value, ...goodsCodes])
- this.quoteSubscribe()
- }
- return {
- uuid,
- start,
- stop: () => {
- const flag = this.quoteSubscribeMap.delete(uuid)
- if (flag) {
- console.log('删除订阅', uuid)
- }
- if (sessionData.getLoginInfo('Token')) {
- this.quoteSubscribe()
- }
- return flag
- },
- }
- }
- /**
- * 删除行情订阅
- * @param keys
- */
- removeQuoteSubscribe = (...keys: string[]) => {
- if (keys.length) {
- keys.forEach((key) => {
- if (this.quoteSubscribeMap.delete(key)) {
- console.log('删除订阅', key)
- }
- })
- } else {
- console.log('取消订阅')
- this.quoteSubscribeMap.clear()
- }
- this.quoteSubscribe()
- }
- })
|