msgRealQuote.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * @Author : zou.yingbin
  3. * @Create : 2022/3/26 14:52
  4. * @Modify : 2022/3/26 14:52
  5. * @note :
  6. */
  7. package client
  8. import (
  9. "mtp20access/packet"
  10. )
  11. // DispatchRealQuote 分发行情
  12. func DispatchRealQuote(p *packet.MiQuotePacket, clinet *Client) {
  13. // TODO: 目前只实现了订阅发送模式, 未支持全部发送模式
  14. // 解析接收到的商品
  15. // ware := parseWareInfo(p)
  16. // if len(ware) == 1 {
  17. // // 只有一个商品, 不需要重新打包,提高效率
  18. // v := ware[0]
  19. // if s, ok := subMgr.getSession(v.exchId, v.goodsCode); ok {
  20. // for i := range s {
  21. // err := clinet.WriteBuf(p.OriMsg)
  22. // if err != nil {
  23. // // Logger().Errorf("%s push quote error:%v", s[i].info(), err)
  24. // }
  25. // }
  26. // }
  27. // } else {
  28. // // 分发行情到链接
  29. // for _, v := range ware {
  30. // if s, ok := subMgr.getSession(v.exchId, v.goodsCode); ok {
  31. // // 按商品重新打包
  32. // quote := packet.MiQuotePacket{
  33. // BigType: p.BigType,
  34. // SmallType: p.SmallType,
  35. // SerialNum: p.SerialNum,
  36. // Mode: p.Mode,
  37. // }
  38. // quote.Msg = v.buf
  39. // sendBuf := quote.EnPack()
  40. // for i := range s {
  41. // err := s[i].WriteBuf(sendBuf)
  42. // if err != nil {
  43. // // Logger().Errorf("%s push quote error:%v", s[i].info(), err)
  44. // }
  45. // }
  46. // }
  47. // }
  48. // }
  49. clinet.WriteWsBuf(p.OriMsg)
  50. }
  51. // parseWareInfo 从报文中解析出所有报价商品
  52. func parseWareInfo(p *packet.MiQuotePacket) []wareInfo {
  53. data := p.OriMsg[14:]
  54. ware := make([]wareInfo, 0)
  55. nPos1, nPos2 := -1, -1
  56. for i := 0; i < len(data); i++ {
  57. // 报价包开始
  58. if data[i] == 0x10 {
  59. nPos1 = i
  60. }
  61. // 报价包结束
  62. if data[i] == 0x11 {
  63. nPos2 = i + 1
  64. }
  65. if nPos1 >= 0 && nPos2 > 0 {
  66. v := wareInfo{buf: data[nPos1:nPos2]}
  67. v.parseField()
  68. //v.printInfo()
  69. //v.debugPrintAllField()
  70. ware = append(ware, v)
  71. // 重置nPos1, nPos2 继续查找下一个报价包
  72. nPos1, nPos2 = -1, -1
  73. }
  74. }
  75. return ware
  76. }