websocket.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. // import socket from "@/utils/websocket.js"
  2. let socket_api = 'https://doc.okenx.com:2000'
  3. // import io from '@/js_sdk/hyoga-uni-socket_io/uni-socket.io.js';
  4. import io from '@hyoga/uni-socket.io';
  5. let socket = []
  6. import {
  7. Api_getQuotationNew
  8. } from "@/api/index.js"
  9. const state = {
  10. bids: [],
  11. asks: [],
  12. daymarket: {},
  13. //
  14. getQuotationStatus: false,
  15. usdtList: [],
  16. optional: [],
  17. marketAll: [],
  18. currencyVal: {},
  19. realTimeUpdate: false,
  20. suspend: false
  21. }
  22. const mutations = {
  23. set_socket_update_status: (state, status) => {
  24. state.realTimeUpdate = status;
  25. },
  26. set_currency_val: (state, val) => {
  27. state.currencyVal = val;
  28. }
  29. // SET_CONTRACT: (state, contract) => {
  30. // // 合约账户
  31. // state.contractAccount = contract;
  32. // },
  33. // SET_BIBI: (state, bibi) => {
  34. // // 币币账户
  35. // state.bibiAccount = bibi;
  36. // },
  37. // SET_LEGAL: (state, legal) => {
  38. // // 法币账户
  39. // state.legalAccount = legal;
  40. // },
  41. // SET_GIFTMONEY: (state, GiftMoney) => {
  42. // // 赠金账户
  43. // state.GiftMoneyAccount = GiftMoney;
  44. // },
  45. // SET_STOCKS_COLOR: (state, code) => {
  46. // state.stocksColor = code
  47. // },
  48. // SET_TOKEN: (state, token) => {
  49. // setToken(token)
  50. // state.token = token
  51. // }
  52. }
  53. const nums = (arr) => {
  54. const att = arr.map(el => {
  55. return el[0]
  56. })
  57. const num = Math.max.apply(null, att)
  58. arr.forEach(el => {
  59. let n = Math.round(el[0] / num * 10000) / 100
  60. el[2] = n > 100 ? 100 : n;
  61. })
  62. return arr
  63. }
  64. const actions = {
  65. openSocket({
  66. commit,
  67. state
  68. }, data) {
  69. return false
  70. console.log('打开socket' , )
  71. const socketUrl = 'https://doc.okenx.com:2000';
  72. socket[socket.length - 1] = io(socketUrl, {
  73. query: {},
  74. transports: ['websocket', 'polling'],
  75. timeout: 5000,
  76. });
  77. socket[socket.length - 1].on(data.type, (msg) => {
  78. // console.log('socket = ' , socket , msg)
  79. // if(!socket){
  80. // try{
  81. // socket.disconnect()
  82. // socket.closeSocket()
  83. // }catch{}
  84. // socket = null;
  85. // return false
  86. // }
  87. if (state.currencyVal.legal_id == msg.legal_id && state.currencyVal.currency_id == msg
  88. .currency_id) {
  89. if (msg.type == 'market_depth') {
  90. var buyIn = msg.bids.slice(0, 7);
  91. state.bids = nums(buyIn);
  92. var out = msg.asks.slice(0, 7);
  93. // state.bids = msg.bids
  94. state.asks = nums(out);
  95. }
  96. if (msg.type == 'daymarket') {
  97. state.daymarket = msg;
  98. }
  99. }
  100. // // 主动向服务器发送数据
  101. // socket.emit('send_data', {
  102. // time: +new Date(),
  103. // });
  104. });
  105. },
  106. closeSocket({
  107. commit,
  108. state
  109. }, data) {
  110. console.log('关闭socket' , socket)
  111. try{
  112. socket.disconnect()
  113. // socket.forEach(el => {
  114. // el.disconnect()
  115. // });
  116. // socket
  117. // socket.close()
  118. }catch{}
  119. socket = null;
  120. },
  121. getQuotationNew({
  122. commit,
  123. state
  124. }, data) {
  125. state.suspend = data ? data?.suspend : false
  126. const rq = () => {
  127. Api_getQuotationNew().then(res => {
  128. if (res && res.length > 0) {
  129. let newArr = res.find((item) => item.name == 'USDT').quotation || [];
  130. if (!state.currencyVal || !state.currencyVal?.currency_id) {
  131. state.currencyVal = newArr[0]
  132. console.log('currencyVal = ', state.currencyVal)
  133. }
  134. // 首页推荐
  135. if (newArr && newArr.length > 0) {
  136. const nums = newArr.length > 3 ? 3 : newArr.length;
  137. state.usdtList = newArr.slice(0, nums);
  138. } else {
  139. state.usdtList = []
  140. }
  141. // 自选
  142. state.optional = newArr.slice(0, 6)
  143. // 全部
  144. state.marketAll = newArr
  145. }
  146. }).catch(err => {
  147. }).finally(() => {
  148. setTimeout(() => {
  149. if (!state.suspend) {
  150. rq()
  151. }
  152. }, 1000)
  153. })
  154. }
  155. if (!state.suspend) {
  156. rq()
  157. }
  158. },
  159. }
  160. export default {
  161. namespaced: true,
  162. state,
  163. mutations,
  164. actions
  165. }